1 votos

Predicción a 2 días vista del valor en riesgo con GARCH(1,1) en R

Digamos que tengo un conjunto de datos de 10 años de Tesla (ejemplo) y estoy tomando el cambio porcentual del lag 2:

tsla <- quantmod::getSymbols("TSLA", from = base::as.Date("2011-01-01"), to = base::as.Date("2022-01-31"), auto.assign = F)
tsla = as_tibble(tsla)
head(tsla)
d = tsla%>%
  dplyr::select(TSLA.Adjusted)%>%
  dplyr::mutate(Close = TSLA.Adjusted)%>%
  dplyr::mutate(y = as.numeric((Close - dplyr::lag(Close, 2)) / Close))%>%
  dplyr::select(Close,y)%>%
  tidyr::drop_na();d

Que se ven así:

# A tibble: 2,786 × 2
   Close        y
   <dbl>    <dbl>
 1  5.37  0.00783
 2  5.58  0.0434 
 3  5.65  0.0499 
 4  5.69  0.0200 
 5  5.39 -0.0475 
 6  5.39 -0.0553 
 7  5.24 -0.0282 
 8  5.15 -0.0470 
 9  5.13 -0.0226 
10  4.81 -0.0716 
# … with 2,776 more rows

Ahora quiero ajustar el modelo GARCH(1,1) con innovaciones normales.

garnor1 = function(x){
  require(fGarch)
  t = length(x)
  fit = garchFit(~garch(1,1),data=x,trace=F,cond.dist="norm")
  m = fit@fitted
  cv = fit@sigma.t
  var = m+cv*qnorm(0.01) # low tail 
  return(var[t])
}

Lo que he conseguido es estimar el menor valor en riesgo para los rendimientos de 2 días hasta el tiempo $t$ . Esto dará un número que es el VaR hasta ahora (digamos hoy). ¿Estoy en lo cierto hasta ahora?

En caso afirmativo, sé que el VaR se está calculando a partir de la función predictiva para el $t+2$ valor cuantílico. Haciendo esto tengo que predecir la función anterior:

g11pre = function(x){
  require(fGarch)
  fit = garchFit(~garch(1,1),data=x,trace=F,cond.dist="norm")
  df=coef(fit)["shape"]
  p = predict(fit,2)
  m=p$meanForecast
  cv=p$standardDeviation
  var=m+cv*qnorm(0.01)
  return(var[2])
}

¿Y esta última función predictiva la tengo que backtestar o la anterior?

Editar

Para el backtesting en la función predictiva he probado algo por mi cuenta (para entenderlo bien):

db=  d%>%
dplyr::mutate(back_lower = zoo::rollapplyr(y,252,FUN = g11pre,by = 21,fill=NA))%>%
  tidyr::fill(back_lower)%>%
  tidyr::drop_na()

Sé que parece extraño, pero me explico: estoy utilizando el conjunto de datos de 10 años. El período de estimación son los primeros 252 días y luego el rollo de un mes (21) días, no estoy interesado en la evaluación de 2 días del modelo. El resultado del backtesting:

p = ggplot() + 
  geom_line(data = db, aes(x =1:length(y) , y = y), color = "black") +
  geom_line(data = db, aes(x = 1:length(back_lower), y = back_lower), color = "red") +
  xlab('') +
  ylab('risk low')

Eso parece un gráfico de pasos (esto es lo que debe parecer)

enter image description here

1voto

xrost Puntos 129

En general, la previsión del valor en riesgo (VaR) siguiendo un marco GARCH paramétrico sigue las prácticas habituales de previsión univariante (puntual). Además, siempre estamos interesados en la precisión de un modelo VaR basado en el rendimiento de las previsiones fuera de la muestra.

Previsión del valor en riesgo fuera de la muestra a dos días vista:

Asumiendo que estamos parados en el tiempo $t$ con información $\mathcal{F}_t$ entonces para un modelo de media constante $\mu$ podemos definir un marco GARCH(1,1) univariante para un proceso de retorno $r_{t+1}$ como:

\begin{align*} r_{t+1} \vert \mathcal{F}_{t} &= \mu + \varepsilon_{t+1}\\ \varepsilon_{t+1} &= \sigma_{t+1} \cdot z_{t+1}\\ \sigma^2_{t+1} &= \omega + \alpha_1 \varepsilon_{t}^2 + \beta_1 \sigma_{t}^2, \end{align*} donde $z_t \overset{iid}{\sim} D(0,1)$ ( que en su caso es la distribución gaussiana ). Es la distribución estandarizada de las innovaciones, $z_t$ que determina el cuantil en la próxima ecuación paramétrica del VaR. Entonces, el VaR en el momento $t+1$ dada la filtración $\mathcal{F}_t$ puede definirse como ( equivalente al VaR de un paso adelante ):

$$ VaR_{t+1\vert t}^\alpha = \mu + \sigma_{t+1\vert t}\cdot\Phi^{-1}_\alpha\left(0,1\right) $$ Obsérvese que en algunos casos anulamos el cálculo anterior para obtener estimaciones de VaR positivas. Esto tiene sentido cuando se trata de pérdidas en cantidad nocional. No obstante, la previsión del VaR en dos pasos puede obtenerse mediante un esquema de previsión recursivo:

