Gebruik het gevalideerde GARCH‑model in productie

GARCH-modellen in R

Kris Boudt

Professor of finance and econometrics

Gebruik in productie

Verdeling van dagrendementen per jaar

GARCH-modellen in R

Nieuwe functionaliteit

  • Gebruik ugarchfilter() om de recente dynamiek in gemiddelde en volatiliteit te analyseren
  • Gebruik ugarchforecast() op een ugarchspec‑object (in plaats van ugarchfit()) om toekomstige gemiddelde en volatiliteit te voorspellen
GARCH-modellen in R

Voorbeeld met MSFT‑rendementen

  • msftret: dagrendementen 1999–2017.
  • Stel dat het model is gefit met data t/m eind 2010.
  • Je gebruikt dit model eind 2017 om historische volatiliteit te analyseren en toekomstige volatiliteit te voorspellen.
GARCH-modellen in R

Stap 1: Definieer de uiteindelijke modelspecificatie

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))
GARCH-modellen in R

Stap 2: Analyse van gemiddelde- en volatilititeitsdynamiek

Gebruik de functie ugarchfilter():

garchfilter <- ugarchfilter(data = msftret, spec = progarchspec)
plot(sigma(garchfilter))                                

Verdeling van dagrendementen per jaar

GARCH-modellen in R

Stap 3: Voorspel toekomstige rendementen

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
GARCH-modellen in R

Gebruik in simulatie

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}) $$

GARCH-modellen in R

Stap 1: Calibreer het simulatiemodel

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))
GARCH-modellen in R

Stap 2: Voer de simulatie uit met `ugarchpath()`

Simulatie met de functie ugarchpath() vereist keuzes voor:

  • spec : volledig gespecificeerd GARCH‑model
  • m.sim : aantal gesimuleerde reeksen rendementen
  • n.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)
GARCH-modellen in R

Stap 3: Analyse van gesimuleerde rendementen

Methode fitted() geeft de gesimuleerde rendementen:

simret <- fitted(simgarch)
plot.zoo(simret) 

Gesimuleerde rendementen

GARCH-modellen in R

Analyse van gesimuleerde volatiliteit

plot.zoo(sigma(simgarch))

Gesimuleerde volatiliteit

GARCH-modellen in R

Analyse van gesimuleerde prijzen

Grafiek van 4 simulaties van 10 jaar aandelenprijzen, startprijs 1:

simprices <- exp(apply(simret, 2, "cumsum"))
matplot(simprices, type = "l", lwd = 3)

Gesimuleerde prijzen

GARCH-modellen in R

Tijd om te oefenen met setfixed(), ugarchfilter(), ugarchforecast() en ugarchpath()

GARCH-modellen in R

Preparing Video For Download...