Laboratorio 3

Cointegración y causalidad

UNIVERSIDAD DE EL SALVADOR

FACULTAD DE CIENCIAS ECONOMICAS

ESCUELA DE ECONOMIA

Materia: Métodos para el análisis económico

Docente: Carlos Ademir Pérez Alas

Grupo teórico: 3

Laboratorio 3: Cointegración y causalidad

Integrantes:

Apellidos Nombres DUE
Escolán Chávez Diana Alejandra EC19003
García Cabrera Bryan Alexander GC17011

Ciclo: II-2021

Fecha: Sábado 4 de diciembre, 2021

Ciudad Universitaria, San Salvador, El Salvador

1) Prueba de raíz unitaria de Dickey & Fuller

Propósito de la prueba

La prueba de Dickey & Fuller tiene como finalidad determinar si una serie de tiempo adolece de presentar raíz unitaria, y por tanto, es no estacionaria; esto implica que dicha serie presente ineficiencias al momento de realizar la regresión, puesto que se obtienen parámetros que presentan una equivocada relación entre las variables (para el caso, en la interpretación de los estadísticos puede concluirse que existe relación significativa entre las variables cuando en realidad no la hay, lo que se denomina relación espuria), además, los errores estándar de estimación son sesgados. Todo lo anterior llevará a su vez a un errado proceso de pronóstico.

Por tanto, resulta necesario previo a utilizar una serie de tiempo con fines de estimación y pronóstico, aplicarle el test de Dickey & Fuller (DF) para determinar si la serie en cuestión es estacionaria.

Hipótesis de la prueba

Antes de plantear las hipótesis de la prueba, cabe mencionar que sus autores parten del proceso estocástico de raíz unitaria:

\[\mathrm{Y}_\mathrm{t}=\rho\mathrm{Y}_\mathrm{t-1}+\mathrm{\varepsilon}_\mathrm{t},\ con\ -1\le\mathrm{\rho\le\ 1}\] Y al sustraer \({Y}_\mathrm{t-1}\) de ambos térmnos de la expresión, se tiene:

\[∆Y=\left(\rho-1\right)\mathrm{Y}_{\mathrm{t-1}}+\mathrm{\varepsilon}_\mathrm{t}\] Las hipótesis se plantean de la siguiente forma (Robinson and Mahadeva 2009):

\(H_0:\rho=1\), es decir, se presenta raíz unitaria, por lo que la serie de tiempo es no estacionaria, que se convierte en un modelo de caminata aleatoria sin deriva o Random Walk Pure.

\(H_1:\rho<1\), es decir, la serie de tiempo es estacionaria.

Sintaxis de implementación en R

Para llevar a cabo la prueba de raíz unitaria de DF, puede utilizarse la función adf.test() del paquete tseries (Trapletti and Hornik 2021). Si bien esta función es para la prueba de DF, aumentada, puede usarse la siguiente sintaxis para llevar a cabo la prueba en estudio:

\[adf.test(X,k)\] Donde:

  • x: objeto tipo serie de tiempo o vector numérico.
  • lags: este argumento es gran relevancia para aplicar la prueba DF, debe asignarse un valor de cero (0).

Estadístico de prueba

Ahora bien, no es posible utilizar el método clásico de regresión lineal simple puesto que sus estadísticos no son lo suficientemente robustos, por lo que el estadístico de prueba seguirá una distribución llamada Tau (\(\tau\)), que ha sido diseñada especialmente para el test. En la salida de la función adf.test() se presenta como Dickey-Fuller. Este estadístico toma en cuenta el tamaño de la muestra, el nivel de significancia y el tipo de prueba DF (1. Sin constante ni tendencia, 2. Constante sin tendencia, 3. Constante y tendencia) (V. 2021)

#Augmented Dickey-Fuller Test

#data:  base
#Dickey-Fuller = -1.6419, Lag order = 0, p-value = 0.7299
#alternative hypothesis: stationary

