8 mar 2019

Modelos GARCH multivariados en R

1.      DCC (igual especificación de la varianza)


En las siguientes instrucciones se simulant dos series (x,y), solo para mostrar el uso del paquete rmgarch, combinado con rugarch y parallel, para la estimación del modelo Dynamic Conditional Correlation (DCC).

# ------------------------------- *
# Activa paquetes
library(rmgarch)
library(rugarch)
library(parallel)

# Simula las series
x<-rnorm(1000,1,3)*c(1:1000)+c(1:1000)
y<-rnorm(1000,1,3)*c(1:1000)


data1<-as.matrix(cbind(x,y))
plot(x, type="l")


En las siguientes líneas, se introduce la estructura del modelo a estimar, se verifica un modelo gjrGARCH con distribución t, para cada una de las series consideradas.

# ------------------------------- *
l <- 2 #número de variables
gjrtspec <- ugarchspec(
         mean.model=list(armaOrder=c(0,0)),
   variance.model =list(model = "gjrGARCH"),
          distribution="std")

dcc_spec = dccspec(
              uspec = multispec(replicate(l, gjrtspec)),
              distribution = "mvt")

# Fit DCC
garchdccfit = dccfit(dcc_spec,
data1, fit.control=list(scale=TRUE))

Luego de estimar el modelo, podemos acceder a la lista de resultados y obtener los parámetros asociados a los modelos de volatilidad inivariados, información sobre la especificación estimada y los criterios de información.

*---------------------------------*
*          DCC GARCH Fit          *
*---------------------------------*
Optimal Parameters
-----------------------------------
                Estimate  Std. Error     t value Pr(>|t|)
[x].mu         88.018073  4.0934e-01  2.1503e+02 0.000000
[x].ar1         0.031399  4.3700e-04  7.1876e+01 0.000000
[x].omega       0.004366  2.1990e-03  1.9852e+00 0.047120
[x].alpha1      0.054871  1.9430e-03  2.8239e+01 0.000000
[x].beta1       0.945898  0.0000e+00  5.7637e+06 0.000000
[x].gamma1     -0.088033  1.3151e-01 -6.6939e-01 0.503249
[x].delta       0.091525  1.5678e-02  5.8378e+00 0.000000
[y].mu         81.424172  2.1262e+01  3.8295e+00 0.000128
[y].ar1         0.060300  3.7522e-02  1.6071e+00 0.108038
[y].ar2         0.021913  3.8664e-02  5.6675e-01 0.570888
[y].omega    1571.508757  1.0843e+03  1.4494e+00 0.147235
[y].alpha1      0.141311  2.5299e-02  5.5857e+00 0.000000
[y].beta1       0.870438  2.0259e-02  4.2965e+01 0.000000
[y].gamma1     -0.025498  3.5864e-02 -7.1094e-01 0.477120
[Joint]dcca1    0.002363  9.5070e-03  2.4860e-01 0.803672
[Joint]dccb1    0.956960  1.9858e-01  4.8191e+00 0.000001
  
A continuación se muestra como recuperar la serie condicional de matrices de varianzas covarianzas.

# ------------------------------- *
# Matriz Var-Cov
dcccov<-rcov(garchdccfit)

# Matrix de Corr
dcccor<-rcor(garchdccfit)


Ahora, en el siguiente bloque de instrucciones, se utiliza un blucle e indexación numérica de Arrays, para recuperar la serie de volatilidad condicional, guardada en Sigma.

rcov(garchdccfit)[,,1]
x y
x 484311.21 13967.32
y 13967.32 3262974.28

En este aspectos, como obtenemos T matrices, cada una de las cuales guarda el valor modelado de los momentos para el día correspondiente, [1,1,] corresponde a la varianza del primer a la varianza de la primera serie; por lo que, mediante indexación de arrays podemos acceder a los componentes de las matrices de varianzas covarinzas y de correlaciones que hemos guardado anteriormente.

plot(dcccov[1,1,], type="l")

Una alternativa a la anterior, es utilizar un bucle un contador i, que recorra las T observaciones, correspondiente a la dimensión de las variables en cuestión. Accediendo a la posición de la matriz que resulte de interés.

# ------------------------------- *
# Recuperar, serie temporal a partir de la estructura array
vol1<-c()
T<-1000

for (i in 1:T){
  vol1<-c(vol1, dcccov[1,1,i])
}

plot(vol1, type="l")


2.      DCC (diferentes especificaciones de la varianza)

En el ejemplo anterior se consideraba que ambas series seguían el mismo proceso de varianzas, cuestión que puede ser cuestionable en muchos procedimientos empíricos, por lo que, en el próximo ejemplo, se muestra cómo se pueden realizar especificaciones de varianzas distintas para cada una de las n-variables consideradas.

