Interpolating Brownian motion

Let W(t) be a standard Wiener process, a.k.a. a one-dimensional Brownian motion.

We can produce a discrete realization of W by first setting W(0) = 0. Then let W(1) be a sample from a N(0, 1) random variable. Then let W(2) be W(1) plus another N(0, 1) sample. At each integer n > 0, W(n) equals W(n-1) plus a N(0, 1) sample. Say we do this for n up to 1000.

Then for whatever reason we wish we’d produced a discretized realization with a sample at 800.5. We could start over, generating samples at steps of size 1/2. This time we’d add a N(0, 1/2) sample at each step [1].

We’d have to throw away a lot of work. How might we reuse the values we’ve already sampled?

(Update: Thanks to the comments I learned that interpolating Brownian motion is called a “Brownian bridge” in finance.)

The first thing you might think of might be to set W(800.5) to be the average of W(800) and W(801). That would be appropriate if we were sampling a deterministic function, but not when we’re sampling a stochastic process.

To decide the right thing to do we have to look back at the definition of a standard Wiener process. The three axioms are

  1. W(0) = 0.
  2. For s > t ≥ 0. W(s) – W(t) has distribution N(0, st).
  3. For vust ≥ 0. W(s) – W(t) and W(v) – W(u) are independent.

Using linear interpolation violates (3) because if we set W(800.5) to be the average of W(800) and W(801), then W(801) – W(800.5) and W(800.5) – W(800) are not independent: they’re equal. That’s as dependent as it gets.

Another thing you might think of would be to add a N(0, 0.5) sample to W(800) because that’s exactly what you’d do if you had generated the Brownian path from scratch taking step sizes 0.5. And if you threw away the samples from 801 onward and started over again, that would work. But if you want to keep W(801) and its successors, you have to do something else.

Why wouldn’t this work? Because

W(801) – W(800.5)

would have too much variance, 1.5 when it should be 0.5.

The right thing to do is a sort of merger of the two ideas above: do the linear interpolation and add a N(0, 0.25) sample.

That is, we take

W(800.5) = 0.5 W(800) + 0.5 W(801) + N(0, 0.25).

Does this work? Let’s check that W(801) – W(800.5) has the right distribution.

W(801) – W(800.5) = 0.5W(801) – 0.5 W(800) – N(0, 0.25)

The distribution of

X = W(801) – W(800)

is N(0, 1), so 0.5 X has distribution N(0, 0.25). Thus

W(801) – W(800.5)

has the distribution of the difference of two N(0, 0.25) random variables, which is N(0, 0.5), as it should be.

A similar argument shows that W(800.5) – W(800) also has the right distribution.

Related posts

[1] There’s always some ambiguity when you see a normal distribution with numeric parameters. Is the second parameter the standard deviation or the variance? If you see N(μ, σ) then by convention the second parameter σ is the standard deviation. If you see N(μ, σ²) then by convention the second parameter σ² is the variance. If you see N(0, 1/2) as above, is 1/2 a standard deviation or a variance? I intend it to be a variance.

This is an example of why some have called conventional statistical notation a “nomenclatural abomination.” You often can’t tell what a literal number means. You have to ask “If you were to write that number as a variable, what notation would you use?” In this case, you’d want to know whether 1/2 is a σ or a σ².

7 thoughts on “Interpolating Brownian motion

  1. I doubt this will catch on, but Python’s named arguments suggests one could write N(μ = 0, σ² = 1/2) if you needed to stress the point. It’s a bit cumbersome, but it’s quicker than having to write a footnote!

  2. Wouldn’t another option be to rescale your 1000 samples so that they are samples for the 1/2 step, then make 1000 more to fill it up to t=1000?

  3. You might want to mention the term “Brownian bridge” and link to its Wikipedia article. At least in quantitative finance, Brownian bridges are often used to formalize interpolation of Wiener processes.

  4. I’m curious, are Brownian bridges Markovian? My intuition tells me yes, but I’m unable to prove it.

  5. Thanks for this post — I’ve wondered how people could “zoom in” on a plot of Brownian motion without having to redo the simulation every time. Cool!

    For fun I worked out how to interpolate not just halfway, but any time in between two discrete values of a Wiener process: If you know the values of W(a) and W(c) and want to simulate W(b) for some b in [a,c], the correct thing to do is again interpolate linearly, then add a sample from N(μ = 0, σ² = (b-a)(c-b)/(c-a)). In the case of a = 800, b = 800.5, c = 801, the variance works out to (0.5)(0.5)/(1) = 0.25 like in your example.

Comments are closed.