Criterio de decisión

Puede aplicarse tanto el método del valor crítico, como el método del p_value.

  • Por el método del valor crítico: Rechazar \(H_0\) si el estadístico de prueba es menor al valor crítico, (\(-\tau<-\tau_\alpha\))

  • Por el método del \(p\_value\): Rechazar \(H_0\) si el \(p\_value\) es menor o igual al nivel de significancia, (\(p\_value≤\alpha\))

Interpretación del rechazo, o no rechazo de la Hipótesis Nula de la prueba

Al aplicar el método del \(p\_value ≤ α\), considerando un \(α = 0.05\) se rechaza la hipótesis nula y se concluye que hay evidencia estadística suficiente para decir que la serie de tiempo es estacionaria.

En cambio, si \(p\_value > α\) se cuenta con evidencia estadística suficiente para no rechazar la hipótesis nula. Por tanto, la serie de tiempo posee raíz unitaria.

Implementación de un ejemplo

El siguiente ejemplo ha sido desarrollado tomando de base Prueba de Raiz Unitaria de Dickey Fuller en R (V. 2021).

Se determinará si la serie de tiempo del precio de cierre de la criptomoneda Bitcoin (desde el año 2018) adolece de raíz unitaria. Para la carga de datos, se utilizará la librería quantmod (Ryan and Ulrich 2020), segmentando posteriormente solo el precio de cierre, omitiendo los NA.

Carga de datos.

library(quantmod)
getSymbols("BTC-USD",quote="Close",from ="2018-01-01",periodicity = "daily")
## [1] "BTC-USD"
#Obteniendo la base de datos a utilizar en el test.
base<- na.omit(`BTC-USD`[,4])

Realizar el test

library(tseries)
adf.test(x = base, k = 0)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  base
## Dickey-Fuller = -1.994, Lag order = 0, p-value = 0.5809
## alternative hypothesis: stationary

Interpretando el resultado Puede observarse que el \(p\_value\) asociado al estadístico de prueba Tau es de 0.5776.

Regla de decisión Puesto que el \(p\_value>\alpha\) (0.5776>0.05), no se rechaza la hipótesis nula y se concluye que el precio de cierre del Bitcoin presenta raíz unitaria, dando así evidencia estadística de la presencia de este problema en variables de alta volatilidad.

2) Cointegración en el enfoque de Soren Johansen

Propósito de la prueba

El test de Soren Johansen permite evidenciar si dos o más series de tiempo se mueven en la misma tendencia a lo largo del tiempo, teniendo a su vez estabilidad en las diferencias entre ellas. Así pues, este conjunto de series de tiempo no estacionarias de orden I(1), estarán cointegradas si existe una combinación lineal de esas series que sea estacionaria (de orden I(0)). (Mata, n.d.)

Hipótesis de la prueba

Las hipótesis de esta prueba se presentan a continuación:

\(H_0:r=0\), es decir, no existe presencia de cointegración entre las variables en estudio.

\(H_1:r>0\), es decir, hay presencia de una relación de cointegración entre las variables.

Sintaxis de implementación en R

Para realizar esta prueba en R, se procede a utilizar la función ca.jo() que pertenece al paquete urca (urca?), cuya sintaxis se presenta a continuación:

\[ca.jo(X,type,ecdet,k)\] Donde:

  • x: Matriz de información a aplicar el test.
  • type: El tipo de prueba a realizar.
  • ecdet: Indica si la cointegración presentará o no intercepto, constante y tendencia.
  • k: Orden de rezagos de las variables.

Estadístico de prueba

Para este caso, Johansen presenta dos pruebas que pueden utilizarse (ambas basadas en el criterio de máxima verosimilitud), teniendo por tanto dos posibles estadísticos de prueba, los cuales explica (RPubs - Cointegración” n.d.):

  • El estadístico de prueba de la traza es efectuada en la secuencia \(r=n-1,...,1,0\) y verifica la \(H_0\) de que el rango de cointegración es \(r\) en contraste a la \(H_1\) de que dicho rango es \(n\).

