Value-at-risk

GARCH-modellen in R

Kris Boudt

Professor of finance and econometrics

Value-at-risk

  • Een populaire maat voor neerwaarts risico: 5% value-at-risk. Het 5%-kwantiel van de rendementsverdeling is het beste rendement in de 5% slechtste scenario’s.
    Verdeling van dagrendementen per jaar
GARCH-modellen in R

Verdeling van dagrendementen per jaar

GARCH-modellen in R

Vooruitkijken is nodig

  • Kwantielen uit rollende vensters zijn terugkijkend:
    • ex post-vraag: wat was het 5%-kwantiel van de dagrendementen over het afgelopen jaar?
    • ex ante-vraag: wat is het 5%-kwantiel van de voorspelde verdeling van het toekomstige rendement?
  • Vooruitkijkend risicobeheer gebruikt voorspelde kwantielen uit de GARCH-schatting.
  • Hoe? Methode quantile() toegepast op een ugarchroll-object.
GARCH-modellen in R

Workflow voor voorspelde 5%-kwantielen met ugarchroll

ugarchspec(): Specificeer het GARCH-model

garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
                        variance.model = list(model = "gjrGARCH"),
                        distribution.model = "sstd")

ugarchroll(): Schat het GARCH-model op rollende steekproeven

garchroll <- ugarchroll(garchspec, data = sp500ret, n.start = 2500, 
                        refit.window = "moving", refit.every = 100)

quantile(): Bereken het voorspelde kwantiel

garchVaR <- quantile(garchroll, probs = 0.05)

Je kunt een andere verlieskans kiezen: 1% en 2,5% zijn ook gangbaar

GARCH-modellen in R

Value-at-risk-plot bij verlieskans 5%

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

Verdeling van dagrendementen per jaar

GARCH-modellen in R

Overschrijding en VaR-dekking

Een VaR-overschrijding treedt op wanneer het werkelijke rendement lager is dan de voorspelde value-at-risk: $ R_t \ < {VaR}_t$.

De frequentie van VaR-overschrijdingen heet de VaR-dekking.

# Berekening van dekking voor S&P 500-rendementen en kansniveau 5%
mean(actual < garchVaR)
0.05159143
GARCH-modellen in R

VaR-dekking en modelvalidatie

  • Interpretatie van dekking voor VaR bij verlieskans $\alpha$ (bijv. 5%):
    • Een valide model heeft een dekking dicht bij het gebruikte kansniveau $\alpha$.
    • Als dekking $\gg$ $\alpha$: te veel overschrijdingen; het voorspelde kwantiel moet negatiever. Het verliesrisico is onderschat.
    • Als dekking $\ll$ $\alpha$: te weinig overschrijdingen; het voorspelde kwantiel was te negatief. Het verliesrisico is overschat.
GARCH-modellen in R

Factoren die de prestaties verslechteren

distribution.model = "std" in plaats van distribution.model = "sstd":

garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
                        variance.model = list(model = "gjrGARCH"),
                        distribution.model = "std")

Rollende schatting en 5% VaR-voorspelling:

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

Verdere verslechtering

variance.model = list(model = "sGARCH")

in plaats van

variance.model = list(model = "gjrGARCH"):

garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
                        variance.model = list(model = "sGARCH"),
                        distribution.model = "std")

Rollende schatting en 5% VaR-voorspelling:

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

Nog verdere verslechtering

refit.every = 1000

in plaats van

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

Neerwaarts risico betekent denken in voorspelde kwantielen.

GARCH-modellen in R

Preparing Video For Download...