Tôi đang thực hiện mô phỏng mô hình GARCH. Bản thân mô hình không quá liên quan, những gì tôi muốn hỏi bạn là tối ưu hóa mô phỏng trong R. Hơn bất cứ thứ gì nếu bạn thấy bất kỳ phòng nào cho vector hóa, tôi đã nghĩ về nó nhưng tôi không thể nhìn thấy nó. Cho đến nay những gì tôi có là thế này:Mô phỏng GARCH trong R
Lết:
# ht=cond.variance in t
# zt= random number
# et = error term
# ret= return
# Horizon= n periods ahead
Vì vậy, đây là mã:
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))
}
tôi muốn làm một mô phỏng của lợi nhuận 5 giai đoạn từ nay, vì vậy tôi sẽ chạy điều này giả sử 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))
Tôi nghĩ rằng điều này đang chạy khá nhanh nhưng tôi muốn hỏi bạn có cách nào appr không oaching vấn đề này một cách tốt hơn.
Cảm ơn!
Trông như 'mu' và 'omega' không được định nghĩa. Bạn có thể di chuyển 'zt' bên ngoài vòng lặp và tạo tất cả các giá trị ngẫu nhiên cùng một lúc, sau đó chỉ mục vào chúng? Bạn đã thử 'thư viện (trình biên dịch) 'chưa? – Chase
'thư viện (trình biên dịch); f1 <- cmpfun (randhelp) 'là tất cả những gì cần thiết để cung cấp cho nó một xoáy. Đôi khi nó mang lại một sự thúc đẩy lớn, những lúc khác không quá nhiều ... nhưng dễ dàng để thử nghiệm đáng để IMHO ngắn ngủi. Chúc may mắn :) – Chase