A 33 Cointegracion y Casualidad
</
1 Prueba de Raiz unitaria de Dickey-Fuller
La prueba de Dickey-Fuller y su versión extendida conocido como Dickey-Fuller Aumentada (ADF), es utilizada con el propósito de determinar si una serie temporal presenta una raíz unitaria, lo que implicaría que está no es estacionaria.(Chung 2024)
Una serie estacionaria tiende a mostrar “shocks persistentes, varianza creciente y una estructura de autocorrección que no decae rápidamente” (Montero 2013)
Con ella podemos distinguir:
Una serie que sigue un camino aleatorio. Una serie que se estaciona alrededor de una media o una tendencia.
Existen tres versiones de la prueba Dickey-Fuller. Estas versiones nacen cuando se agregan o no componentes deterministas al modelo.
Modelo A: Con constante y tendencia
\(\Delta y_t = \delta_0 + \delta_1 t + \alpha y_{t-1} + \sum_{i=1}^k \gamma_i \Delta y_{t-i} + \varepsilon_t\)
Aquí la constante representa un crecimiento de crecimiento que es continuo, por ejemplo podría ser un crecimiento inherente a una variable. Se usa cuando una serie muestra una tendencia clara.(Catalán Año)
Modelo B: Solo con constante
\(\Delta y_t = \delta_0 + \alpha y_{t-1} + \sum_{i=1}^k \gamma_i \Delta y_{t-i} + \varepsilon_t\)
captura un componente de deriva, pero no tiene una tendencia temporal lineal; además no hay tendencia explícita. Se debe usar cuando la serie se mueve alrededor de una media no cero pero sin tendencia clara. (Catalán Año)
Modelo C: Sin constante ni tendencia
\(\Delta y_t = \alpha y_{t-1} + \sum_{i=1}^k \gamma_i \Delta y_{t-i} + \varepsilon_t\)
Está asume que no tiene componente deterministicos, enfocándose en el comportamiento de la raíz unitaria. Se usa cuando hay razones para creer que la sería debería fluctuar alrededor de cero.(Catalán Año)
1.1 Hipotesis de la prueba
hipotesis nula \((H_0)\): la serie tiene una raiz unitaria, es decir, no es
\(H_0: \alpha = 0 \quad \Rightarrow \quad \phi = 1\)
Hipótesis alternativa \((H_1):\) la serie no tiene raíz unitaria, es decir, es estacionaria.
\(H_1: \alpha < 0 \quad \Rightarrow \quad \phi < 1\) (Catalán Año) ## Implementacion en R
# Usando el paquete urca
library(urca)
adf_test <- ur.df(y, type = "drift", lags = 4, selectlags = "AIC")
# Usando el paquete tseries
library(tseries)
adf_test <- adf.test(y, k = 4)Argumentos principales:
Y = serie de tiempo a analizar.
type = Tipo de prueba (“none”, “drift”, “trend”).
lags = número de rezagos a incluir.
selectlags: Criterio para selección automática de rezagos (“AIC”, “BIC”).
Selección de rezagos: normalmente probar incluyendo con 4-7 retardos es suficiente” o usar la fórmula de Phillips-Perron: \(p = 4 \cdot (N/100)^{2/9}\) que “arroja una cifra entre 3 y 6 cuando N oscila entre 30 y 1000 observaciones” (Montero, 2013, p. 56).(Montero 2013)
1.2 Estadistico de prueba
Este estadistico de prueba es una version modificada del estadistico T normal:
\(\hat{t}_{\alpha} = \frac{\hat{\alpha}}{SE(\hat{\alpha})}\)
con ella R generaria 3 estadisticos princiaples en la salida.
\(Tau2:\) Para el modelo con deriva y tendencia.
\(Tau1:\) Para el modelo con deriva.
\(Tau3:\) Para el modelo sin deriva ni tendencia. (Catalán Año)
1.3 Criterio de decision
El criterio de decisión se basa en comparar el estadístico calculado con los valores críticos de Dickey-Fuller:
1- Si el estadístico es menor que el valor crítico al nivel de sifnificancia elegido, se rechaza \(H_0.\)
2- Si el estadístico es mayor que el valor crítico al nivel de sifnificancia elegido, se acepta \(H_0.\)
Los valores críticos típicos son -3.43 (1%)-2.86 (5%), y -2.57 (10%) para el modelo con deriva. Como advierte Montero (2013), es fundamental incluir la tendencia en la especificación de la prueba para corregir posibles efectos de tendencia temporal
1.4 Interpretacion
Si se rechaza la Hipótesis nula \((H_0)\) se concluye que la serie temporal es estacionaria \(I(0)\); significando que la serie no tiene una raiz unitaria.
Sino se rechaza la hipótesis nula \((H_0)\), se concluye que la serie temporal es no estacionaria \(I(1)\), poseee una raiz unitaria.
1.5 Implementacion de un ejemplo, generado utilizando la libreria tseries
# CARGAR LIBRERÍA
library(tseries)
# 1. GENERAR SERIE ALEATORIA NO ESTACIONARIA (Random Walk)
set.seed(123) # Para reproducibilidad
serie_no_estacionaria <- cumsum(rnorm(100)) # Random walk
# 2. APLICAR PRUEBA ADF
resultado_adf <- adf.test(serie_no_estacionaria)
# 3. VER RESULTADO COMPLETO
print(resultado_adf)##
## Augmented Dickey-Fuller Test
##
## data: serie_no_estacionaria
## Dickey-Fuller = -1.8871, Lag order = 4, p-value = 0.6234
## alternative hypothesis: stationary
Con este ejemplo de prueba podemos ver la realizacion de la prueba para determinar si la serie de tiempo es etacionaria o no estacionaria.
Interpretación: Se obtiene un estadístico de prueba de r resultado_adf[[“statistic”]][[“Dickey-Fuller”]] y un p-value de r resultado_adf[[“p.value”]], tomando en cuenta el criterio de decisión de No rechazar \(H_0\) si \(p-value>0.05\) o Rechazar \(H_0\) si \(p−value<0.05\) , por lo que hay evidencia de No Rechazar la hipótesis nula, llegando a la conclusión que la serie no es estacionaria. (Durlauf and Blume 2010)
2 Cointegracion en el enfoque de Soren Johansen.
Este enfoque es un marco multivariante basado en el modelo de corrección de errores vectorial (VECM) para determinar el número de relaciones de cointegracion en un sistema de N variables.
La prueba se utiliza para poder determinar el rango de cointegracion de un vector de series temporales que no son estacionarias ($_t).
Este busca válidar relaciones a largo plazo, si un conjunto de variables no estacionarias relacionadas mediante un modelado de mínimos cuadrados ordinarios, su cointegracion es imprescindible para evitar la regresión espuria.
Está busca relacionar cointegrar vectores linealmente independientes, y con el enfoque específico se permite probar la existencia de múltiples relaciones de cointegracion (es decir, \(r > 1\) hasta \(r = n -1\))(Catalán Año)
2.1 Hipotesis de prueba
Establece las hipótesis basadas en el rango de cointegracion.
El rango de cointegracion es el número de vectores linealmente independientes \(\mathbf{\alpha}\) tales que \(\mathbf{\alpha'X_t}\) da un proceso estacionario \(I(0)\). Johansen propone dos estadísticas de razón para la evaluación del rango.(Durlauf and Blume 2010)
2.1.1 Prueba del eigenvalue
Hipótesis Nula (\(\mathbf{H_0}\)): \[\mathbf{H_0: \text{El rango de cointegración es } r_0}\] \[\mathbf{H_0: r = r_0}\]
Hipótesis Alternativa (\(\mathbf{H_1}\)): \[\mathbf{H_1: \text{El rango de cointegración es } r_0 + 1}\] \[\mathbf{H_1: r = r_0 + 1}\]
Está prueba evalúa en secuencia la hipótesis nula de \(r\) vectores de cointegracion contra la alternativa de \(r+1\) vectores de cointegracion.
2.1.2 Prueba de la traza
Hipótesis Nula (\(\mathbf{H_0}\)): \[\mathbf{H_0: \text{El rango de cointegración es } r_0}\] \[\mathbf{H_0: r = r_0}\]
- Hipótesis Alternativa (\(\mathbf{H_1}\)): \[\mathbf{H_1: \text{El rango de cointegración es } n}\] \[\mathbf{H_1: r = n}\]
Está prueba evalúa la Hipótesis nula de \(r\) vectores de cointegracion contra la alternativa de que el sistema tiene el rango máximo posible, diciendo que todas las series son de hecho estacionarias. (Wilson 2024) ## Sintaxis de la implementacion en R
La prueba se puede implementar usando el paquete urca o vars.
Los argumentos usados son:
• data: Este vector o dataframe de series temporales • type: Determinar el tipo de estadístico de la prueba a calcular. - “eigen”: Usa la prueba de eigenvalue - “trace”: Implementa la prueba de trace. • “none”: no incluye términos deterministas • “const”: incluye una constante en el modelo de corrección de errores • “trend”: incluye una tendencia lineal en el VECM. • K: el número de rezagos a incluir en el modelo. (Wilson 2024) ## Estadistico de prueba
Ambas pruebas se basa. En la razón máxima de verosimilitud de la matriz de coeficientes.
Ambas pruebas se basan en la razón de máxima verosimilitud de la matriz de coeficientes de largo plazo (Estadístico del Eigenvalor Máximo (\(\mathbf{LR_{max}}\)) \[\ell_{r+1}^{*}-\ell_{r}^{*}=-\frac{T}{2} \ln \left(1-\widehat{\lambda}_{r+1}\right)\]
Donde \(T\) es el número de observaciones y \(\widehat{\lambda}_{r+1}\) es el \((r+1)\)-ésimo eigenvalor más gEstadístico de la Traza (\(\mathbf{LR_{trace}}\)):trace}}$):** \[\ell_{A}^{*}-\ell_{0}^{*}=-\frac{T}{2}\sum_{i=r+1}^{n}\log\left(1-\widehat{\lambda}_{i}\right)\] Esta prueba suma los eigenvalores de \(r+1\) hasta \(n\).
Referencia en la Salida de R: El output de summary(ca.jo(…)) reporta estos estadísticos. En el ejemplo, para la prueba de Traza, la salida de R muestra la estadística calculada para cada valor de r.
2.2 Criterio de decision
Criterio de decisión: El criterio compara el estadístico de prueba calculando los valores críticos no esyandar proporcionados por Johansen ya que está distribución no es chi-cuadrado. Se rechaza la hipótesis nula si el estadístico de prueba calculando es mayor que el valor crítico tabulado para el nivel de significancia seleccionado. (1%, 5%, o 10%). Además las prueba se realizan de manera secuencial, significa que se empieza con r = 0, se continúa rechazando la hipótesis nula hasta Hasta en dónde se encuentre el primero valor de R para el cual la hipótesis nula no sea rechazada.
2.3 Interpretacion del rechazo, o no rechazado de las hipotesis
- Rechazo de hipótesis nula \(H_0: r = 0\) se concluye que las series están cointegradas, significa que lss series comparten tendencias estocasticas y hay yna relación de equilibrio en el largo plazo entre ellas.
No se rechaza la hipótesis nula \(H_0: r = 0\), concluimos que las series no están integradas, no hay relación de equilibrio en el largo plazo.
2.4 Implementacion de un ejemplo
# EJEMPLO PRÁCTICO SIGUIENDO EL DOCUMENTO (p. 13-15)
# Cargar datos (similar al ejemplo de denmark p. 13)
library(urca)
library(vars)
data(Canada) # Usamos datos disponibles en R
canada_data <- Canada[, c("e", "prod", "rw", "U")]
# Paso 1: Determinar número de rezagos (como en p. 14-15)
VARselect(canada_data, lag.max = 8)## $selection
## AIC(n) HQ(n) SC(n) FPE(n)
## 3 2 1 3
##
## $criteria
## 1 2 3 4 5
## AIC(n) -6.005397982 -6.493055228 -6.590460263 -6.405675934 -6.162458245
## HQ(n) -5.760273303 -6.051830805 -5.953136097 -5.572252025 -5.132934593
## SC(n) -5.392047103 -5.389023645 -4.995747977 -4.320282945 -3.586384553
## FPE(n) 0.002467286 0.001520693 0.001392193 0.001703788 0.002235091
## 6 7 8
## AIC(n) -6.063112372 -5.814371694 -5.796841456
## HQ(n) -4.837488976 -4.392648555 -4.179018573
## SC(n) -2.996357977 -2.256936595 -1.748725654
## FPE(n) 0.002576015 0.003511359 0.003887711
# Paso 2: Aplicar prueba de Johansen (como en p. 13, 15)
johansen_result <- ca.jo(canada_data,
type = "eigen",
ecdet = "const",
K = 2,
spec = "longrun")
# Mostrar resultados
summary(johansen_result)##
## ######################
## # Johansen-Procedure #
## ######################
##
## Test type: maximal eigenvalue statistic (lambda max) , without linear trend and constant in cointegration
##
## Eigenvalues (lambda):
## [1] 5.392277e-01 2.620181e-01 1.203181e-01 8.047422e-02 -7.175623e-15
##
## Values of teststatistic and critical values of test:
##
## test 10pct 5pct 1pct
## r <= 3 | 6.88 7.52 9.24 12.97
## r <= 2 | 10.51 13.75 15.67 20.20
## r <= 1 | 24.91 19.77 22.00 26.81
## r = 0 | 63.54 25.56 28.14 33.24
##
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
##
## e.l2 prod.l2 rw.l2 U.l2 constant
## e.l2 1.00000000 1.0000000 1.0000000 1.000000 1.000000e+00
## prod.l2 0.08536852 0.1562742 -0.3437156 6.602765 -6.333346e-03
## rw.l2 -0.14261822 -0.3710885 -0.3400819 -1.421147 -3.245414e-01
## U.l2 4.28476956 2.5747683 1.5615389 6.749140 1.554657e+00
## constant -967.81674009 -867.7073735 -669.1040065 -3074.812429 -8.128022e+02
##
## Weights W:
## (This is the loading matrix)
##
## e.l2 prod.l2 rw.l2 U.l2 constant
## e.d -0.005972228 0.16850796 -0.02649704 0.004648136 4.647741e-12
## prod.d 0.004658649 0.24424906 -0.02589597 -0.010518631 -4.258322e-13
## rw.d -0.106070442 0.03698073 0.17173200 -0.003626215 3.247885e-13
## U.d -0.021905078 -0.10841723 -0.03757852 -0.003044769 -4.108058e-12
2.4.1 Analisis secuencial
- Prueba para r = 0:
· Estadístico: 63.54 · Valor crítico 5%: 28.14 · Decisión: 63.54 > 28.14 → Rechazar H₀ · Existe al menos 1 vector de cointegración
- Prueba para r ≤ 1:
· Estadístico: 24.91 · Valor crítico 5%: 22.00 · Decisión: 24.91 > 22.00 → Rechazar H₀ · Existe al menos 2 vectores de cointegración
- Prueba para r ≤ 2:
· Estadístico: 10.51 · Valor crítico 5%: 15.67 · Decisión: 10.51 < 15.67 → No rechazar H₀ · Existen exactamente 2 vectores de cointegración
- Prueba para r ≤ 3:
· Estadístico: 6.88 · Valor crítico 5%: 9.24 · Decisión: 6.88 < 9.24 → No rechazar H₀ · Confirma que existen máximo 2 vectores
Rango de cointegración: r = 2
Esto significa que existen 2 relaciones de equilibrio a largo plazo independientes entre las variables analizadas. Como señala el documento, cuando “rango de cointegración es 2” (p. 12), tenemos múltiples combinaciones lineales estacionarias.
equilibrio.
3 Causalidad en el sentido de Granger.
Cuando se habla de casualidad, se menciona el análisis de series de tiempo para saber si alguna de estas es útil para poder pronosticar a las otra u otra. (R-bloggers 2021)
En esta se emplea para examinar una si la información sobre una serie temporal (\(X\)) puede utilizar se y mejorar la predicción en los valores futuros de otra serie temporal (\(Y\)). La causalidad en el sentido de Granger existe si se conocer el valor de una serie en un rezago dado, mejora significativamente el valor de una serie \(Y\) en un periodo posterior.(R-bloggers 2021)
3.1 Hipotesis de prueba
La prueba se establece así:
• Hipótesis nula
(\(\mathbf{H_0}\)): \[\mathbf{H_0:\text{La serie de tiempo} X\text{ en el sentido de Granger}}\] En ella los valores pasados de \(X\) no tienen poder predictivo para los futuros valores de \(Y\) una vez que se han considerado los valores pasados de \(Y\).
• Hipótesis alternativa (\(\mathbf{H_1}\)): \[\mathbf{H_1:\text{ la serie de tiempo} X \text{ causa a la serie de tiempo} Y\text { en del sentido de Granger}}\]
Sugiere que incorporar información de los valores rezagados de \(X\) ayuda significativamente a pronosticar los valores futuro de \(Y\) . (R-bloggers 2021)
3.2 Sintaxis de Implementacion en R
Para realizar la prueba de causalidad de Granger en R, podemos usar la función grangertest( ) del paquete lmtest. (R-bloggers 2021)
\[\mathbf{\text{grangertest}(Y\sim X,\text{order =}K)}\]
Dónde
• Y ~ X: Aquí, dónde Y es la variable de la serie de tiempo que se busca pronosticar, y X es la serie con la cuál se busca predecir mostrando si es causalidad de Granger. • order: Sirve para especificar la cantidad de rezagos a utilizar en la serie predictora. Por defecto es 1.
3.3 Estadistico de prueba
Al realizar la prueba se generaría un valor de estadístico F, junto a su correspondiente valor \(P\). El estadístico \(F\) se calcula comparando dos modelos: 1 irrestricto dónde hay rezagos de X y Y, también un modelo 2 restringido que solo tendrá los rezagos de Y.
En la salida de R, el estadístico \(F\) se identifica directamente. (R-bloggers 2021)
3.4 Criterio de Decision.
Este se basa en el valor \(p\).
Si el valor \(p\) (\(\text{Por}(>F)\)) es menor que el nivel de significancia se debe rechazar la hipótesis nula. Significa que los anteriores valores de \(X\) proporcionan datos estadísticamente significativos para pronosticar valores futuros de \(Y\).
Si el valor \(p \geq\alpha\)) no se rechaza la hipótesis nula, por lo tanto No hay evidencia estadística suficiente para decir que X tiene poder predictivo sobre Y, más allá de lo que \(Y\) puede predecirse a si misma.(R-bloggers 2021)
3.5 Implementacion de un ejemplo en R
Utilizamos un dataframe cargado en lmtest.
Primero veremos en dónde la variable respuesta es DAX y la predictora SMI.
library(lmtest)
library (dplyr)
TsData <- EuStockMarkets[, 1:2]
test <- grangertest (DAX ~ SMI, order = 3, data = TsData) %>% print()## Granger causality test
##
## Model 1: DAX ~ Lags(DAX, 1:3) + Lags(SMI, 1:3)
## Model 2: DAX ~ Lags(DAX, 1:3)
## Res.Df Df F Pr(>F)
## 1 1850
## 2 1853 -3 8.4968 1.322e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
En esta prueba el valor critico 1.3215155^{-5} > 0.05 por lo tanto podemos rechazar la hipótesis nula, demoatrando que existe causalidas. Ya que los valores de DAX también pueden predecir los valores de SMI en el futuro.
Segundo veremos en donde la variable respuesta es SMI y la predictora DAX
library(lmtest)
library(dplyr)
test_2 <- grangertest(SMI ~ DAX, order = 3, data = TsData)%>% print ()## Granger causality test
##
## Model 1: SMI ~ Lags(SMI, 1:3) + Lags(DAX, 1:3)
## Model 2: SMI ~ Lags(SMI, 1:3)
## Res.Df Df F Pr(>F)
## 1 1850
## 2 1853 -3 2.6576 0.04689 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
En esta prueba 1.3215155^{-5}, es mucho menor que 0.05, por lo tanto podemos rechazar la hipótesis nula, demostrando que los valores de SMI también predicen los valores de DAX en el futuro.
Con este ejemplo podemos concluir que al ser predictoras la una de la otra, existe una causalidad bidireccional, tanto SMI predice a DAX, cómo DAX predice a SMI.