Variantes del modelo GARCH

Entendiendo la volatilidad
Variantes GARCH
causalidad en la volatilidad
Author

Javier Sánchez García

Published

January 1, 2014

Desde la proposición de la versión original, se han estudiado numerosas variantes del modelo GARCH para adaptarse a las necesidades del análisis o investigación.

Una de las variantes más conocidas es la suposición de que los errores siguen una distribución t de student en lugar de una distribución normal. La distribución t de student tiene colas más pesadas que la normal, con lo cual, asigna más probabilidad a sucesos extremos. Esto permite ajustar mejor series que son más tendentes de lo normal a situarse en esos valores, como las financieras. Este modelo se denomina t-GARCH.

\[ Y_t = \beta_0 + \dots + e_t \]

\[ e_t \sim \mathcal{t}(0,v_t) \]

\[ v_t = \alpha_0 + \sum_{i=1}^p \alpha_ie^2_{t-i} + \sum_{j=1}^q\beta_jv_{t-j} \]

library(rugarch, quietly = T)
library(forecast, quietly=T)
library(ggplot2, quietly=T)
tgarchspec <- ugarchspec(
           variance.model=list(model="sGARCH",
                               garchOrder=c(1,1), submodel="TGARCH"),
           mean.model=list(armaOrder=c(1,0)), 
           distribution.model="std") #Especificación
 data("dji30ret")
 datostgarch <- ts(dji30ret$AA, start=c(1987,03), frequency=365) #Hacer serie
ajustetgarch <- ugarchfit(spec=tgarchspec, data=datostgarch) #Estimación
ajustetgarch #Resultados del modelo

*---------------------------------*
*          GARCH Model Fit        *
*---------------------------------*

Conditional Variance Dynamics   
-----------------------------------
GARCH Model : sGARCH(1,1)
Mean Model  : ARFIMA(1,0,0)
Distribution    : std 

Optimal Parameters
------------------------------------
        Estimate  Std. Error  t value Pr(>|t|)
mu      0.000348    0.000238   1.4624 0.143619
ar1     0.047709    0.013474   3.5409 0.000399
omega   0.000003    0.000002   1.2581 0.208366
alpha1  0.044389    0.009370   4.7372 0.000002
beta1   0.949991    0.011147  85.2235 0.000000
shape   6.924101    0.476246  14.5389 0.000000

Robust Standard Errors:
        Estimate  Std. Error  t value Pr(>|t|)
mu      0.000348    0.000237  1.46797 0.142112
ar1     0.047709    0.014519  3.28611 0.001016
omega   0.000003    0.000011  0.26822 0.788526
alpha1  0.044389    0.046098  0.96293 0.335584
beta1   0.949991    0.053982 17.59826 0.000000
shape   6.924101    1.600889  4.32516 0.000015

LogLikelihood : 13987.92 

Information Criteria
------------------------------------
                    
Akaike       -5.0650
Bayes        -5.0578
Shibata      -5.0650
Hannan-Quinn -5.0625

Weighted Ljung-Box Test on Standardized Residuals
------------------------------------
                        statistic  p-value
Lag[1]                      2.327 0.127151
Lag[2*(p+q)+(p+q)-1][2]     4.335 0.002034
Lag[4*(p+q)+(p+q)-1][5]     8.779 0.003640
d.o.f=1
H0 : No serial correlation

Weighted Ljung-Box Test on Standardized Squared Residuals
------------------------------------
                        statistic p-value
Lag[1]                      0.678  0.4103
Lag[2*(p+q)+(p+q)-1][5]     1.631  0.7077
Lag[4*(p+q)+(p+q)-1][9]     2.776  0.7953
d.o.f=2

Weighted ARCH LM Tests
------------------------------------
            Statistic Shape Scale P-Value
ARCH Lag[3]    0.3353 0.500 2.000  0.5625
ARCH Lag[5]    1.1947 1.440 1.667  0.6761
ARCH Lag[7]    1.8742 2.315 1.543  0.7439

Nyblom stability test
------------------------------------
Joint Statistic:  88.403
Individual Statistics:               
mu      0.09014
ar1     0.82669
omega  15.95110
alpha1  1.07076
beta1   0.85877
shape   0.58268

Asymptotic Critical Values (10% 5% 1%)
Joint Statistic:         1.49 1.68 2.12
Individual Statistic:    0.35 0.47 0.75

Sign Bias Test
------------------------------------
                   t-value    prob sig
Sign Bias            1.135 0.25622    
Negative Sign Bias   2.012 0.04429  **
Positive Sign Bias   1.035 0.30056    
Joint Effect         5.328 0.14930    


Adjusted Pearson Goodness-of-Fit Test:
------------------------------------
  group statistic p-value(g-1)
1    20     29.51      0.05844
2    30     47.46      0.01669
3    40     50.40      0.10435
4    50     68.76      0.03270


Elapsed time : 0.7203679 
volatilidad <- ts(ajustetgarch@fit$sigma, start =c(1987, 03), frequency = 360)
autoplot(volatilidad) + ylab("Volatilidad") + theme_bw() #Plot de volatilidad estimada

Este tipo de variaciones abre la puerta a un universo de modelos univariantes donde varía la distribución de probabilidad, el tipo de estimación, etc., pero donde solo se trabaja con la propia serie temporal. Algunos de estos modelos son el EGARCH, AGARCH, DTARCH, etc.

