Trajectories of Brownian motion

Published

December 23, 2022

rm(list=ls())
library(berryFunctions)
library(ggplot2)
library("gridExtra")

sim.bm<-function(x,n_path=n_path){
  tau<-x[1]
  bm<-cumsum(c(0,tau*rnorm(n_path-1)))
  return(bm)
}

##### tau=1

n_path<-100
start<-1:(n_path-1)
end<-2: n_path
reps<-100

tau1<-1
x<-c(tau1)
sim.bm.array1<-array(NA,c(reps,n_path))
for(i in 1:reps){
  sim.bm.array1[i,]<-sim.bm(x,n_path=n_path)
}

tau2<-4
x<-c(tau2)
sim.bm.array2<-array(NA,c(reps,n_path))
for(i in 1:reps){
  sim.bm.array2[i,]<-sim.bm(x,n_path=n_path)
}

p1<-ggplot() + ylim(range(unlist(sim.bm.array1),unlist(sim.bm.array2)))
p2<-ggplot() + ylim(range(unlist(sim.bm.array1),unlist(sim.bm.array2)))

for(repIndex in 1:reps){
  df1 <- data.frame(x = start, y = c(sim.bm.array1[repIndex,start]), xend=end, yend=c(sim.bm.array1[repIndex,end])) 
  p1<- p1 +  geom_segment(data=df1, mapping=aes(x=x, y=y, xend=xend, yend=yend), size=0.5, color="#CC6666")
}

sim.bm.ave1<-apply(sim.bm.array1,2,mean)
df.ave1 <- data.frame(x = start, y = c(sim.bm.ave1[start]), xend=end, yend=c(sim.bm.ave1[end])) 

p1<- p1 +  geom_segment(data=df.ave1, mapping=aes(x=x, y=y, xend=xend, yend=yend), size=1, color="#56B4E9")

p1<-p1+scale_color_manual(values=c("#CC6666"))
p1<-p1+theme(axis.title.x=element_blank(),
             axis.text.x=element_blank(),
             axis.ticks.x=element_blank(),
             axis.title.y=element_blank()
)# + ggtitle("BM")
p1=p1+theme_bw()+coord_flip()



hist_p1 <- ggplot()+geom_histogram(aes(  sim.bm.array1[,n_path]  ),color="#CC6666", fill="lightblue")+ xlim(range(unlist(sim.bm.array1[,n_path]),unlist(sim.bm.array2[,n_path]))) + theme(axis.title.x=element_blank(),axis.text.x=element_blank(),axis.ticks.x=element_blank(),axis.text.y=element_blank(),axis.ticks.y=element_blank(),axis.title.y=element_blank())

##### tau=4

for(repIndex in 1:reps){
  df2 <- data.frame(x = start, y = c(sim.bm.array2[repIndex,start]), xend=end, yend=c(sim.bm.array2[repIndex,end])) 
  p2<- p2 +  geom_segment(data=df2, mapping=aes(x=x, y=y, xend=xend, yend=yend), size=0.5, color="#CC6666")
}

sim.bm.ave2<-apply(sim.bm.array2,2,mean)
df.ave2 <- data.frame(x = start, y = c(sim.bm.ave2[start]), xend=end, yend=c(sim.bm.ave2[end])) 

p2<- p2 +  geom_segment(data=df.ave2, mapping=aes(x=x, y=y, xend=xend, yend=yend), size=1, color="#56B4E9")

p2<-p2+scale_color_manual(values=c("#CC6666"))
p2<-p2+theme(axis.title.x=element_blank(),
             axis.text.x=element_blank(),
             axis.ticks.x=element_blank(),
             axis.title.y=element_blank()
)# + ggtitle("BM")

p2=p2+theme_bw()+coord_flip()


hist_p2 <- ggplot()+geom_histogram(aes(  sim.bm.array2[,n_path]  ),color="#CC6666", fill="lightblue") + xlim(range(unlist(sim.bm.array1[,n_path]),unlist(sim.bm.array2[,n_path])))+ theme(axis.title.x=element_blank(),axis.text.x=element_blank(),axis.ticks.x=element_blank(),axis.text.y=element_blank(),axis.ticks.y=element_blank(),axis.title.y=element_blank())

grid.arrange(hist_p1, hist_p2, p1, p2, nrow=2, ncol = 2,widths=c(2, 2),heights=c(1,3))