私はGARCHモデルのシミュレーションを行っています。モデル自体はあまり関連性がありません。私はRのシミュレーションを最適化することについてお聞きしたいと思います。ベクトル化の余地があれば、何と考えても見えません。これまでのところ私が持っているものは以下です:GARCHのシミュレーションR
はしてみましょう:私は今から戻って5つの周期のシミュレーションをしたい
randhelp= function(horizon=horizon){
ret <- zt <- et <- rep(NA,horizon)#initialize ret and zt et
for(j in 1:horizon){
zt[j]= rnorm(1,0,1)
et[j] = zt[j]*sqrt(ht[j])
ret[j]=mu + et[j]
ht[j+1]= omega+ alpha1*et[j]^2 + beta1*ht[j]
}
return(sum(ret))
}
ので、私:
# ht=cond.variance in t
# zt= random number
# et = error term
# ret= return
# Horizon= n periods ahead
は、これはコードですこれを10000としましょう。
#initial values of the simulation
ndraws=10000
horizon=5 #5 periods ahead
ht=rep(NA,horizon) #initialize ht
ht[1] = 0.0002
alpha1=0.027
beta1 =0.963
mu=0.001
omega=0
sumret=sapply(1:ndraws,function(x) randhelp(horizon))
私はこれがかなり速く実行されていると思いますが、私はあなたに何か方法があるかどうか質問したいと思いますこの問題をより良い方法で解き明かします。
ありがとうございます!
:-)改善の余地が 'mu'と' omega'が定義されていないように見えません。ループの外側で 'zt'を動かし、すべてのランダムな値を一度に生成してからそれらにインデックスを付けることができますか?あなたは 'ライブラリ(コンパイラ)'を試しましたか? – Chase
'ライブラリ(コンパイラ); f1 < - cmpfun(randhelp) 'はそれを渦巻きするために必要なすべてです。時にはそれは大きなブーストをもたらします、それ以外の時間はそれほどではありませんが、簡単なIMHOの価値があるので、テストするのは簡単です。がんばろう :) – Chase