Los estadísiticos correspondientes se presentan en la primera columna del resumen de la prueba:

####################### 
# Johansen-Procedure # 
###################### 

#Test type: trace statistic , with linear trend in cointegration 

#Values of teststatistic and critical values of test:

          #test 10pct  5pct  1pct
#r <= 2 |  7.24 10.49 12.25 16.26
#r <= 1 | 21.64 22.76 25.32 30.45
#r = 0  | 52.57 39.06 42.44 48.45

#Eigenvectors, normalised to first column:
#(These are the cointegration relations)
  • El estadístico de prueba del autovalor máximo se efectúa en la secuencia \(r=0,1,...,n-1\) y verifica la \(H_0\) de que el rango de cointegración es \(r\) en contraste a la \(H_1\) de que dicho rango es \(r+1\).

Los estadísiticos correspondientes se presentan en la primera columna del resumen de la prueba:

###################### 
# Johansen-Procedure # 
###################### 

#Test type: maximal eigenvalue statistic (lambda max) , without linear trend and constant in cointegration 

#Values of teststatistic and critical values of test:

         # test 10pct  5pct  1pct
#r <= 2 |  7.89  7.52  9.24 12.97
#r <= 1 | 21.64 13.75 15.67 20.20
#r = 0  | 87.77 19.77 22.00 26.81

#Eigenvectors, normalised to first column:
#(These are the cointegration relations)

Criterio de decisión

Aplicando el método del valor crítico, al rechazar \(H_0=0\), se procede nuevamente a hacer el contraste de hipótesis, ahora con \(H_0=1\), teniendo \(H_1=2\), y así sucesivamente se repite el proceso hasta que no se rechace \(H_0\).

Interpretación del rechazo, o no rechazo de la Hipótesis Nula de la prueba

Al rechazar \(H_0=0\), se tendrá que las series de tiempo analizadas presentan cointegración, el largo del vector de cointegración lo determinará el valor de que le correspondió a la última \(H_0\) no rechazada.

Implementación de un ejemplo.

El ejemplo que se muestra a continuación está tomado de (Eloriaga 2020), que de igual forma proporciona la data a utilizar en su sitio oficial.

Carga de datos.

library(urca)
library(forecast)
library(tidyverse)
library(readr)
datos <- read_csv("C:/Archivos R/MAE118/L3/VECM.csv")

Creando las variables en tipo serie de tiempo.

library(tseries)
GDP <- ts(datos$lnGDP, start = c(2003,1,31), frequency = 4)
CPI <- ts(datos$lnCPI, start = c(2003,1,31), frequency = 4)
M3 <- ts(datos$lnM3, start = c(2003,1,31), frequency = 4)

# Creando la data global que contenga las variables.
dataset <- cbind(GDP,CPI,M3)

Calculando el número óptimo de retardos.

library(vars)
retardos <- VARselect(dataset, lag.max = 7, type = "const")
retardos$selection
## AIC(n)  HQ(n)  SC(n) FPE(n) 
##      6      5      4      5

Según los resultados, el número óptimo de retardos para la prueba es de 4.

Aplicando el test.

Por la prueba de traza.

