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

ugarchfilter() zur Analyse der aktuellen Dynamik von Mittelwert und Volatilität ugarchforecast() auf einem ugarchspec‑Objekt (statt auf ugarchfit()), um Vorhersagen für zukünftigen Mittelwert und zukünftige Volatilität zu treffenmsftret: Tagesrenditen 1999–2017. Schätze das beste Modell mit den bis Ende 2010 verfügbaren msftret:
# AR(1)-GJR-GARCH mit schiefer Student-t-Verteilung spezifizieren
garchspec <- ugarchspec(mean.model = list(armaOrder = c(1,0)),
variance.model = list(model = "gjrGARCH"), distribution.model = "sstd")
# Modell schätzen
garchfit <- ugarchfit(data = msftret["/2010-12"], spec = garchspec)
Definiere progarchspec als die Spezifikation für den Produktionseinsatz und nutze setfixed(progarchspec) <- as.list(coef(garchfit)):
progarchspec <- garchspec
setfixed(progarchspec) <- as.list(coef(garchfit))
Verwende die Funktion ugarchfilter():
garchfilter <- ugarchfilter(data = msftret, spec = progarchspec)
plot(sigma(garchfilter))

garchforecast <- ugarchforecast(data = msftret,
fitORspec = progarchspec,
n.ahead = 10) # Vorhersagen für die nächsten zehn Tage
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
Anstatt das komplette Modell auf beobachtete Renditen anzuwenden, kannst du künstliche Log‑Renditen simulieren:
$$ r_{t} = \log(P_{t}) - \log(P_{t-1}) $$
Nützlich, um die Zufälligkeit zukünftiger Renditen und die Auswirkung auf Preise zu beurteilen, da der zukünftige Preis lautet:
$$ P_{t + h} = P_{t} \exp(r_{t + 1} + r_{t + 2} + \ldots + r_{t + h}) $$
Verwende die Log‑Renditen für die Schätzung
# Log-Renditen berechnen
msftlogret <- diff(log(MSFTprice))[-1]
Schätze das Modell und übertrage die Parameter auf das Simulationsmodell
garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
variance.model = list(model = "gjrGARCH"),
distribution.model = "sstd")
# Modell schätzen
garchfit <- ugarchfit(data = msftlogret, spec = garchspec)
# Das geschätzte Modell als Simulationsmodell setzen
simgarchspec <- garchspec
setfixed(simgarchspec) <- as.list(coef(garchfit))
Für die Simulation mit ugarchpath() wählst du:
spec : vollständig spezifiziertes GARCH‑Modellm.sim : Anzahl der simulierten Rendite‑Zeitreihenn.sim: Anzahl der Beobachtungen pro simulierte Zeitreihe (z. B. 252)rseed : beliebige Zahl zur Festlegung des Seeds für die Generierung (für Reproduzierbarkeit)simgarch <- ugarchpath(spec = simgarchspec, m.sim = 4,
n.sim = 10 * 252, rseed = 12345)
Mit fitted() erhältst du die simulierten Renditen:
simret <- fitted(simgarch)
plot.zoo(simret)

plot.zoo(sigma(simgarch))

Vier Simulationen von Aktienkursen über 10 Jahre, Startpreis = 1:
simprices <- exp(apply(simret, 2, "cumsum"))
matplot(simprices, type = "l", lwd = 3)

GARCH-Modelle in R