Value-at-risk

Modèles GARCH en R

Kris Boudt

Professor of finance and econometrics

Value-at-risk

  • Mesure courante du risque à la baisse : VaR à 5 %. Le quantile à 5 % de la distribution des rendements représente le meilleur rendement parmi les 5 % pires scénarios.
    Distribution of daily returns per year
Modèles GARCH en R

Distribution des rendements quotidiens par année

Modèles GARCH en R

Approche prospective nécessaire

  • Les quantiles sur fenêtres glissantes de rendements regardent vers le passé :
    • question ex post : quel a été le quantile à 5 % des rendements quotidiens sur la dernière année ?
    • question ex ante : quel est le quantile à 5 % de la distribution prédite du rendement futur ?
  • Une gestion des risques prospective utilise les quantiles prédits par l'estimation GARCH.
  • Comment ? La méthode quantile() appliquée à un objet ugarchroll.
Modèles GARCH en R

Flux de travail pour obtenir les quantiles prédits à 5 % avec 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

Modèles GARCH en R

Graphique de la VaR pour une probabilité de perte de 5 %

actual <- xts(as.data.frame(garchroll)$Realized, time(garchVaR))
VaRplot(alpha = 0.05, actual = actual, VaR = garchVaR)

Distribution des rendements quotidiens par année

Modèles GARCH en R

Dépassement et couverture de VaR

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
Modèles GARCH en R

Couverture de VaR et validation du modèle

  • Interprétation de la couverture pour une VaR à la probabilité de perte $\alpha$ (p. ex., 5 %) :
    • Un modèle prédictif valable a une couverture proche du niveau $\alpha$ utilisé.
    • Si la couverture $\gg$ $\alpha$ : trop de dépassements ; le quantile prédit devrait être plus négatif. Le risque de perte a été sous-estimé.
    • Si la couverture $\ll$ $\alpha$ : trop peu de dépassements ; le quantile prédit était trop négatif. Le risque de perte a été surestimé.
Modèles GARCH en R

Facteurs qui détériorent la performance

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
Modèles GARCH en R

Détérioration supplémentaire

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
Modèles GARCH en R

Détérioration encore plus marquée

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

Le risque à la baisse exige de penser en quantiles prédits.

Modèles GARCH en R

Preparing Video For Download...