Value-at-risk

Modelos GARCH em R

Kris Boudt

Professor of finance and econometrics

Value-at-risk

  • Uma medida popular de risco de queda: value-at-risk de 5%. O quantil de 5% da distribuição de retornos representa o melhor retorno nos 5% piores cenários.
    Distribuição dos retornos diários por ano
Modelos GARCH em R

Distribuição dos retornos diários por ano

Modelos GARCH em R

É preciso olhar para frente

  • Quantis de janelas móveis de retornos olham para trás:
    • questão ex post: qual foi o quantil de 5% dos retornos diários no último ano
    • questão ex ante: qual é o quantil de 5% da distribuição prevista do retorno futuro?
  • A gestão de risco prospectiva usa os quantis previstos pela estimação GARCH.
  • Como? Método quantile() aplicado a um objeto ugarchroll.
Modelos GARCH em R

Fluxo para obter quantis previstos de 5% com ugarchroll

ugarchspec(): Especifique qual modelo GARCH você quer usar

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

ugarchroll(): Estime o modelo GARCH em amostras móveis de estimação

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

quantile(): Calcule o quantil previsto

garchVaR <- quantile(garchroll, probs = 0.05)

Você pode escolher outra probabilidade de perda: 1% e 2,5% também são populares

Modelos GARCH em R

Gráfico de value-at-risk para probabilidade de perda de 5%

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

Distribuição dos retornos diários por ano

Modelos GARCH em R

Excedência e cobertura do VaR

Uma excedência de VaR ocorre quando o retorno real é menor que o value-at-risk previsto: $ R_t \ < {VaR}_t$.

A frequência de excedências de VaR é chamada de cobertura de VaR.

# Cálculo da cobertura para retornos do S&P 500 e nível de 5%
mean(actual < garchVaR)
0.05159143
Modelos GARCH em R

Cobertura do VaR e validação do modelo

  • Interpretação da cobertura para VaR na probabilidade de perda $\alpha$ (ex.: 5%):
    • Um modelo válido tem cobertura próxima ao nível $\alpha$ usado.
    • Se a cobertura $\gg$ $\alpha$: excedências demais: o quantil previsto deveria ser mais negativo. O risco de perda foi subestimado.
    • Se a cobertura $\ll$ $\alpha$: poucas excedências, o quantil previsto foi negativo demais. O risco de perda foi superestimado.
Modelos GARCH em R

Fatores que pioram o desempenho

distribution.model = "std" em vez de distribution.model = "sstd":

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

Estimação móvel e previsão de VaR de 5%:

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

Piora adicional

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

em vez de

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

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

Estimação móvel e previsão de VaR de 5%:

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

Piora ainda maior

refit.every = 1000

em vez 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) # retorna 0.06199293
Modelos GARCH em R

Risco de queda é pensar em quantis previstos.

Modelos GARCH em R

Preparing Video For Download...