Modelos GARCH multivariantes

El modelo GARCH puede ampliarse para recoger el efecto que otras variables o series temporales puedan tener sobre la varianza de la perturbación aleatoria de la serie objetivo. En este caso, se tiene:

\[ Y_t = \beta_0 + \dots + e_t \]

\[ e_t \sim \mathcal{D}(0,V_t) \]

donde \(\mathcal{D}\) es una distribución de probabilidad cualquiera, habitualmente la normal o t de Student. Al modelizar la matriz de varianzas-covarianzas de la perturbación aleatoria del modelo de esta forma, es posible capturar la variación de la volatilidad entre las distintas series temporales.

Al igual que en el caso univariante, este marco abre la puerta a un universo de modelos para distintas formas de \(V_t\) . El más utilizado de ellos es el DCC-GARCH, que parte de la idea de descomponer la matriz de varianzas-covarianzas en:

\[ V_t = D_tR_tD_t \]

donde \(D_t\) es una matriz de desviaciones típicas, y \(R_t\) es una matriz de correlaciones, ambas de las perturbaciones aleatorias de las distintas series temporales.

data("EuStockMarkets")
stock1 <- diff(EuStockMarkets[,1])
stock2 <- diff(EuStockMarkets[,2])
stock3 <- diff(EuStockMarkets[,3])
stock4 <- diff(EuStockMarkets[,4])
stocks <- ts.union(stock1, stock2, stock3, stock4)
autoplot(stocks) + xlab("") + ylab("") + theme_bw()

library(rugarch, quietly=T)
library(rmgarch, quietly=T)
mgarch1 <- ugarchspec(mean.model=list(armaOrder=c(0,0), include.mean=F), 
                      variance.model = list(model="sGARCH",garchOrder=c(1,1)), 
           distribution.model="std") #Especificación
density1 <- density(stocks[,1]) #Densidad del primer stock
plot(density1$x, density1$y, type="l") #Plot de la densidad 1

density2 <- density(stocks[,2])
plot(density2$x, density2$y, type="l") 

density3 <- density(stocks[,3])
plot(density3$x, density3$y, type="l")

density4 <- density(stocks[,4])
plot(density4$x, density4$y, type="l") #Las series tienen colas pesadas, distribución t de student mejor que normal.

mgarch2 <- dccspec(uspec = multispec(replicate(4, mgarch1)),
dccOrder = c(1,1),distribution = "mvt") #DCC-GARCH especificación
mgarchestimado <- dccfit(mgarch2, data=stocks) #Fit del dcc
mgarchestimado

*---------------------------------*
*          DCC GARCH Fit          *
*---------------------------------*

Distribution         :  mvt
Model                :  DCC(1,1)
No. Parameters       :  25
[VAR GARCH DCC UncQ] : [0+16+3+6]
No. Series           :  4
No. Obs.             :  1859
Log-Likelihood       :  -32294.54
Av.Log-Likelihood    :  -17.37 

Optimal Parameters
-----------------------------------
                 Estimate  Std. Error  t value Pr(>|t|)
[stock1].omega   3.767383    2.553540   1.4754 0.140117
[stock1].alpha1  0.085510    0.018802   4.5478 0.000005
[stock1].beta1   0.913490    0.022265  41.0280 0.000000
[stock1].shape   6.144515    0.923601   6.6528 0.000000
[stock2].omega   7.916024    3.987486   1.9852 0.047120
[stock2].alpha1  0.109077    0.027248   4.0032 0.000063
[stock2].beta1   0.889923    0.029269  30.4050 0.000000
[stock2].shape   5.923411    0.889703   6.6577 0.000000
[stock3].omega   2.032128    1.232564   1.6487 0.099209
[stock3].alpha1  0.035330    0.003300  10.7047 0.000000
[stock3].beta1   0.963376    0.001255 767.3413 0.000000
[stock3].shape   8.371992    1.713368   4.8863 0.000001
[stock4].omega   2.147005    1.482623   1.4481 0.147586
[stock4].alpha1  0.036623    0.002966  12.3466 0.000000
[stock4].beta1   0.962377    0.001284 749.3365 0.000000
[stock4].shape   9.566493    2.024745   4.7248 0.000002
[Joint]dcca1     0.027964    0.004322   6.4696 0.000000
[Joint]dccb1     0.933977    0.012950  72.1212 0.000000
[Joint]mshape    7.890250    0.660005  11.9548 0.000000

Information Criteria
---------------------
                   
Akaike       34.771
Bayes        34.845
Shibata      34.771
Hannan-Quinn 34.798


Elapsed time : 3.457973 
mgarchcov <- (mgarchestimado@mfit$H[1:1,2:2,]) #Extraer correlaciones-covarianzas temporales
mgarchcov <- ts(mgarchcov, start=c(1991, 131), end = c(1998, 169), frequency=260)
autoplot(mgarchcov) + xlab("") + ylab("") + theme_bw()

prediccionmgarch <- dccforecast(mgarchestimado, n.ahead=20)
#Probar plot(prediccionmgarch)

Ejercicio: Cargue, analize y estime un modelo GARCH para la transformación que considere de la variable “tcm1y” del del conjunto de datos tcm del paquete tseries. Extraiga la volatilidad estimada de la serie.