GARCH-modellen in R
Kris Boudt
Professor of finance and econometrics

ugarchfilter() om de recente dynamiek in gemiddelde en volatiliteit te analyseren ugarchforecast() op een ugarchspec‑object (in plaats van ugarchfit()) om toekomstige gemiddelde en volatiliteit te voorspellenmsftret: dagrendementen 1999–2017. Fit het beste model met de msftret beschikbaar eind 2010:
# Specify AR(1)-GJR GARCH model with skewed student t distribution
garchspec <- ugarchspec(mean.model = list(armaOrder = c(1,0)),
variance.model = list(model = "gjrGARCH"), distribution.model = "sstd")
# Estimate the model
garchfit <- ugarchfit(data = msftret["/2010-12"], spec = garchspec)
Definieer progarchspec als de specificatie voor productie en gebruik setfixed(progarchspec) <- as.list(coef(garchfit)):
progarchspec <- garchspec
setfixed(progarchspec) <- as.list(coef(garchfit))
Gebruik de functie ugarchfilter():
garchfilter <- ugarchfilter(data = msftret, spec = progarchspec)
plot(sigma(garchfilter))

garchforecast <- ugarchforecast(data = msftret,
fitORspec = progarchspec,
n.ahead = 10) # Make predictions for next ten days
cbind(fitted(garchforecast), sigma(garchforecast))
2017-12-29 2017-12-29
T+1 0.0004781733 0.01124870
T+2 0.0003610470 0.01132550
T+3 0.0003663683 0.01140171
T+4 0.0003661265 0.01147733
T+5 0.0003661375 0.01155238
T+6 0.0003661370 0.01162688
T+7 0.0003661371 0.01170083
T+8 0.0003661371 0.01177424
T+9 0.0003661371 0.01184712
T+10 0.0003661371 0.01191948
In plaats van het volledige model op waargenomen rendementen toe te passen, kun je kunstmatige log‑rendementen simuleren:
$$ r_{t} = \log(P_{t}) - \log(P_{t-1}) $$
Handig om willekeur in toekomstige rendementen en prijsimpact te beoordelen, want de toekomstige prijs is:
$$ P_{t + h} = P_{t} \exp(r_{t + 1} + r_{t + 2} + \ldots + r_{t + h}) $$
Gebruik de log‑rendementen in de schatting
# Compute log returns
msftlogret <- diff(log(MSFTprice))[-1]
Schat het model en zet de modelparameters in het simulatiemodel
garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
variance.model = list(model = "gjrGARCH"),
distribution.model = "sstd")
# Estimate the model
garchfit <- ugarchfit(data = msftlogret, spec = garchspec)
# Set that estimated model as the model to be used in the simulation
simgarchspec <- garchspec
setfixed(simgarchspec) <- as.list(coef(garchfit))
Simulatie met de functie ugarchpath() vereist keuzes voor:
spec : volledig gespecificeerd GARCH‑modelm.sim : aantal gesimuleerde reeksen rendementenn.sim: aantal observaties per gesimuleerde reeks (bijv. 252)rseed : getal om de seed vast te zetten (voor reproduceerbaarheid)simgarch <- ugarchpath(spec = simgarchspec, m.sim = 4,
n.sim = 10 * 252, rseed = 12345)
Methode fitted() geeft de gesimuleerde rendementen:
simret <- fitted(simgarch)
plot.zoo(simret)

plot.zoo(sigma(simgarch))

Grafiek van 4 simulaties van 10 jaar aandelenprijzen, startprijs 1:
simprices <- exp(apply(simret, 2, "cumsum"))
matplot(simprices, type = "l", lwd = 3)

GARCH-modellen in R