ctest1tr <- ca.jo(dataset, type = "trace", ecdet = "const", K = 4)
summary(ctest1tr)
## 
## ###################### 
## # Johansen-Procedure # 
## ###################### 
## 
## Test type: trace statistic , without linear trend and constant in cointegration 
## 
## Eigenvalues (lambda):
## [1]  7.408536e-01  2.831294e-01  1.143077e-01 -1.025883e-16
## 
## Values of teststatistic and critical values of test:
## 
##            test 10pct  5pct  1pct
## r <= 2 |   7.89  7.52  9.24 12.97
## r <= 1 |  29.53 17.85 19.96 24.60
## r = 0  | 117.30 32.00 34.91 41.07
## 
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
## 
##              GDP.l4    CPI.l4      M3.l4     constant
## GDP.l4    1.0000000  1.000000  1.0000000  1.000000000
## CPI.l4   -1.9652971 -3.401060 -2.3478809 -1.258575716
## M3.l4     0.1534219 -5.703423  0.1823729 -0.004795708
## constant -4.2100503 15.387818 -4.6126235 -9.216460807
## 
## Weights W:
## (This is the loading matrix)
## 
##             GDP.l4        CPI.l4       M3.l4      constant
## GDP.d  0.027782440 -4.455686e-05 -0.01509218  2.231752e-15
## CPI.d  0.001718154  5.843056e-04  0.01124142  1.957418e-14
## M3.d  -0.022303210  5.927883e-02 -0.28911043 -4.671628e-12

Interpretando el resultado Considerando un nivel de significancia del 5%, cuando r=0, el estadístico de prueba es mayor al valor crítico (117.3>34.91), lo que implica rechazar \(H_0\), por tanto, hay evidencia estadística de la presencia de cointegración entre las variables. Ahora, se procede a contrastar la \(H_0\) cuando \(r=1\), acá también el estadístico de prueba es superior al valor crítico, por lo que se procede a recharzar la \(H_0\), teniendo así que \(r>1\). Ya en el momento de \(r<2\), es el valor crítico el que supera al estadístico (VC 9.24 > 7.89), por lo que no se rechaza la $H_0.

En conclusión, por la prueba de la traza, las 3 variables analizadas (GDP, CPI, M3), presentan cointegración en una presencia máxima de 2 relaciones.

Por la prueba del autovalor máximo.

ctest1ei <- ca.jo(dataset, type = "eigen", ecdet = "const", K = 4)
summary(ctest1ei)
## 
## ###################### 
## # Johansen-Procedure # 
## ###################### 
## 
## Test type: maximal eigenvalue statistic (lambda max) , without linear trend and constant in cointegration 
## 
## Eigenvalues (lambda):
## [1]  7.408536e-01  2.831294e-01  1.143077e-01 -1.025883e-16
## 
## Values of teststatistic and critical values of test:
## 
##           test 10pct  5pct  1pct
## r <= 2 |  7.89  7.52  9.24 12.97
## r <= 1 | 21.64 13.75 15.67 20.20
## r = 0  | 87.77 19.77 22.00 26.81
## 
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
## 
##              GDP.l4    CPI.l4      M3.l4     constant
## GDP.l4    1.0000000  1.000000  1.0000000  1.000000000
## CPI.l4   -1.9652971 -3.401060 -2.3478809 -1.258575716
## M3.l4     0.1534219 -5.703423  0.1823729 -0.004795708
## constant -4.2100503 15.387818 -4.6126235 -9.216460807
## 
## Weights W:
## (This is the loading matrix)
## 
##             GDP.l4        CPI.l4       M3.l4      constant
## GDP.d  0.027782440 -4.455686e-05 -0.01509218  2.231752e-15
## CPI.d  0.001718154  5.843056e-04  0.01124142  1.957418e-14
## M3.d  -0.022303210  5.927883e-02 -0.28911043 -4.671628e-12

Interpretando el resultado Teniendo un nivel de significancia del 5%, cuando r=0, el estadístico de prueba es mayor al valor crítico (87.77>22), lo que implica rechazar \(H_0\), por tanto, hay evidencia estadística de la presencia de cointegración entre las variables. Ahora, se procede a contrastar la \(H_0\) cuando \(r=1\), acá también el estadístico de prueba es superior al valor crítico, por lo que se procede a recharzar la \(H_0\), teniendo así que \(r>1\). Ya en el momento de \(r<2\), es el valor crítico el que supera al estadístico (VC 9.24>7.89), por lo que no se rechaza la \(H_0\).

