gpt4 book ai didi

r - 在 R 中模拟 GARCH

转载 作者:行者123 更新时间:2023-12-04 17:38:40 24 4
gpt4 key购买 nike

我正在模拟 GARCH 模型。模型本身不太相关,我想问你的是关于优化 R 中的模拟。最重要的是,如果你看到任何矢量化的空间,我已经考虑过,但我看不到它。到目前为止,我所拥有的是:

让:

#    ht=cond.variance in t
# zt= random number
# et = error term
# ret= return
# Horizon= n periods ahead

所以这是代码:
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))
}

我想模拟 5 个周期后的返回,所以我将运行这个假设 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))

我认为这运行得相当快,但我想问你是否有任何方法可以更好地解决这个问题。

谢谢!

最佳答案

您可以使用大小为 N 的向量,而不是在循环中使用数字:
删除隐藏在 sapply 中的循环.

randhelp <- function(
horizon=5, N=1e4,
h0 = 2e-4,
mu = 0, omega=0,
alpha1 = 0.027,
beta1 = 0.963
){
ret <- zt <- et <- ht <- matrix(NA, nc=horizon, nr=N)
ht[,1] <- h0
for(j in 1:horizon){
zt[,j] <- rnorm(N,0,1)
et[,j] <- zt[,j]*sqrt(ht[,j])
ret[,j] <- mu + et[,j]
if( j < horizon )
ht[,j+1] <- omega+ alpha1*et[,j]^2 + beta1*ht[,j]
}
apply(ret, 1, sum)
}
x <- randhelp(N=1e5)

关于r - 在 R 中模拟 GARCH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9969962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com