Value-at-risk

GARCH-modeller i R

Kris Boudt

Professor of finance and econometrics

Value-at-risk

  • Ett populärt mått på nedsiderisk: 5% value-at-risk. 5%-kvantilen av avkastningsfördelningen representerar den bästa avkastningen i de 5% sämsta scenarierna.
    Fördelning av daglig avkastning per år
GARCH-modeller i R

Fördelning av daglig avkastning per år

GARCH-modeller i R

Ett framåtblickande angreppssätt behövs

  • Kvantiler för rullande fönster av avkastningar är bakåtblickande:
    • ex post-fråga: vad har 5%-kvantilen varit för daglig avkastning under det senaste året
    • ex ante-fråga: vad är 5%-kvantilen i den predikterade fördelningen för framtida avkastning?
  • Framåtblickande riskhantering använder predikterade kvantiler från GARCH-skattningen.
  • Hur? Metoden quantile() appliceras på ett ugarchroll-objekt.
GARCH-modeller i R

Arbetsflöde för att beräkna predikterade 5%-kvantiler från ugarchroll

ugarchspec(): Ange vilken GARCH-modell du vill använda

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

ugarchroll(): Skatta GARCH-modellen på rullande skattningsfönster

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

quantile(): Beräkna den predikterade kvantilen

garchVaR <- quantile(garchroll, probs = 0.05)

Du kan välja en annan förlustsannolikhet: 1% och 2,5% är också vanliga

GARCH-modeller i R

Value-at-risk-diagram för förlustsannolikhet 5%

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

Fördelning av daglig avkastning per år

GARCH-modeller i R

Överskridning och VaR-täckning

En VaR-överskridning inträffar när den faktiska avkastningen understiger det predikterade value-at-risk: $ R_t \ < {VaR}_t$.

Frekvensen av VaR-överskridningar kallas VaR-täckning.

# Calculation of coverage for S&P 500 returns and 5% probability level
mean(actual < garchVaR)
0.05159143
GARCH-modeller i R

VaR-täckning och modellvalidering

  • Tolkning av täckning för VaR vid förlustsannolikhet $\alpha$ (t.ex. 5%):
    • En giltig prediktionsmodell har en täckning som ligger nära sannolikhetsnivån $\alpha$.
    • Om täckning $\gg$ $\alpha$: för många överskridningar – den predikterade kvantilen bör vara mer negativ. Risken för förlust har underskattats.
    • Om täckning $\ll$ $\alpha$: för få överskridningar – den predikterade kvantilen var för negativ. Risken för förlust har överskattats.
GARCH-modeller i R

Faktorer som försämrar prestandan

distribution.model = "std" i stället för distribution.model = "sstd":

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

Rullande skattning och 5% VaR-prediktion:

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-modeller i R

Ytterligare försämring

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

i stället för

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

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

Rullande skattning och 5% VaR-prediktion:

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-modeller i R

Ännu större försämring

refit.every = 1000

i stället för

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-modeller i R

Nedsiderisk handlar om att tänka i predikterade kvantiler.

GARCH-modeller i R

Preparing Video For Download...