En conclusión, por la prueba del autovalor máximo, también las 3 variables analizadas (GDP, CPI, M3), presentan cointegración en una presencia máxima de 2 relaciones.

Puede observarse que ambas pruebas arrojaron resultados similares.

3) Causalidad en el sentido de Granger

Propósito de la prueba

La prueba de causalidad de Granger es una prueba de hipótesis estadística para determinar si una serie de tiempo es un factor y ofrece información útil para pronosticar otra serie de tiempo. (Li 2020)

En otras palabras, la prueba de causalidad de Granger se usa para examinar si una serie de tiempo puede usarse para pronosticar otra.

Hipótesis de la prueba

Esta prueba utiliza las siguientes hipótesis nulas y alternativas:

\(H_0\): La serie de tiempo x no Granger-causa la serie de tiempo y.

\(H_1\): La serie de tiempo x Granger-causa la serie de tiempo y.

El término “Granger-causa” significa que conocer el valor de la serie de tiempo x en un cierto retraso es útil para predecir el valor de la serie de tiempo y en un período de tiempo posterior. (Zach 2021)

Sintaxis de implementación en R

Para realizar una prueba de causalidad de Granger en R, se puede usar la función grangertest () del paquete lmtest (Zeileis and Hothorn 2002), que usa la siguiente sintaxis:

\[grangertest (x, y, order = 1)\]

Donde:

  • x: la primera serie temporal
  • y: la segunda serie temporal
  • order: el número de retrasos que se utilizarán en la primera serie de tiempo. El valor predeterminado es 1.

Estadístico de prueba

Esta prueba produce un estadístico de prueba F con un p-value correspondiente.

Haciendo referencia a la salida generada en R:

# Granger causality test

# Model 1: egg ~ Lags(egg, 1:3) + Lags(chicken, 1:3)
# Model 2: egg ~ Lags(egg, 1:3)
#  Res.Df Df      F Pr(>F)
# 1     44                 
# 2     47 -3 5.405 0.002966

El valor del estadístico F es 5.405, al que corresponde un p-value de 0.002966.

Criterio de decisión

A continuación se muestra el criterio de decisión sobre el recha o no rechazo de la hipótesis nula:

\(p\_value ≤ α\) rechazar \(H_0\)

\(p\_value > α\) No rechazar \(H_0\)

Haciendo referencia a la salida generada en R:

# Granger causality test

# Model 1: chicken ~ Lags(chicken, 1:3) + Lags(egg, 1:3)
# Model 2: chicken ~ Lags(chicken, 1:3)
#  Res.Df Df     F   Pr(>F)   
# 1     44                     
# 2     47 -3 5.405 0.002966 **

Para un nivel de significacia de 95% se tiene un p-value que corresponde a 0.002966 ≤ 0.05. Por tanto se rechaza la hipótesis nula.

Interpretación del rechazo, o no rechazo de la Hipótesis Nula de la prueba

Si \(p\_value ≤ α\), por ejemplo \(α = 0.05\) entonces es posible rechazar la hipótesis nula y concluir que hay evidencia suficiente para decir que la serie de tiempo x Granger-causa la serie de tiempo y.

Por otra parte, si \(p\_value > α\) se puede decir que hay evidencia suficiente para no rechazar la hipótesis nula. Por tanto, la serie de tiempo x NO Granger-causa la serie de tiempo y.

Implementación de un ejemplo

El siguiente ejemplo se toma de: How to Perform a Granger-Causality Test in R (Zach 2021).

Para este ejemplo, se usará el conjunto de datos ChickEgg que viene precargado en el paquete lmtest. Este conjunto de datos contiene valores para la cantidad de huevos fabricados junto con la cantidad de pollos en los EE. UU. Desde 1930 hasta 1983:

Carga de datos

