El concepto de cointegración puso de moda la teoría estadística sobre los efectos de las raíces unitarias en los procesos estocásticos (colección o familia de variables aleatorias {Xt, con t ∈ T}, ordenadas según el subíndice t que en general se suele identificar con el tiempo) desarrollada por Dickey – Fuller, al ligar la existencia de la relación de cointegración entre series no estacionarias, a la ausencia de raíces unitarias en los términos de error de las respectivas regresiones (Obando, 2003).
De aquí es que surge el problema de las regresiones espurias, las cuales muestran tendencias entre series no estacionarias, aunque no existan relaciones directas entre las variables. Se entiende como regresiones espurias a aquel tipo de regresiones que no mantienen entre sí una relación causal, además de relacionar una variable con otra en la estimación de modelos econométricos temporales, lo cual incrementa enormemente la bondad de ajuste y reduce drásticamente el valor del estadístico Durbin – Watson.
Dickey & Fuller (1979) desarrollaron contrastes de raíces unitarias en el contexto de modelos univariantes de series temporales para analizar la estacionariedad de los procesos estocásticos.
El planteamiento es el siguiente:
(1.1)
\[X_t= pX_{(t-1)}+ u_t\]Donde \(p\) es el parámetro autorregresivo y la \(u_t\) están distribuidas de manera idéntica e independiente, con media igual a cero y varianzas iguales (es un ruido blanco).
Si \(p\) es menor que 1 la variable \(X_t\) estará autocorrelacionada, pero será estacionaria, mientras que, si es igual a uno, o mayor que la unidad, será no estacionaria y su varianza crecerá de forma explosiva.
El test DF, o test de Dickey & Fuller, es un contraste de la hipótesis \(H_0: p = 1\) frente a la alternativa \(H_1: p < 1\), en un proceso AR(1) (modelo autorregresivo), y para realizarlo se utiliza la relación (1.2) obtenida al aplicar primeras diferencias en (1.1):
(1.2)
\[∆X_t = λX_{(t-1)}+ u_t\]Donde \(∆X_t = X_t- X_{(t-1)}\), \(λ=(p-1)\) y el parámetro \(λ\) tomará valores en el intervalo comprendido entre 2 y cero: \(-2 < 0\), si el valor absoluto del parámetro a1 es menor que la unidad: \(-1 < p < 1\).
El test Dickey & Fuller consiste en contrastar la hipótesis nula \(Ho : λ=0\) (raíz unitaria y no estacionariedad) frente a la hipótesis alternativa \(H1 : λ<0\) (raíz no unitaria, p menor que 1 y aceptación de la estacionariedad).
El test consiste en calcular el estadístico \(t\):
\[t = (λ - 0 ) /S_{d1}\]Obtenido al tipificar el estimador \(λ\), restándole el valor esperado bajo \(H_0\) y dividiendo por su desviación típica.
En el paquete de tseries se puede encontrar el codigo adf.test que realiza la prueba de Dickey–Fuller. Calcula la prueba de Dickey-Fuller para el valor nulo de que \(x\) tiene una raíz unitaria.
Sintaxis:
adf.test(x, alternative = c(“stationary,” “explosive”), k = trunc((length(x)-1)^(1/3)))
Argumentos:
Se utiliza la ecuación de regresión general que incorpora una constante y una tendencia lineal y se calcula el estadístico t(t-statistic) para un coeficiente autorregresivo de primer orden igual a uno. El número de rezagos utilizado en la regresión es \(k\). El valor predeterminado de trunc((length(x)-1)^(1/3)) corresponde al límite superior sugerido en la tasa a la que el número de rezagos, \(k\), debe hacerse crecer con el tamaño de muestra para la configuración general ARMA \((p,q)\). Tenga en cuenta que para \(k = 0\) se calcula la prueba estándar de Dickey-Fuller. No se permiten valores faltantes.
ValoresUna lista con la clase “htest” que contiene los siguientes componentes:
La estadística de la prueba proporciona una forma de evaluar la hipótesis nula. Las estadísticas de prueba que son menores o iguales al valor crítico proporcionan evidencia contra la hipótesis nula.
El estadístico de prueba es el estadístico \(t\) sobre la variable dependiente rezagada. Si \(p > 1\) el coeficiente de la variable dependiente rezagada será positivo. Si \(p\) es igual a la unidad, \((p―1)\) será igual a cero. En ambos casos \(X_t\) será no estacionaria.
##
## Augmented Dickey-Fuller Test
##
## data: datos
## Dickey-Fuller = -1.6846, Lag order = 2, p-value = 0.6925
## alternative hypothesis: stationary
Puede aplicarse tanto el método del valor crítico, como el método del \(p-value\).
Rechazar \(H_0\) si el \(p-value\) es menor o igual al nivel de significancia, \((p-value ≤ α)\)
##
## Augmented Dickey-Fuller Test
##
## data: datos
## Dickey-Fuller = -1.6846, Lag order = 2, p-value = 0.6925
## alternative hypothesis: stationary
El estadístico de prueba y el \(p-value\) resultan ser iguales a \(-1.6846\) y \(0.6925\) respectivamente. Dado que el \(p-value\) es igual o mayor que \(0.05\), no podemos rechazar la hipótesis nula. Implica que la serie temporal no es estacionaria.
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.
Se determinará si la serie de tiempo del precio de cierre de las acciones de Amazon.com (desde el año 2018) presenta estacionariedad o no. Para la carga de datos, se utilizará la librería quantmod, segmentando posteriormente solo el precio de cierre, omitiendo los NA.
library(quantmod)
library(tseries)
getSymbols("AMZN", quote="Close",from ="2018-01-01",periodicity = "daily")
## [1] "AMZN"
<- na.omit(`AMZN`[,4])
baseplot(base, type='l')
adf.test(x = base, k = 0)
##
## Augmented Dickey-Fuller Test
##
## data: base
## Dickey-Fuller = -0.92006, Lag order = 0, p-value = 0.9509
## alternative hypothesis: stationary
Interpretando el resultado Puede observarse que el \(p-value\) asociado al estadístico de prueba Tau es de \(0.9288\).
Regla de decisión: Puesto que el \(p-value > α\) \((0.9288 > 0.05)\), no se rechaza la hipótesis nula y se concluye que el precio de cierre de las acciones de Amazon.com presentan raíz unitaria, dando así evidencia estadística de la presencia de este problema en variables de alta volatilidad.
La prueba de Soren Johansen es una herramienta para examinar y evaluar si las variables económicas tienen tendencias comunes,la cual se ha convertido en un método muy popular para probar la existencia de cointegración en la variables I(1) y I(0), en donde I(1) y I(0) indican integración de primer y cero orden, respectivamente.
En la tecnología de S. Johansen, es necesario analizar las series previamente con el fin de conocer si presentan o no raíces unitarias. Las series que presenten raíces unitarias se colocan en un vector autorregresivo a partir del cual se puede probar la existencia de una o mas combinaciones lineales J(U) o vectores de cointegración, como también se les denomina.
Se plantea la Hipótesis nula (\(H_0\)) como NONE (Ninguna)
\(H_0\): \(r=0\) no existen vectores de cointegración entre las variables
\(H_1\): \(r=1\) existe un vector de cointegración entre las variables
Para realizar esta prueba en R se procede a efectuar los siguientes pasos:
ca.jo(X,type,ecdet,k,spec,season,dumvar)
Donde:
Para este caso, Johansen presenta dos pruebas que pueden utilizarse (ambas se basan en el criterio de máxima verosimilitud), teniendo por lo cual dos posibles estadísticos de prueba, los cuales explica (“RPubs - Cointegración” n.d.):
\[l_A-l_0=-\frac{T}2{\sum_{i=r+1}^nlog(1-\lambda)}\]
\[l_{r+1}-l_r=\frac{T}2{ln(1-\lambda_{r+1})}\]
Rechace \(H_0\) cuando el valor del estadístico la traza al maximo valor propio sea mayor al valor crítico seleccionado, normalmente, el de \(5\%\).
No se rechaza \(H_0\) cuando el valor estadístico la traza o el maximo valor propio sea menos al valor crítico seleccionado.
Si se rechaza la hipótesis nula, siendo \(H_0=0\) significa que existe 1 o más vectores de cointegración, en caso contrario , si no se rechaza esta hipótesis nula se concluye que no hay cointegración entre ningún vector.
Se presentará el ejemplo propuesto por Luis Quintana Romero y Miguel Angel Mendoza en el libro “Econometría aplicada utilizando R” (2016) para realizar las dos pruebas de cointegración de Johansen.
library(urca)
library(car)
# Se carga la base de datos
load("Consumo.RData")
# Se asigna la variable de serie de tiempo al objeto PIB_MEX y aplican primeras diferencias
<-log(Consumo$pib_mex)
lpib_mex<-log(Consumo$cp_mex)
lcp_mex
# Para aplicar el procedimiento de Johansen, primero se combinan las variables en un solo objeto
<-cbind (lcp_mex,lpib_mex)
ecb.consumo
# En primer lugar se aplica la prueba de la traza de cointegración sin tendencia y constante
# Prueba Johasen de cointegracion de la traza
summary(ca.jo(ecb.consumo, type="trace",ecdet="none",spec=c("longrun"), K=4))
##
## ######################
## # Johansen-Procedure #
## ######################
##
## Test type: trace statistic , with linear trend
##
## Eigenvalues (lambda):
## [1] 0.1751774 0.0169835
##
## Values of teststatistic and critical values of test:
##
## test 10pct 5pct 1pct
## r <= 1 | 1.47 6.50 8.18 11.65
## r = 0 | 18.04 15.66 17.95 23.52
##
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
##
## lcp_mex.l4 lpib_mex.l4
## lcp_mex.l4 1.000000 1.000000
## lpib_mex.l4 -1.280708 -1.037871
##
## Weights W:
## (This is the loading matrix)
##
## lcp_mex.l4 lpib_mex.l4
## lcp_mex.d -0.3578910 -0.08189816
## lpib_mex.d -0.1079621 -0.07962291
library(urca)
summary(ca.jo(ecb.consumo,type ="trace",ecdet="const",spec=c("longrun"),K=4))
##
## ######################
## # Johansen-Procedure #
## ######################
##
## Test type: trace statistic , without linear trend and constant in cointegration
##
## Eigenvalues (lambda):
## [1] 2.017097e-01 1.265562e-01 5.440093e-15
##
## Values of teststatistic and critical values of test:
##
## test 10pct 5pct 1pct
## r <= 1 | 11.64 7.52 9.24 12.97
## r = 0 | 31.01 17.85 19.96 24.60
##
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
##
## lcp_mex.l4 lpib_mex.l4 constant
## lcp_mex.l4 1.000000 1.000000 1.000000
## lpib_mex.l4 -1.255645 -1.414691 -1.064081
## constant 4.557479 7.198639 1.483342
##
## Weights W:
## (This is the loading matrix)
##
## lcp_mex.l4 lpib_mex.l4 constant
## lcp_mex.d -0.4955292 0.05574003 -1.774483e-11
## lpib_mex.d -0.2795953 0.09201028 -6.438725e-12
En la primera hipótesis se acepta la hipótesis alternativa de cointegración el estadístico es mayor al valor critico del \(10\%\), \(31.01 > 17.85\).
En la segunda hipótesis se pueden identificar los vectores de cointegración \((1, -1.25, 4.55)\) y \((1 ,-1.41, 7.19)\).
library(urca)
summary(ca.jo(ecb.consumo,type ="trace",ecdet="trend",spec=c("longrun"),K=4))
##
## ######################
## # Johansen-Procedure #
## ######################
##
## Test type: trace statistic , with linear trend in cointegration
##
## Eigenvalues (lambda):
## [1] 3.007210e-01 6.711864e-02 3.632077e-18
##
## Values of teststatistic and critical values of test:
##
## test 10pct 5pct 1pct
## r <= 1 | 5.98 10.49 12.25 16.26
## r = 0 | 36.74 22.76 25.32 30.45
##
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
##
## lcp_mex.l4 lpib_mex.l4 trend.l4
## lcp_mex.l4 1.000000000 1.000000000 1.000000000
## lpib_mex.l4 -2.613552539 -0.740358526 -1.944486294
## trend.l4 0.008212396 -0.002968024 0.007611815
##
## Weights W:
## (This is the loading matrix)
##
## lcp_mex.l4 lpib_mex.l4 trend.l4
## lcp_mex.d -0.10989875 -0.3329111 -2.471382e-12
## lpib_mex.d 0.03206499 -0.2557477 -4.370999e-13
Al igual que en el caso de la opción sin tendencia y constante, no se rechaza la hipótesis de cointegración con solo vector. El vector de cointegración es \((1 -2.61 0.008)\).
Un problema común en economía es determinar si los cambios en una variable son una causa de los cambios en otra.Un proceso para resolver problemas de este tipo es la prueba para causalidad introducida por Granger y Sims.
La idea básica es muy simple: si \(x\) causa \(y\), entonces los cambios en \(x\) deben preceder a los cambios en \(y\). En particular, para decir que “\(x\) causa \(y\)”, deben cumplirse dos condiciones. Primera, \(x\) debe ayudar a predecir \(y\); es decir, en una regresión de \(y\) contra valores pasados de \(y\), la adición de valores pasados de \(x\) como variables independientes deberá contribuir de manera significativa al poder explicativo de la regresión. Segunda, \(y\) no debe ayudar a predecir a \(x\). La razón es que si \(x\) ayuda a predecir \(y\) y \(y\) ayuda a predecir \(x\), es probable que una o más variables distintas, de hecho, estén “causando” los cambios observados tanto en \(x\) como en \(y\). (Daniel L. Rubinfeld, n.d.)
La hipótesis nula y alternativa son las siguientes:
\(H_0\): \(β2\),\(1=β2\),\(2=β2\),\(3=0\)
La serie de tiempo x no Granger causa la serie de tiempo \(y\)
\(H_a\): \(β2\),\(1\),\(β2\),\(2\),\(β2\),\(3≠0\)
La serie de tiempo \(x\) Granger causa la serie de tiempo \(y\)
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:
Pasos a seguir para la implementacion de la prueba de casualidad de Granger en R.
Paso 1: Carga de datos. Primero se hace la respectiva carga de datos.
Paso 2: Comprobación si las series de datos son estacionarias.
Para probar si son estacionarias se pueden usar dos pruebas fundamentales:
Para ello se puede hacer uso del paquete GAUSS para probar las raices unitarias, el cual contiene la libreia tsplib. Cargando esta librería y haciendo uso del comando adf kpss se obtendrán los resultados de la prueba.
Si los datos cumplen con el requisito de ser estacionarios se procede a realizar la prueba de Granger; si los datos no cumplen con este requisito habrá que transformar los datos utilizados.
Se hará uso de la función grangertest() parq examinar si los valores siguen una causalidad de Granger, siguiendo el orden de las variables: \(X\), \(Y\).
Esta prueba arrojará el valor del \(p-value\) que corresponde al estadístico de prueba f , y con este valor se decide si rechazar o no la hipótesis nula.
Esto se hace porque es posible que se este produciendo una causalidad inversa. Se hace siguiendo el mismo procedimiento sólo que poniendo las variables estudiadas en diferente orden: \(Y\), \(X\).
Las variables \(x\) y \(y\) deben ser estacionarias.
Entonces, para probar que \(x\) causa Granger \(y\) , se debe examinar si los valores rezagados de \(x\) en la regresión de \(y\) sobre los valores rezagados de \(x\) e \(y\), reduce significativamente el error de varianza. Se dice que una serie temporal \(x\) es causa Granger de \(y\) si se puede demostrar que esos valores \(x\) proporcionan información estadísticamente significativa sobre los valores futuros de \(y\) a través de una serie de pruebas \(t\) y pruebas \(F\) sobre valores rezagados de \(x\). Dichas pruebas nos brindan un valor \(p\) correspondiente. Si el valor \(p\) es menor que un cierto nivel de significancia (es decir, \(p\) menor o igual a \(0.05\)), entonces podemos rechazar la hipótesis nula y concluir que tenemos evidencia suficiente para decir que la serie temporal \(x\) Granger causa la serie temporal \(y\). (Daniel L. Rubinfeld, n.d.)
Estadístico F La prueba generalmente se realiza en la prueba wald o F.
\[F=\frac{\frac{({\rm\ SSR}_R-{\rm\ SSR}_{UR})}{(p_2-p_1)}}{\frac{{\rm\ SSSR}_{UR}}{(n-p_2-1)}}\]
Críterio de decisión sobre el rechazo o no rechazo de la hipótesis nula:
Rechazar \(H_0\)
No rechazar \(H_0\)
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\).
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:
library(lmtest)
# Carga de datos
data(ChickEgg) # Cargando la base
head(ChickEgg)
## chicken egg
## [1,] 468491 3581
## [2,] 449743 3532
## [3,] 436815 3327
## [4,] 444523 3255
## [5,] 433937 3156
## [6,] 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:
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 concluye que conocer el número de huevos es útil para predecir el número futuro de pollos.
Prueba de casualidad de Granger a la inversa:
Aunque rechazamos la hipótesis nula de la prueba, en realidad es posible que haya un caso de causalidad inversa. Es decir, es posible que el número de pollos esté haciendo que el número de huevos cambie.
Para descartar esta posibilidad, necesitamos realizar la prueba de Causalidad de Granger a la inversa, utilizando pollos como variable predictora y huevos como variable de respuesta:
grangertest(egg ~ chicken, order = 3, data = ChickEgg)
## 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 0.5916 0.6238
Regla de decisión:
Como \(0.6238 > 0.05\), No se rechaza la \(H_0\), por lo que podemos decir que el número de pollos no es predictivo del número futuro de huevos. Por lo tanto, podemos concluir que conocer el número de huevos es útil para predecir el número futuro de pollos.