R中的几何布朗运动模拟

时间:2016-04-06 22:09:31

标签: r simulation

我使用了两种不同的方法来模拟GBM。一个是SDE,另一个是f(t)的解析解。但是我得到了不同的结果。我已经设置了随机种子。我无法弄清楚有什么区别。非常感谢!

set.seed(12345)
f0 <-102
mu <-(0.05)
sigma <-0.08
T <-0.5
t <- seq(1/365,T,by=1/365)
n <-length(t)
#method 1
f<-numeric(n)
f<-sapply(t,function(t) f0*exp((mu-0.5*sigma^2)*t+sigma*rnorm(1,mean=0,sd=sqrt(t))))
diff <- f- f0
plot(t,f,type="l")

#method 2
dt <- 1/365
f2<-numeric(n)
f2[1]<- f0
delta<-0
for (i in 2:n) {
  delta = mu*f2[i-1]*dt+sigma*f2[i-1]*rnorm(1,mean=0,sd=sqrt(dt))
  f2[i]=f2[i-1]+delta
}
plot(t,f2,type="l")

enter image description here

1 个答案:

答案 0 :(得分:3)

不同的原因是第一种方法是错误的。基本上,您正在模拟的过程不是一个连续的过程,因为在生成新的随机变量的每个时刻,您应该只生成增量并求和旧值。

对第一种方法的修改将解决问题:

#method 1
f<-numeric(n)
f<-f0*exp(cumsum((mu-sigma*sigma/2)*T/n + sigma*sqrt(T/n)*rnorm(n)))
diff <- f- f0
plot(t,f,type="l")