$$ VaR_{t:t+2\vert t}^\alpha = \mu + \sigma_{t:t+2\vert t}\cdot\Phi^{-1}_\alpha\left(0,1\right), \tag{1} $$ donde observamos que el único objeto previsible en el marco del VaR gaussiano es el proceso de volatilidad condicional. Obsérvese que la previsión de la volatilidad condicional de 2 pasos por delante, $\sigma_{t:t+2\vert t}$ se recupera utilizando la predicción en el tiempo $t+1$ . Utilizando el hecho de que la previsión recursiva de varios pasos para el GARCH(1,1) viene dada por ( véase este enlace p. 449 ):

$$ \mathbb{E}\left[\sigma_{t+h}^2 \vert \mathcal{F}_t\right] = \sum_{i=0}^{h-1} (\alpha_1 + \beta_1)^i \cdot \omega + (\alpha_1+\beta_1)^{h-1}(\alpha_1 \varepsilon_t^2+\beta_1 \sigma^2_t) $$

obtenemos para $t+2$ :

\begin{align*} \sigma^2_{t:t+2\vert t}&:=\mathbb{E}\left[\sigma_{t+2}^2 \vert \mathcal{F}_t\right] \\ &= \omega + (\alpha_1 + \beta_1) \mathbb{E}\left[\sigma_{t+1}^2\vert \mathcal{F}_t\right]\\ &= \omega + (\alpha_1+\beta_1)\omega + (\alpha_1+\beta_1) \alpha_1 \varepsilon_t^2 + (\alpha_1+\beta_1) \beta_1 \sigma_t^2. \end{align*} Insertando esto en $(1)$ produce la previsión/predicción del VaR en 2 pasos por delante en el marco de GARCH(1,1). Ahora puede realizar el siguiente procedimiento recursivo para adquirir sus previsiones:

  1. Ajuste el modelo GARCH(1,1) a través de una ventana móvil o expansiva,
  2. obtener estimaciones $(\hat{\omega},\hat{\alpha}_1, \hat{\beta}_1, \hat{\mu})$ en cada momento $t$ ,
  3. calcular la previsión del VaR en dos pasos, $VaR_{t:t+2\vert t}^\alpha $ .

Enfoque alternativo:

En lugar de la metodología anterior, se podría ajustar el modelo GARCH(1,1) en retornos muestreados dispersos que se muestrean cada dos días, es decir. $\{r_t,r_{t+2},r_{t+4},\ldots\}$ .

Esto dará lugar a volatilidades condicionales cada dos días. A continuación, la previsión del VaR de un paso adelante, $VaR_{t+1\vert t}^\alpha$ definido en $(1)$ le da una estimación del VaR para los próximos 2 días.

Esta metodología es fácil de implementar ya que se puede seguir la mayoría de la literatura sobre cómo definen el pronóstico de 1 paso adelante sin necesidad de derivaciones adicionales. Para ello, puede inspirarse en el R código proporcionado aquí ( sin embargo, sólo estiman el VaR dentro de la muestra, no fuera de ella) .


Si desea especificar un modelo de media variable en el tiempo $\mu_t$ , entonces se necesita adicionalmente la previsión condicional de 2 pasos por delante de $\mu_{t+2\vert t}$ para recuperar sus previsiones de VaR. Estas pueden recuperarse muy a menudo utilizando un esquema recursivo similar. Espero que esto proporcione algo de información.

1voto

TweakFix Puntos 449

Mira el modelo: \begin{align} r_t&=\mu+\epsilon_t \\ \epsilon_t&=\sigma_tz_t \\ \sigma_t^2&=\omega+\alpha_1\epsilon_{t-1}^2+\beta_1\sigma_{t-1}^2\\ z_t &\overset{iid}{\sim}\mathcal N(0,1) \end{align} Básicamente, le interesa el $\alpha$ cuantil de la distribución $r_{t+2}\vert \mathcal F_t$ . Se podría suponer que $r_{t+2}\vert \mathcal F_t \sim \mathcal N(\mu, \sigma_{t+2\vert t}^2)$ . Sin embargo, esto no es correcto ya que $\sigma_{t+2\vert t}^2$ es (a diferencia de $\sigma_{t+1\vert t}^2$ ) una variable aleatoria. Por lo tanto, la distribución condicional de dos pasos por delante es una mezcla de varianza de normales. Por lo tanto, estrictamente hablando, la solución de Pleb sólo es correcta si se está interesado en la predicción del VaR de un paso adelante. La verdadera densidad condicional se obtiene integrando la incertidumbre ( $\epsilon_{t+1}$ ) en $\sigma_{t+2 \vert t}^2$ : $$ r_{t+2}\vert \mathcal F_t \sim \int_{-\infty}^{\infty}\phi(\mu,\sigma_{t+2\vert t+1}^2)\phi(\epsilon_{t+1})d\epsilon_{t+1} $$

0voto

Nilo Puntos 6

Su pregunta parece ser si hay que evaluar/probar los VaR dentro de la muestra o los VaR fuera de la muestra. Supongo que quiere hacerse una idea del rendimiento previsto de su modelo con datos futuros no vistos. Si su modelo fuera exactamente correcto, ambas formas estarían bien. Sin embargo, en la realidad los modelos no son exactamente correctos. Entonces, los VaR fuera de muestra son los relevantes, ya que (a diferencia de los VaR dentro de muestra) imitan la forma en que usted utilizará su modelo.

Tenga en cuenta que si los períodos de dos días se solapan, el tamaño efectivo de la muestra es la mitad del tamaño nominal de la muestra. (No puedo saber por su código si sólo mira cada dos días o todos los días. En este último caso, las rentabilidades vecinas de 2 días se solaparán).

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X