Modèles GARCH en R
Kris Boudt
Professor of finance and econometrics


quantile() appliquée à un objet ugarchroll.ugarchspec() : préciser le modèle GARCH à utiliser
garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
variance.model = list(model = "gjrGARCH"),
distribution.model = "sstd")
ugarchroll() : estimer le modèle GARCH sur des échantillons glissants
garchroll <- ugarchroll(garchspec, data = sp500ret, n.start = 2500,
refit.window = "moving", refit.every = 100)
quantile() : calculer le quantile prédit
garchVaR <- quantile(garchroll, probs = 0.05)
Vous pouvez choisir une autre probabilité de perte : 1 % et 2,5 % sont aussi courantes
actual <- xts(as.data.frame(garchroll)$Realized, time(garchVaR))
VaRplot(alpha = 0.05, actual = actual, VaR = garchVaR)

Une dépassement de VaR survient quand le rendement réalisé est inférieur à la valeur à risque prédite : $ R_t \ < {VaR}_t$.
La fréquence des dépassements de VaR s'appelle la couverture de VaR.
# Calcul de la couverture pour les rendements du S&P 500 et un seuil de 5 %
mean(actual < garchVaR)
0.05159143
distribution.model = "std" au lieu de distribution.model = "sstd" :
garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
variance.model = list(model = "gjrGARCH"),
distribution.model = "std")
Estimation glissante et prédiction de la VaR à 5 % :
garchroll <- ugarchroll(garchspec, data = sp500ret, n.start = 2500,
refit.window = "moving", refit.every = 100)
garchVaR <- quantile(garchroll, probs = 0.05)
mean(actual < garchVaR) # returns 0.05783233
variance.model = list(model = "sGARCH")
au lieu de
variance.model = list(model = "gjrGARCH") :
garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
variance.model = list(model = "sGARCH"),
distribution.model = "std")
Estimation glissante et prédiction de la VaR à 5 % :
garchroll <- ugarchroll(garchspec, data = sp500ret, n.start = 2500,
refit.window = "moving", refit.every = 100)
garchVaR <- quantile(garchroll, probs = 0.05)
mean(actual < garchVaR) # returns 0.06074475
refit.every = 1000
au lieu de
refit.every = 100 :
garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
variance.model = list(model = "sGARCH"),
distribution.model = "std")
garchroll <- ugarchroll(garchspec, data = sp500ret, n.start = 2500,
refit.window = "moving", refit.every = 1000)
garchVaR <- quantile(garchroll, probs = 0.05)
mean(actual < garchVaR) # returns 0.06199293
Modèles GARCH en R