
Brownian motion is a central object of probability theory. The idea of Lévy’s construction is to construct the Brownian motion step by step on finite sets
of dyadic points. As

![Rendered by QuickLaTeX.com [0,1]](http://datatreker.com/wp-content/ql-cache/quicklatex.com-3cc8fd6498e8f4b5820a88c718c78b0d_l3.png)

It is pretty easy to illustrate this construction using
R
and the package gganimate
. We use the same notation as in the proof of Wiener’s theorem given on page 23 in “Brownian motion” by Peter Mörters and Yuval Peres.
library(dplyr)
library(gganimate)
library(transformr)
set.seed(42)
n_max <- 14 # maximal number of steps
D <- (0: 2^n_max)/2^n_max # this is in fact D_n_max
B <- list()
Z <- rnorm(1)
B[[1]] <- c(0, Z/2 + rnorm(1), Z)
for (n in 2:n_max){
B[[n]] <- rep(0, 2^n+1)
index_known <- seq(1,2^n+1, by=2) # indices where values are known from previous steps
B[[n]][index_known] <- B[[n-1]]
index_unknown <- seq(2, 2^n, by=2) # indices where values are not yet defined
for (d in index_unknown){
B[[n]][d] <- 0.5*(B[[n]][d-1]+B[[n]][d+1])+ rnorm(1)*2^(-(n+1)/2)
}
}
## interpolation and transformation in a data.frame
df <- data.frame(time=numeric(),
value=numeric(),
id=numeric())
for (n in 1:n_max){
D_n<-(0: 2^n)/2^n
B_interpol<- approx(D_n, B[[n]], xout = D)$y # interpolation
df_new <- data.frame(time=D,
value=B_interpol,
id=n)
df <- bind_rows(df, df_new)
}
## animation
ggplot(df, aes(x=time, y=value)) +
geom_line()+
transition_states(
id,
transition_length = 2,
state_length = 1
) +
labs(title = 'Levy`s construction of Brownian motion. Step: {closest_state}', x = 'time', y = 'position') +
ease_aes('sine-in-out')
One thought on “Lévy’s construction of Brownian motion”
Comments are closed.