2016-04-06 15 views
1

私はGBMをシミュレートするために2つの異なる方法を使用しました。 1つはSDE、もう1つはf(t)の解析解を持つものである。しかし、私は別の結果を得る。私はすでに私のランダムな種子を設定しています。私は違いが何であるか把握できません。どうもありがとう!幾何ブラウン運動シミュレーションin R

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

異なっている理由は、第1の方法は、単に間違っているということです。基本的にシミュレートしているプロセスは、毎回のステップで新しいランダム変数を生成している間は、連続したプロセスではなく、増分だけを生成して古い値に加算する必要があります。

第1の方法と、この変更は、問題を解決します:

#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")