Value-at-Risk

GARCH-Modelle in R

Kris Boudt

Professor of finance and econometrics

Value-at-Risk

  • Ein gängiges Maß für Abwärtsrisiko: 5%-Value-at-Risk. Das 5%-Quantil der Renditeverteilung ist die beste Rendite in den 5% schlechtesten Szenarien.
    Verteilung der Tagesrenditen pro Jahr
GARCH-Modelle in R

Verteilung der Tagesrenditen pro Jahr

GARCH-Modelle in R

Vorausschauender Ansatz ist nötig

  • Quantile aus rollierenden Fenstern sind rückblickend:
    • ex post: Wie war das 5%-Quantil der Tagesrenditen im letzten Jahr?
    • ex ante: Wie ist das 5%-Quantil der prognostizierten Verteilung der künftigen Rendite?
  • Vorausschauendes Risikomanagement nutzt vorhergesagte Quantile aus der GARCH-Schätzung.
  • Wie? Methode quantile() auf ein ugarchroll-Objekt anwenden.
GARCH-Modelle in R

Workflow für vorhergesagte 5%-Quantile mit ugarchroll

ugarchspec(): Lege fest, welches GARCH-Modell du nutzt

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

ugarchroll(): Schätze das GARCH-Modell auf rollierenden Stichproben

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

quantile(): Berechne das vorhergesagte Quantil

garchVaR <- quantile(garchroll, probs = 0.05)

Du kannst auch andere Verlustwahrscheinlichkeiten wählen: 1% und 2,5% sind ebenfalls üblich

GARCH-Modelle in R

Value-at-Risk-Plot für 5% Verlustwahrscheinlichkeit

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

Verteilung der Tagesrenditen pro Jahr

GARCH-Modelle in R

Überschreitung und VaR-Coverage

Eine VaR-Überschreitung liegt vor, wenn die tatsächliche Rendite kleiner ist als der vorhergesagte Value-at-Risk: $ R_t \ < {VaR}_t$.

Die Häufigkeit der VaR-Überschreitungen heißt VaR-Coverage.

# Berechnung der Coverage für S&P-500-Renditen und 5%-Niveau
mean(actual < garchVaR)
0.05159143
GARCH-Modelle in R

VaR-Coverage und Modellvalidierung

  • Interpretation der Coverage für VaR bei Verlustwahrscheinlichkeit $\alpha$ (z. B. 5%):
    • Gültiges Prognosemodell: Coverage nahe dem verwendeten Niveau $\alpha$.
    • Wenn Coverage $\gg$ $\alpha$: zu viele Überschreitungen; das vorhergesagte Quantil sollte negativer sein. Das Verlustrisiko wurde unterschätzt.
    • Wenn Coverage $\ll$ $\alpha$: zu wenige Überschreitungen; das vorhergesagte Quantil war zu negativ. Das Verlustrisiko wurde überschätzt.
GARCH-Modelle in R

Faktoren, die die Leistung verschlechtern

distribution.model = "std" statt distribution.model = "sstd":

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

Rollierende Schätzung und 5%-VaR-Prognose:

garchroll <- ugarchroll(garchspec, data = sp500ret, n.start = 2500, 
                        refit.window = "moving", refit.every = 100)
garchVaR <- quantile(garchroll, probs = 0.05)
mean(actual < garchVaR) # ergibt 0.05783233
GARCH-Modelle in R

Weitere Verschlechterung

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

statt

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

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

Rollierende Schätzung und 5%-VaR-Prognose:

garchroll <- ugarchroll(garchspec, data = sp500ret, n.start = 2500, 
                        refit.window = "moving", refit.every = 100)
garchVaR <- quantile(garchroll, probs = 0.05)
mean(actual < garchVaR) # ergibt 0.06074475
GARCH-Modelle in R

Noch stärkere Verschlechterung

refit.every = 1000

statt

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) # ergibt 0.06199293
GARCH-Modelle in R

Abwärtsrisiko heißt, über vorhergesagte Quantile nachzudenken.

GARCH-Modelle in R

Preparing Video For Download...