library(lmtest)
data(ChickEgg) #Cargando la base 
head(ChickEgg)
## Time Series:
## Start = 1930 
## End = 1935 
## Frequency = 1 
##      chicken  egg
## 1930  468491 3581
## 1931  449743 3532
## 1932  436815 3327
## 1933  444523 3255
## 1934  433937 3156
## 1935  389958 3081

Realizar el test

A continuación, se procede a utilizar la función grangertest () para realizar una prueba de causalidad de Granger para ver si el número de huevos fabricados es predictivo del número futuro de pollos. Se ejecutará la prueba usando tres lags o retrasos:

grangertest(chicken ~ egg, order = 3, data = ChickEgg)
## Granger causality test
## 
## Model 1: chicken ~ Lags(chicken, 1:3) + Lags(egg, 1:3)
## Model 2: chicken ~ Lags(chicken, 1:3)
##   Res.Df Df     F   Pr(>F)   
## 1     44                     
## 2     47 -3 5.405 0.002966 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretando el resultado

  • Modelo 1: Este modelo intenta predecir el número de pollos utilizando el número de pollos en los tres años anteriores y el número de huevos en los tres años anteriores como variables predictoras.
  • Modelo 2: Este modelo intenta predecir el número de pollos utilizando solo el número de pollos en los tres años anteriores como variables predictoras.
  • F: Esta es la estadística de prueba F. Resulta ser 5.405.
  • Pr (> F): este es el valor p que corresponde al estadístico de prueba F. Resulta ser 0.002966.

Regla de decisión

Dado que el p-value es menor que 0.05, se rechaza la hipótesis nula de la prueba y se concluiye que conocer el número de huevos es útil para predecir el número futuro de pollos.

Bibliografía

Eloriaga, Justin. 2020. “Long Run Linkages: A Briefer on the Johansen Cointegration Methodology.” Medium. https://towardsdatascience.com/long-run-linkages-a-briefer-on-the-johansen-cointegration-methodology-6744ee253012.
Li, Susan. 2020. “A Quick Introduction on Granger Causality Testing for Time Series Analysis.” Medium. Towards Data Science. https://towardsdatascience.com/a-quick-introduction-on-granger-causality-testing-for-time-series-analysis-7113dc9420d2.
Mata, H. L. n.d. “Nociones Elementales de Cointegración. Enfoque de Soren Johansen.” http://webdelprofesor.ula.ve/economia/hmata/Notas/Johansen.pdf.
Robinson, Mahadeva, and L Mahadeva. 2009. “Prueba de Raı́z Unitaria Para Ayudar a La Construccion de Un Modelo-Ensayo 76.” Centro de Estudios Monetarios Latinoamericanos-Asociacion Regional de Bancos Centrales: Https://Www. Cemla. Org/PDF/Ensayos/Pub-En-76. Pdf.
RPubs - Cointegración.” n.d. Accessed December 4, 2021. https://rpubs.com/wilsonsr/828582.
Ryan, Jeffrey A., and Joshua M. Ulrich. 2020. Quantmod: Quantitative Financial Modelling Framework. https://CRAN.R-project.org/package=quantmod.
Trapletti, Adrian, and Kurt Hornik. 2021. Tseries: Time Series Analysis and Computational Finance. https://CRAN.R-project.org/package=tseries.
V., Rico. 2021. “Prueba de Raiz Unitaria de Dickey Fuller En R.” Finanzas Cuantitativas En Español. https://ricovictor.com/index.php/2021/06/08/prueba-de-raiz-unitaria-de-dickey-fuller-en-r/.
Zach. 2021. “How to Perform a Granger-Causality Test in r.” Statology. https://www.statology.org/granger-causality-test-in-r/.
Zeileis, Achim, and Torsten Hothorn. 2002. “Diagnostic Checking in Regression Relationships.” R News 2 (3): 7–10. https://CRAN.R-project.org/doc/Rnews/.