uspec1 <- ugarchspec(  
             mean.model = list(armaOrder = c(1,0)),
        variance.model = list(model = "apARCH"),
   distribution.model = "norm")

uspec2 = ugarchspec(
            mean.model = list(armaOrder = c(2,0)),
       variance.model = list(model = "gjrGARCH"),
  distribution.model = "norm")

uspec = c(uspec1, uspec2)
   
 spec = dccspec(uspec  = multispec( uspec ),
                     dccOrder = c(1,1),
                 distribution = "mvlaplace")

garchdccfit = dccfit(spec, d ata1,  fit.control=list(scale=TRUE))

garchdccfit

3.      MGARCH-BEKK

El paquete mgarchBEKK permite la estimación del modelo mGARCH-BEKK, para las matrices C, A y B respectivamente. Por tanto, como B recoge el efecto hoy de la matriz sigma en el periodo anterior, los coeficientes fuera de su diagonal principal brindan una aproximación de la interacción entre las volatilidades del mercado. Los estadísticos de prueba de significación se pueden obtener utilizando los errores asintóticos, guardados en:

# ------------------------------- *
library(mgarchBEKK)
estimated <- BEKK(data1)

estimated$est.params
$`1`
[,1] [,2]
[1,] 3.663613 -8.176183
[2,] 0.000000 24.878929

$`2`
[,1] [,2]
[1,] 0.1539364 0.09550136
[2,] -0.1657275 0.09612336

$`3`
[,1] [,2]
[1,] -0.1222077 0.9859749
[2,] 0.9703889 0.1276075

#Errores de los coeficientes
estimated$asy.se.coef


Los momentos condicionales de la relación entre las variables (estimated$cor), así como las series de volatilidad condicional (estimated$sd), se pueden recuperar:

# ------------------------------- *
estimated$cor[[1]][[2]]
estimated$sd[[1]]

estimated$uncond.cov.matrix

estimated$aic
estimated$order


4.      gjrBEKK GARCH

El paquete mgarchBEKK también permite la estimación del modelo BEKK asimétrico, que incluye una variables binarias (1 cuando el residuo es negativo) que interactúan con el residuo correspondiente de forma tal que permiten considerar un efecto diferenciado del retorno asociado, dependiendo del signo del mismo. En el caso de los coeficientes (estimated1$est.params), verifique que aparece una nueva matriz, que corresponde a la matriz cuadradada asociada a los diferenciales de pendiente.  

# ------------------------------- *
estimated1 <- mGJR(x,y)


# Parámetros y errores asintóticos
estimated1$est.params
$`1`
[,1] [,2]
[1,] 2.335441 -2.395821
[2,] 0.000000 30.064757

$`2`
[,1] [,2]
[1,] 0.1503465 -0.01745010
[2,] -0.1305680 -0.03214134

$`3`
[,1] [,2]
[1,] 1.0032073 0.1680627
[2,] -0.2073904 0.9359224

$`4`
[,1] [,2]
[1,] 0.1016553 0.2527250
[2,] 0.1800089 -0.1394926

$`5`
[1] -0.3211898

estimated1$asy.se.coef


Las correlaciones y las varianzas, tantos condicionales como incondicionales, se pueden obtener a partir de la siguiente representación:

# ------------------------------- *
estimated1$cor
estimated1$sd1
estimated1$sd2
estimated1$uncond.cov.matrix
estimated1$resid1


Referencias

·        Ghalanos, Alexios (2019). Multivariate GARCH Models. Package ‘rmgarch’. Repository CRAN. Date/Publication 2019-01-15 05:40:03 UTC. https://cran.r-project.org/web/packages/rmgarch/rmgarch.pdf.  

·        Ghalanos, Alexios (2019). The rmgarch models: background and properties. (version 1.3.0). https://cran.r-project.org/web/packages/rmgarch/vignettes/The_rmgarch_models.pdf.

·        Orskaug, Elisabeth (2009). Multivariate DCC-GARCH Model -With Various Error Distributions. Norwegian University Of Science and Technology. Department of Mathematical Sciences.

·        Schmidbauer, Harald; Roesch, Angi; and Tunalioglu, Vehbi (2016). Simulating, Estimating and Diagnosing MGARCH (BEKK and mGJR) Processes. Package ‘mgarchBEKK’. Date/Publication 2016-04-10 00:49:46. https://cran.r-roject.org/web/packages/mgarchBEKK/mgarchBEKK.pdf

Creando variables por grupos en dplyr (group_by + mutate)

  Simulemos una base de hogares, donde se identifica el hogar, el sexo (1 mujer) y provincia y edad para cada miembro.   # Definir la lista ...