A31 Cointegración y Causalidad
1. Prueba de Raíz Unitaria de Dickey & Fuller.
1.1 Propósito de la prueba, ¿Para qué se usa?
Se usa en econometría para:
- Comprobar la validez de los modelos econométricos.
- Determinar si las relaciones entre las variables son genuinas o espurias.
- Modelar la relación entre variables cointegradas mediante un Modelo de Corrección de Errores (MCE).
1.2 Hipótesis de la prueba.
Hipótesis Nula (𝐻0):\[H_0: \alpha=0 \implies \phi=1 \implies \rho=1\]
Hipótesis Alternativa (𝐻𝑎):\[H_1: \alpha \neq 0 \implies \phi \neq 1 \implies \rho \neq 1\]
\[H_1: \alpha < 0 \implies \phi < 1 \implies \rho < 1\]
1.3 Sintaxis de implementación en R.
Con libreria urca
\[ \texttt ur.df(x, type = c("none", "drift", "trend"), lags = 1, selectlags = "Fixed") \]
Donde:
● ur.df: es el argumento utilizado para realizar la prueba Dickey-Fuller.
● x: es la serie de tiempo a la que se le aplicará la prueba.
● type: especifica el modelo a utilizar. Las opciones son:
- “none”: sin intercepto ni tendencia.
- “drift”: con intercepto.
- “trend”: con intercepto y tendencia.
● lags: especifica el número de rezagos a incluir en la prueba.
● Selectlags: especifica el método para seleccionar el número de rezagos:
- “Fixed”: Utilice un número fijo de rezagos especificado por lags.
- “AIC”: Utilice el criterio de información de Akaike (AIC) para seleccionar el número de rezagos.
- “BIC”: Utilice el criterio de información bayesiano (BIC) para seleccionar el número de rezagos.
Con libreria tseries
library(tseries)
# Crear una serie temporal de ejemplo
set.seed(123)
serie <- arima.sim(model = list(ar = 0.7), n = 100)
# Aplicar la prueba de Dickey-Fuller
resultado <- adf.test(serie)
# Ver los resultados
print(resultado)##
## Augmented Dickey-Fuller Test
##
## data: serie
## Dickey-Fuller = -2.9558, Lag order = 4, p-value = 0.1807
## alternative hypothesis: stationary
\[ \texttt adf.test(x, alternative = "stationary", k = trunc((length(x)-1)^(1/3))) \]
Donde:
- x: Vector numérico que representa la serie temporal que deseas analizar.
- alternative: Hipótesis alternativa de la prueba. Puede ser:
“stationary” (predeterminada): Hipótesis alternativa que indica que la serie es estacionaria.
explosive”: Hipótesis alternativa que indica que la serie es explosiva.
- k: Número de rezagos incluidos en la prueba. El valor predeterminado es trunc((length(x)-1)^(1/3))
1.4 Estadístico de prueba.
\[\Delta y_t = \alpha y_{t-1} + \epsilon_t\] El estadístico \(t\) se define como: \[t = \frac{\hat{\alpha}}{\text{SE}(\hat{\alpha})}\]
donde \(\text{SE}(\hat{\alpha})\) es el error estándar de la estimación de \(\alpha\)
1.5 Criterio de decisión.
No rechazar H0 si p−value>0.05
Rechazar H0 si p−value<0.05
1.6 Interpretación del rechazo, o no rechazo de la Hipótesis Nula de la prueba.
Si el valor p es menor que el nivel de significancia α, se rechaza \(H_0\). Esto significa que la serie de tiempo es estacionaria. Si el valor p es mayor que α, no se rechaza \(H_0\). Esto significa que la serie de tiempo no es estacionaria.1.7 Implementación de un ejemplo.
library(tseries)
# Crear una serie no estacionaria
set.seed(123)
serie_no_estacionaria <- cumsum(rnorm(100))
# Prueba Dickey-Fuller
adf_resultado <- adf.test(serie_no_estacionaria)
# Mostrar resultados
print(adf_resultado)##
## Augmented Dickey-Fuller Test
##
## data: serie_no_estacionaria
## Dickey-Fuller = -1.8871, Lag order = 4, p-value = 0.6234
## alternative hypothesis: stationary
Interpretación:
La prueba Dickey-Fuller Aumentada (ADF) se realizó para evaluar si la serie de tiempo es estacionaria o no. Los resultados obtenidos son los siguientes:
- La hipótesis nula (\(H_0\)) de la prueba establece que la serie contiene una raíz unitaria, lo que implica que no es estacionaria.
- La hipótesis alternativa (\(H_1\)) propone que la serie es estacionaria.
- Dado que el valor \(p = 0.6234\) es considerablemente mayor que el nivel de significancia comúnmente utilizado (\(\alpha = 0.05\)), no se rechaza la hipótesis nula.
Con base en estos resultados, no hay suficiente evidencia para concluir que la serie es estacionaria. Esto sugiere que la serie probablemente contiene una raíz unitaria y, por lo tanto, no es estacionaria.
2. Cointegración en el enfoque de Soren Johansen.
2.1 Propósito de la prueba, es decir ¿Para qué se usa?
Esta prueba sirve para:
- Detectar la presencia de cointegración.
- Determinar el número de vectores de cointegración.
- Estimar los vectores de cointegración.
2.2 Hipótesis de la prueba
Hipótesis nula:
\[ H_0 = r = 0, 1, \ldots, n-1 \]
No existe cointegración
Hipótesis alterna:
\[ H_A = r = m + 1 \]
Existe cointegración
2.3 Sintaxis de Implementación en R
\[ \texttt ca.jo(sjd, ecdet = "const,", type = "eigen,", K = 2, spec = "longrun,", season = 4) \]
donde:
sjd: representa la combinación de las variables en un único objeto.
type: indica el método que se aplicará.
2.4 Estadístico de prueba
\[ l^*_{r+1} - l^*_r = -T2 \ln(1 - \lambda^{r+1}) \]
2.5 Criterio de decisión
Para determinar el número de relaciones de cointegración, se utiliza el siguiente enfoque:
En la salida de R, el comando del paquete genera tablas con los valores observados de los estadísticos () y sus valores críticos () para cada hipótesis \(H_0: r = k\), donde \(k\) es el número de relaciones de cointegración.
La decisión final se basa en el nivel de significancia seleccionado y en los resultados de estas comparaciones.
2.6 Interpretación del rechazo, o no rechazo de la Hipótesis Nula de la prueba.
Si el valor observado del estadístico de prueba (ya sea \(\lambda_{\text{trace}}\) o \(\lambda_{\text{max}}\)) excede el valor crítico correspondiente a un nivel de significancia dado (por ejemplo, 5%), se rechaza la hipótesis nula. Esto implica que:
Si el valor observado del estadístico es menor o igual al valor crítico, no se rechaza la hipótesis nula. Esto implica que:
La salida generada por el comando de la función incluye los valores observados de \(\lambda_{\text{trace}}\) y \(\lambda_{\text{max}}\), así como los valores críticos para varios niveles de significancia (e.g., 1%, 5%, 10%). Basándote en estas comparaciones, se toma una decisión para cada hipótesis nula:
\[ H_0: r = k \quad \text{(número de relaciones de cointegración es \(k\))}. \]
2.7 Implementación de Ejemplo
# Cargar librería
library(urca)
# Crear datos simulados
set.seed(123)
n <- 100
Y1 <- cumsum(rnorm(n)) # Proceso aleatorio acumulativo
Y2 <- 0.5 * Y1 + rnorm(n) # Relación cointegrada con ruido
# Combinar las variables
data <- cbind(Y1, Y2)
# Realizar la prueba de cointegración
ca_result <- ca.jo(data, ecdet = "const", type = "eigen", K = 2)
# Resumen de los resultados
summary(ca_result)##
## ######################
## # Johansen-Procedure #
## ######################
##
## Test type: maximal eigenvalue statistic (lambda max) , without linear trend and constant in cointegration
##
## Eigenvalues (lambda):
## [1] 4.045959e-01 2.751562e-02 1.759442e-19
##
## Values of teststatistic and critical values of test:
##
## test 10pct 5pct 1pct
## r <= 1 | 2.73 7.52 9.24 12.97
## r = 0 | 50.81 13.75 15.67 20.20
##
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
##
## Y1.l2 Y2.l2 constant
## Y1.l2 1.000000 1.00000000 1.00000000
## Y2.l2 -2.071821 -0.03565006 -0.24245865
## constant -0.143079 -4.21041101 0.06197902
##
## Weights W:
## (This is the loading matrix)
##
## Y1.l2 Y2.l2 constant
## Y1.d -0.06452877 -0.05310978 2.014102e-17
## Y2.d 0.56593797 -0.03034488 -4.849394e-17
Interpretación:
Para \(H_0: r = 0\), el estadístico \(15.76\) es mayor que el valor crítico al 5% (\(15.67\)), por lo que rechazamos \(H_0\).
Para \(H_0: r = 1\), el estadístico \(4.98\) es menor que el valor crítico al 5% (\(9.24\)), por lo que no rechazamos \(H_0\).
Existe exactamente una relación de cointegración entre \(Y_1\) y \(Y_2\).
3. Causalidad en el sentido de Granger
3.1. Propósito de la prueba, ¿Para qué se usa?
3.2. Hipotesis de la prueba
\[H_a : \exists \, \beta_i \neq 0, \, i \in \{1, 2, \dots, p\}\]
3.3. Sintaxis de implementación en R
# Instalar y cargar paquetes necesarios
library(lmtest)
# Crear datos de ejemplo
set.seed(123)
x <- rnorm(100) # Serie temporal 1 (variable independiente)
y <- rnorm(100) # Serie temporal 2 (variable dependiente)
# Implementar la prueba de Granger con 2 rezagos
resultado <- grangertest(y ~ x, order = 2)
# Mostrar resultados
print(resultado)## Granger causality test
##
## Model 1: y ~ Lags(y, 1:2) + Lags(x, 1:2)
## Model 2: y ~ Lags(y, 1:2)
## Res.Df Df F Pr(>F)
## 1 93
## 2 95 -2 3.6809 0.02894 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Argumentos principales:
- formula: Describe la relación entre la variable dependiente y la independiente.
Especifica la relación entre las variables dependiente (𝑌𝑡) e independiente (𝑋𝑡).
El formato y ~ x indica que queremos evaluar si 𝑋𝑡 causa en el sentido de Granger 𝑌𝑡.
- order: Número de rezagos a incluir en el modelo.
Especifica el número de rezagos (𝑝) a considerar en la prueba.
Es importante seleccionar 𝑝con base en criterios como el AIC, BIC o conocimiento previo de las series temporales.
- data: contiene las series temporales organizadas en un marco de datos.
El argumento order es crucial, ya que especifica el número de rezagos a considerar para evaluar la relación causal.
3.4. Estadístico de prueba
La prueba genera un estadístico 𝐹, que compara dos modelos:
Modelo restringido: Solo incluye los rezagos de 𝑡Y .
Modelo completo: Incluye los rezagos de 𝑌𝑡 y 𝑋𝑡.
El estadístico 𝐹se calcula como:
\[F = \frac{(SSR_r - SSR_{ul}) / p}{SSR_{ul} / (n - k)}\]
Donde:
𝑆𝑆𝑅𝑟: Suma de cuadrados residuales del modelo restringido.
𝑆𝑆𝑅𝑢: Suma de cuadrados residuales del modelo completo.
𝑝: Número de restricciones (coeficientes asociados a los rezagos de 𝑋𝑡).
𝑛−𝑘: Grados de libertad residuales del modelo completo.
En R, la salida de la función grangertest incluye el estadístico 𝐹 y el p-valor.
3.5. Criterio de decisión
Regla: Si el p-valor es menor al nivel de significancia (𝛼=0.05), se rechaza 𝐻0 . Si el p-valor es mayor o igual a 𝛼, no se rechaza 𝐻0.
Interpretación del resultado:
Si 𝐻0 se rechaza, 𝑋𝑡contiene información predictiva sobre 𝑌𝑡.
Si 𝐻0 no se rechaza, no hay evidencia suficiente para afirmar que 𝑋𝑡 afecta a 𝑌𝑡.
3.6. Interpretación del rechazo o no rechazo de 𝐻0
- Rechazo de 𝐻0: Los rezagos de 𝑋𝑡aportan información predictiva única sobre 𝑌𝑡 .
Implicación: 𝑋𝑡 puede ser útil como predictor en modelos económicos o financieros.
- No rechazo de 𝐻0:No hay evidencia estadística suficiente para concluir que 𝑋𝑡causa en el sentido de Granger a 𝑌𝑡.
Implicación: Es posible que 𝑋𝑡 no tenga relevancia predictiva para 𝑌𝑡, o que el número de rezagos no sea adecuado
3.7. Implementación de un ejemplo
Se implementa un ejemplo práctico usando datos simulados:
# Crear series temporales simuladas
set.seed(42)
x <- arima.sim(list(order = c(1, 0, 0), ar = 0.6), n = 100)
y <- arima.sim(list(order = c(1, 0, 0), ar = 0.8), n = 100)
# Organizar datos en un marco
data <- data.frame(y, x)
# Implementar prueba de Granger
resultado <- grangertest(y ~ x, order = 2, data = data)
# Mostrar resultados
print(resultado)## Granger causality test
##
## Model 1: y ~ Lags(y, 1:2) + Lags(x, 1:2)
## Model 2: y ~ Lags(y, 1:2)
## Res.Df Df F Pr(>F)
## 1 93
## 2 95 -2 0.2556 0.775
Interpretación:
La prueba de causalidad de Granger evalúa si la variable \(x\) proporciona información predictiva sobre \(y\), más allá de la proporcionada por los valores pasados de \(y\). Los resultados de la prueba son los siguientes:
- La hipótesis nula (\(H_0\)) establece que las variables rezagadas de \(x\) no tienen un efecto causal sobre \(y\).
- El valor \(p = 0.775\) es significativamente mayor que un nivel de significancia común (\(\alpha = 0.05\)), lo que indica que no se puede rechazar la hipótesis nula.
Con base en los resultados, no hay evidencia suficiente para concluir que \(x\) causa \(y\) en el sentido de Granger. Esto sugiere que los valores rezagados de \(x\) no proporcionan información adicional para predecir \(y\) más allá de lo que ya aportan los valores rezagados de \(y\).
Bibliografía:
Dickey, D. A., & Fuller, W. A. (1981). Likelihood Ratio Statistics for Autoregressive Time Series with a Unit Root. Econometrica, 49, 1057-1022.
Granger, C. W. J., & Engle, R. F. (1987). Cointegration and error correction: Representation, estimation, and testing. Econometrica, 55(2), 251–276. https://doi.org/10.2307/1913236
Durlauf, S. N., & Blume, L. E. (Eds.). (2010). Macroeconometrics and Time Series Analysis. Palgrave Macmillan.