Sto facendo una simulazione di un modello GARCH. Il modello in sé non è troppo rilevante, quello che vorrei chiederti riguarda l'ottimizzazione della simulazione in R. Più di ogni cosa, se vedi qualsiasi spazio per la vettorizzazione, ci ho pensato ma non riesco a vederlo. Finora quello che ho è questa:Simulazione di GARCH in R
Let:
# ht=cond.variance in t
# zt= random number
# et = error term
# ret= return
# Horizon= n periods ahead
Quindi questo è il codice:
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))
}
voglio fare una simulazione dei rendimenti 5 periodi d'ora, così ho verrà eseguito questo diciamo 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))
Penso che questo è in esecuzione ragionevolmente veloce, ma vorrei chiedere a voi se non v'è alcun modo di appr oaching questo problema in un modo migliore.
Grazie!
assomiglia '' mu' e omega' non sono definiti. Puoi spostare 'zt' al di fuori del ciclo e generare tutti i valori casuali contemporaneamente, quindi indicizzarli in essi? Hai provato la 'libreria (compilatore)'? – Chase
'library (compiler); f1 <- cmpfun (randhelp) 'è tutto ciò che serve per dargli un vortice. A volte dà una grande spinta, altre volte non così tanto ... ma facile da testare quindi merita un breve IMHO. In bocca al lupo :) – Chase