Cointegración y Causalidad

UNIVERSIDAD DE EL SALVADOR

FACULTAD DE CIENCIAS ECONÓMICAS

ESCUELA DE ECONOMÍA

MÉTODOS PARA EL ÁNALISIS ECONÓMICO

TEMA:

“Cointegración y Causalidad”

DOCENTE:

MSF. Carlos Ademir Pérez Alas.

Grupo de Trabajo

Grupo 06

Integrantes Carnet Participación
Martinez Alfaro Kelly Jeannette MP21084 100%
Méndez Pacheco Darleen Ivette MP21084 100%
Zarpate Crissia Margareth Villalta MB22006 100%

CIUDAD UNIVERSITARIA, VIERNES 10 DE ENERO DE 2025


options(scipen = 999999)
knitr::opts_chunk$set(warning=FALSE,echo=TRUE,message=FALSE,eval=TRUE)

1. Prueba de Raíz Unitaria de Dickey & Fuller

Propósito de la prueba, es decir ¿Para qué se usa?

La prueba de raíz unitaria de Dickey & Fuller (ADF) se utiliza para determinar la estacionariedad de una serie de tiempo. Una serie estacionaria presenta propiedades estadísticas constantes a lo largo del tiempo, mientras que una serie no estacionaria muestra cambios en estas propiedades, posiblemente puede ser causado por tendencias, componentes estacionales o la presencia de una raíz unitaria. La identificación de una raíz unitaria sugiere que la serie es no estacionaria y que sus valores actuales dependen de los pasados, es esencial en econometría, porque muchos modelos económicos requieren la estacionariedad de las variables para obtener resultados válidos.

Hipótesis de la prueba. (explique el porqué de las hipótesis Nula y Alternativa)

Las hipótesis de la prueba de Dickey-Fuller se formulan para evaluar si una serie temporal es estacionaria o no. La hipótesis nula postula que la serie presenta una raíz unitaria, lo que indica que es no estacionaria, mientras que la hipótesis alternativa sostiene que la serie es estacionaria.

La prueba de Dickey-Fuller se fundamenta en la siguiente ecuación:

Δyt = αyt-1 + εt

Donde:

Δyt: es la primera diferencia de la serie temporal yt (yt - yt-1).

yt-1: es el valor de la serie en el período anterior.

α: es el parámetro que se somete a prueba.

εt: es el error aleatorio.

Hipótesis Nula (H0): α = 0

Esta hipótesis indica que la serie de tiempo presenta una raíz unitaria, lo que sugiere que es no estacionaria y sigue un proceso de camino aleatorio.

Hipótesis Alternativa (H1): α < 0

Esta hipótesis sostiene que la serie es estacionaria, lo que implica que tiende a regresar a su media a lo largo del tiempo y que los choques tienen un efecto temporal que se atenúa con el paso del tiempo.Se define como α < 0. Si se cumple que α < 0, se concluye que yt es estacionaria.

Es decir:

H0: α = 0, posee raíz unitaria y es una serie temporal no estacionaria.

H1: α < 0, serie temporal estacionaria.

Sintaxis de implementación en R, explicando cada uno de los argumentos

En R, la prueba de Dickey-Fuller se puede llevar a cabo mediante la función ur.df() del paquete urca. La sintaxis básica de esta función es la siguiente:

ur.df(y, type = c(“none”, “drift”, “trend”), lags = 0)

Donde:

y: Es la serie temporal que se va a analizar.

type: Especifica el tipo de modelo que se empleará en la prueba de Dickey-Fuller. Los valores posibles son:

  • none: no incluye ni constante ni tendencia en la regresión de la prueba.
  • drift: incorpora una constante (intercepto) en la regresión de la prueba.
  • trend: incluye tanto una constante como una tendencia en la regresión de la prueba.

lags: Especifica el número de rezagos de la variable dependiente que se incluirán en la regresión de la prueba. La prueba de Dickey-Fuller aumentada (ADF) utiliza rezagos para corregir la autocorrelación en los errores, permitiendo especificar cualquier cantidad de rezagos para controlar la autocorrelación serial.

Estadístico de prueba (haga referencia en la salida que genera R)

En la prueba de Dickey-Fuller, el estadístico de prueba es un valor t calculado para el parámetro α en la regresión de prueba. Esta regresión se basa en los siguientes modelos:

  • Sin constante ni tendencia: Δyt = αyt-1 + εt.

  • Con constante (drift): Δyt = α0 + αyt-1 + εt.

  • Con constante y tendencia: Δyt = α0 + α1t + αyt-1 + εt.

La salida de la función ur.df() en R muestra el valor de este estadístico t bajo la etiqueta “Value of test-statistic is:”. Es importante destacar que esta distribución no es la t-Student habitual, sino una distribución no estándar tabulada por Dickey y Fuller.

Criterio de decisión (haga referencia en la salida que genera R)

H0: No se puede rechazar H0. Si el valor Pvalue > 0.05 o si el valor absoluto del estadístico de prueba es menor que el valor absoluto del valor crítico, se concluye que la serie es no estacionaria.

H1: Se rechaza H0. Si el valor Pvalue < 0.05, o si el valor absoluto del estadístico de prueba es mayor que el valor absoluto del valor crítico y el estimador α es negativo, se concluye que la serie es estacionaria.

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

-Si no se puede rechazar H0, la serie presenta una raíz unitaria y es no estacionaria. Esto sucede cuando el valor p es mayor que un nivel de significancia establecido (comúnmente 0.05) o cuando el valor absoluto del estadístico de prueba es menor que el valor absoluto del valor crítico correspondiente.

-Si se rechaza H0, la serie no tiene raíz unitaria y es estacionaria, lo que ocurre cuando el valor Pvalue es menor que 0.05 o el estadístico de prueba supera el valor crítico. Es crucial que el estimador α (alfa) sea negativo; si es positivo, la conclusión de estacionariedad no es válida. Esto indica que la serie tiende a regresar a su media con media y varianza constantes.

Implementación de un ejemplo Dickey-Fuller Simple

Hipótesis de la Prueba de Raíz Unitaria de Dickey & Fuller

Hipótesis Nula (H0)

La serie de tiempo tiene una raíz unitaria (es no estacionaria).

Hipótesis alternativa (H1)

La serie de tiempo no tiene una raíz unitaria (es estacionaria).

Criterio de Decisión

-Si el valor-p es menor que un nivel de significancia predefinido, se rechaza la hipótesis nula de que existe una raíz unitaria y se concluye que la serie es estacionaria

-Si el valor-p es mayor que el nivel de significancia, no se rechaza la hipótesis nula y se concluye que la serie no es estacionaria y tiene una raíz unitaria.

Ejemplo de “Peso de Pollos” Dickey-Fuller Simple

Se observará una serie de tiempo simulada llamada peso_pollos. La serie representa el peso de un pollo a lo largo de 100 días, simulando un crecimiento con ruido aleatorio. No son datos reales.

library(urca)
library(tseries)
set.seed(10)

#Simulación de datos de un pollo creciendo a lo largo de 100 días
peso_pollos <- cumsum(rnorm(100, mean = 0.1, sd = 0.5)) + 10 

plot(peso_pollos, type = "l", 
     main = "Peso de Pollos a lo largo del tiempo", 
     xlab = "Días", 
     ylab = "Peso")

  1. Prueba de Raíz Unitaria Dickey-Fuller Simple (ADF)
adf = ur.df(peso_pollos, type="none", lags = 1)
summary(adf)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression none 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.9937 -0.3228  0.0246  0.3667  1.1291 
## 
## Coefficients:
##            Estimate Std. Error t value Pr(>|t|)
## z.lag.1    0.002351   0.005187   0.453    0.651
## z.diff.lag 0.127705   0.102668   1.244    0.217
## 
## Residual standard error: 0.4743 on 96 degrees of freedom
## Multiple R-squared:  0.01906,    Adjusted R-squared:  -0.001372 
## F-statistic: 0.9329 on 2 and 96 DF,  p-value: 0.397
## 
## 
## Value of test-statistic is: 0.4533 
## 
## Critical values for test statistics: 
##      1pct  5pct 10pct
## tau1 -2.6 -1.95 -1.61

Si se rechaza H0, Pvalue 0.008121 < 0.05, significa que la serie de tiempo no tiene raíz unitaria y es estacionaria. El peso del pollo tiende a estabilizarse en el tiempo y no sigue una tendencia de crecimiento ilimitada.

Implementación de un ejemplo Dickey-Fuller Aumentada

Hipótesis de la Prueba de Raíz Unitaria de Dickey & Fuller

Hipótesis Nula (H0)

La serie de tiempo tiene una raíz unitaria y es no estacionaria.

Hipótesis alternativa (H1)

La serie de tiempo no tiene una raíz unitaria y es estacionaria.

Criterio de Decisión

-Si el valor-p es menor que un nivel de significancia predefinido, se rechaza la hipótesis nula de que existe una raíz unitaria y se concluye que la serie es estacionaria

-Si el valor-p es mayor que el nivel de significancia, no se rechaza la hipótesis nula y se concluye que la serie no es estacionaria y tiene una raíz unitaria.

Ejemplo de “Venta de Cocos” Dickey-Fuller Aumentada

library(urca)
library(tseries)
set.seed(989) 
ventas_cocos <- cumsum(rnorm(100, mean = 0.1, sd = 0.8)) 
plot(ventas_cocos, type = "l", 
     main = "Ventas Diarias Simuladas de Cocos", 
     xlab = "Tiempo", 
     ylab = "Cantidad de Cocos Vendidos")

Prueba de Dickey-Fuller Aumentada

adf_test_adf_coco <- adf.test(ventas_cocos, alternative = "stationary")

print("Prueba de Dickey-Fuller Aumentada (Ventas de Cocos)")
## [1] "Prueba de Dickey-Fuller Aumentada (Ventas de Cocos)"
print(adf_test_adf_coco)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  ventas_cocos
## Dickey-Fuller = -1.6797, Lag order = 4, p-value = 0.7093
## alternative hypothesis: stationary

No se rechaza H0, Pvalue 0.7093 > 0.05, significa que la serie de tiempo tiene una raíz unitaria y es no estacionaria. Las ventas de cocos muestran un comportamiento más caótico, pueden exhibir una tendencia pero no se estabilizan alrededor de un promedio.

2. Cointegración en el enfoque de Soren Johansen.

Propósito de la prueba, es decir ¿Para qué se usa?

La prueba de cointegración de Johanse es un método multivariante que determina si existe una relación de equilibrio a largo plazo entre dos o más variables no estacionarias. Su objetivo principal es identificar si un conjunto de variables, aunque individualmente no estacionarias, puede tener una combinación lineal que sea estacionaria.

Propósitos esenciales de la prueba de cointegración de Johansen

-Identificación de relaciones a largo plazo: Establece si las variables comparten tendencias estocásticas comunes, lo que sugiere que se mueven juntas hacia un equilibrio a largo plazo.

-Análisis de equilibrio: Facilita el modelado de cómo las variables se ajustan para regresar al equilibrio, mejorando la comprensión de su dinámica de ajuste.

-Prevención de regresiones espurias: Contribuye a evitar conclusiones erróneas que pueden surgir de correlaciones coincidentales entre variables no estacionarias.

-Determinación del número de relaciones de cointegración: Identifica cuántas combinaciones lineales estacionarias existen entre las variables, lo cual es esencial para modelar sistemas complejos.

-Modelado de corrección de errores: Sirve como fundamento para desarrollar modelos VECM que integran tanto los ajustes a corto plazo como la relación de equilibrio a largo plazo.

Hipótesis de la prueba.

En el enfoque de Johansen, se plantean dos hipótesis fundamentales para evaluar la cointegración entre variables no estacionarias.

La ecuación fundamental que establece la cointegración se fundamenta en el concepto de que, a pesar de que las series individuales no sean estacionarias.

La ecuación general que describe esta relación es la siguiente:

β’yt= β1 Y1t + β2 Y2t+ βn Ynt = ut

Donde:

yt: es un vector que contiene las variables no estacionarias, en el tiempo t.

β: es el vector de cointegración, que contiene los coeficientes que definen la combinación lineal.

ut: es el término de error o residuo resultante de la combinación lineal.

La ecuación de cointegración busca una combinación lineal de variables no estacionarias (yt), ponderadas por coeficientes (β), que resulte en un residuo estacionario (ut). Si este residuo (ut) es estacionario, las variables se consideran cointegradas, lo que implica una relación de equilibrio a largo plazo.

Hipótesis Nula (H0): r = 0

No existe cointegración entre las variables analizadas. Esto implica que las variables no comparten una tendencia estocástica común y, por lo tanto, no se mueven juntas hacia un equilibrio a largo plazo. La aceptación de esta hipótesis sugiere que cualquier relación observada entre las variables es meramente espuria.

Hipótesis Alternativa (H1): r ≥ 1

Existe al menos una relación de cointegración entre las variables. Esto significa que, a pesar de ser no estacionarias individualmente, hay una combinación lineal de las variables que es estacionaria, indicando que comparten una tendencia común y se ajustan hacia un equilibrio a largo plazo.

Es decir:

H0: r = 0 , no existe cointegración entre las variables.

H1: r ≥ 1, existe al menos una relación de cointegración entre las variables.

Sintaxis de implementación en R, explicando cada uno de los argumentos.

Para realizar la prueba de cointegración de Johansen, se utilizan principalmente las siguientes funciones de los paquetes urca y vars :

1. Función ca.jo() del paquete urca: Esta función es fundamental para llevar a cabo la prueba de cointegración de Johansen.

x: (obligatorio) Representa la serie de tiempo o el marco de datos que contiene las variables a analizar. Debe ser una matriz o un objeto convertible a matriz numérica, es decir, las variables deben ser numéricas. Por ejemplo, es un conjunto de datos que consiste en varias series temporales utilizadas en la prueba.

type: (opcional) Especifica el tipo de estadístico de prueba. Puede ser (máximo autovalor) o (estadístico de traza). Si no se especifica, el valor por defecto es .

ecdet: (opcional) Define los componentes determinísticos a incluir en el modelo. Puede ser (sin determinante), (incluye una constante) o (incluye una tendencia lineal). El valor por defecto es .

K: (opcional) Indica el número de rezagos a incluir en el modelo VAR subyacente. Generalmente se elige basado en criterios de información; el valor por defecto es 2.

spec: (opcional) Especifica el tipo de modelo VEC a considerar. Puede ser (relaciones de largo plazo) o (relaciones transitorias). El valor por defecto es season: (opcional) Especifica la frecuencia de datos estacionales. Por ejemplo, para datos trimestrales, se debe establecer en 4. El valor por defecto es NULL, lo que significa que no se considera la estacionalidad.

2. Función cajorls() del paquete urca: Se utiliza para estimar los parámetros del modelo de corrección de errores (VEC) tras realizar la prueba de cointegración.

x: (obligatorio) Representa el resultado de la prueba de cointegración realizada con , es decir, toma el objeto devuelto por .

r: (opcional) Indica el número de relaciones de cointegración encontradas en la prueba anterior que se usarán en la estimación VEC. El valor por defecto es 1, y se determina al analizar los resultados del test de Johansen.

3. Función VARorder() del paquete vars: Se utiliza para determinar el número óptimo de rezagos a incluir en un modelo VAR, que es un paso previo a la prueba de cointegración con .

x: (obligatorio) Representa la serie de tiempo o el marco de datos que contiene las variables a analizar. Debe ser una matriz o un objeto convertible a matriz numérica.

maxlag: (opcional) Especifica el número máximo de rezagos a considerar. El valor por defecto es 10.

type: (opcional) Especifica los componentes determinísticos a incluir en el modelo para determinar el orden de retardo óptimo. Puede ser (sin determinante), (incluye una constante) o (incluye una tendencia lineal). El valor por defecto es .

Estadístico de prueba (haga referencia en la salida que genera R)

En el enfoque de Johansen, se utilizan dos estadísticos de prueba para evaluar la cointegración:

Estadístico de traza

Este estadístico evalúa la hipótesis nula de que el rango de cointegración es (r) (número de relaciones de cointegración) frente a la alternativa de que el rango es (n) (número total de variables).

En la salida de R, se presenta bajo la sección “Trace test” y muestra el valor del estadístico junto con los valores críticos para diferentes niveles de significancia (0.01, 0.05, 0.10). Si el estadístico de traza es mayor que el valor crítico correspondiente, se rechaza la hipótesis nula.

Estadístico de máximo autovalor

Este estadístico evalúa la hipótesis nula de que el rango de cointegración es (r) frente a la alternativa de que el rango es (r+1).

En la salida de R, se presenta bajo la sección “Max-Eigen test” y también incluye el valor del estadístico y los valores críticos. Si el estadístico de máximo autovalor supera el valor crítico, se rechaza la hipótesis nula.

Criterio de decisión (haga referencia en la salida que genera R)

Estadístico de traza

En la salida de R, se encuentra en la sección “Trace test”. Para cada valor de ( r ) (número de relaciones de cointegración), se presenta el estadístico de traza y los valores críticos para diferentes niveles de significancia (0.01, 0.05, 0.10).

Criterio de decisión: Si el estadístico de traza es mayor que el valor crítico correspondiente, se rechaza la hipótesis nula de que el rango de cointegración es ( r ).

Estadístico de máximo autovalor

En la salida de R, se encuentra en la sección “Max-Eigen test”. Similarmente, se presentan los valores del estadístico y los valores críticos.

Criterio de decisión: Si el estadístico de máximo autovalor es mayor que el valor crítico correspondiente, se rechaza la hipótesis nula de que el rango de cointegración es (r).

Interpretación

-Si se rechaza la hipótesis nula en ambos estadísticos para un valor de (r), se concluye que hay al menos (r + 1) relaciones de cointegración.

-Si no se puede rechazar la hipótesis nula, se concluye que no hay suficientes evidencias para afirmar la existencia de relaciones de cointegración en el modelo analizado.

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

La hipótesis nula en las pruebas de cointegración de Johansen se refiere al número de relaciones de cointegración entre las variables analizadas.

-En la prueba del autovalor máximo, la hipótesis nula establece que el rango de cointegración es (r) (número de relaciones de cointegración) frente a la alternativa de que el rango es (r+ 1).

-En la prueba de la traza, la hipótesis nula establece que el rango de cointegración es (r) o menor, en contraste con la alternativa de que el rango es (n), donde (n) es el número total de variables en el sistema.

Rechazo de la Hipótesis Nula: Si el estadístico de prueba supera el valor crítico correspondiente para un nivel de significancia dado (por ejemplo, 5%), se rechaza la hipótesis nula. Esto indica que hay evidencia estadística para concluir que existe más de (r) relaciones de cointegración.

En la prueba del autovalor máximo, rechazar la hipótesis nula implica que hay al menos (r + 1) relaciones de cointegración.

En la prueba de la traza, rechazar la hipótesis nula sugiere que hay más de (r) relaciones de cointegración.

No Rechazo de la Hipótesis Nula: Si el estadístico de prueba es menor o igual que el valor crítico correspondiente, no se rechaza la hipótesis nula. Esto sugiere que no hay suficiente evidencia estadística para concluir que existe más de (r) relaciones de cointegración.

El número de relaciones de cointegración se determina identificando el punto en el que se rechaza la hipótesis nula por primera vez, analizando los resultados de la prueba para cada valor de (r).

Implementación de un ejemplo

Hipótesis de la Prueba de Cointegración en el enfoque de Soren Johansen

Hipótesis Nula (H0)

Las series de precios de salmón, atún y bacalao no están cointegradas.

Hipótesis alternativa (H1)

Las series de precios de salmón, atún y bacalao están cointegradas.

Criterio de Decisión

-Si el estadístico de prueba es mayor que el valor crítico, se rechaza la hipótesis nula de no cointegración.

-Si el estadístico de prueba es menor que el valor crítico, no se rechaza la hipótesis nula.

En este ejemplo, usaremos precios de salmón, atún y bacalao con datos propios .
library(urca)
library(vars)
library(readxl)
library(ggplot2)
library(dplyr)
file_path <- "precios_pescado.xlsx"
data <- read_excel(file_path)

data <- data[, c("salmon", "atun", "bacalao")]

Pruebas de raíz unitaria

adf_var1 <- ur.df(data$salmon, type = "drift", lags = 2)
summary(adf_var1)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression drift 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
## 
## Residuals:
##      1      2      3      4      5      6      7 
## -3.267  4.059 -5.247  1.374 -1.637 -1.991  6.707 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)
## (Intercept)   7.5462    10.9584   0.689    0.541
## z.lag.1      -0.7829     1.5172  -0.516    0.641
## z.diff.lag1   1.3912     1.1244   1.237    0.304
## z.diff.lag2   0.4760     0.8944   0.532    0.632
## 
## Residual standard error: 6.005 on 3 degrees of freedom
## Multiple R-squared:  0.3398, Adjusted R-squared:  -0.3203 
## F-statistic: 0.5148 on 3 and 3 DF,  p-value: 0.7004
## 
## 
## Value of test-statistic is: -0.516 0.5161 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau2 -3.75 -3.00 -2.63
## phi1  7.88  5.18  4.12
adf_var2 <- ur.df(data$atun, type = "drift", lags = 2)
summary(adf_var2)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression drift 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
## 
## Residuals:
##       1       2       3       4       5       6       7 
##  0.2573 -0.4450 -0.2820  0.2472 -0.5602 -0.5928  1.3755 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  6.351737   3.191726   1.990   0.1407  
## z.lag.1     -0.959287   0.467131  -2.054   0.1323  
## z.diff.lag1  0.645503   0.224371   2.877   0.0637 .
## z.diff.lag2 -0.008138   0.342951  -0.024   0.9826  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9936 on 3 degrees of freedom
## Multiple R-squared:  0.8653, Adjusted R-squared:  0.7305 
## F-statistic: 6.422 on 3 and 3 DF,  p-value: 0.08047
## 
## 
## Value of test-statistic is: -2.0536 2.194 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau2 -3.75 -3.00 -2.63
## phi1  7.88  5.18  4.12
adf_var3 <- ur.df(data$bacalao, type = "drift", lags = 2)
summary(adf_var3)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression drift 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
## 
## Residuals:
##       1       2       3       4       5       6       7 
## -3.6854 -2.9892  0.1664  0.8074 -0.9368 -3.2603  9.8979 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)
## (Intercept)   4.8206    24.2438   0.199    0.855
## z.lag.1      -0.4717     3.6528  -0.129    0.905
## z.diff.lag1  -0.7415     2.5147  -0.295    0.787
## z.diff.lag2  -0.3701     1.9485  -0.190    0.861
## 
## Residual standard error: 6.65 on 3 degrees of freedom
## Multiple R-squared:  0.1385, Adjusted R-squared:  -0.723 
## F-statistic: 0.1608 on 3 and 3 DF,  p-value: 0.9162
## 
## 
## Value of test-statistic is: -0.1291 0.2302 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau2 -3.75 -3.00 -2.63
## phi1  7.88  5.18  4.12

Prueba de cointegración de Johansen

k_rezagos <- 2
johansen_test <- ca.jo(data, type = "trace", ecdet = "const", K = k_rezagos)
summary(johansen_test)
## 
## ###################### 
## # Johansen-Procedure # 
## ###################### 
## 
## Test type: trace statistic , without linear trend and constant in cointegration 
## 
## Eigenvalues (lambda):
## [1] 1.0000000000005586642260 1.0000000000000024424907 0.4883145728343404878835
## [4] 0.0000000000000002220446
## 
## Values of teststatistic and critical values of test:
## 
##          test 10pct  5pct  1pct
## r <= 2 | 5.36  7.52  9.24 12.97
## r <= 1 |  NaN 17.85 19.96 24.60
## r = 0  |  NaN 32.00 34.91 41.07
## 
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
## 
##             salmon.l2   atun.l2  bacalao.l2   constant
## salmon.l2    1.000000  1.000000  1.00000000   1.000000
## atun.l2      1.498923 -1.439696  0.08415783   1.141061
## bacalao.l2   7.218581  1.343057 -0.39634632   4.318025
## constant   -65.584437 -6.317856 -5.63334033 -41.365014
## 
## Weights W:
## (This is the loading matrix)
## 
##            salmon.l2    atun.l2  bacalao.l2                constant
## salmon.d  -3.0773926 -1.3538954 -0.38769580 0.000000000000064456859
## atun.d    -0.2664558  0.6906924 -0.02564870 0.000000000000004563818
## bacalao.d -3.5866708 -0.5136775  0.02883884 0.000000000000074573540
# En la salida de la prueba de Johansen puedes obtener
# Los Eigenvalores
johansen_test@lambda
## [1] 1.0000000000005586642260 1.0000000000000024424907 0.4883145728343404878835
## [4] 0.0000000000000002220446
# Los Estadisticos de prueba
johansen_test@teststat
## [1] 5.360362      NaN      NaN
# Los valores criticos
johansen_test@cval
##          10pct  5pct  1pct
## r <= 2 |  7.52  9.24 12.97
## r <= 1 | 17.85 19.96 24.60
## r = 0  | 32.00 34.91 41.07

Estimación del Modelo VEC

#r es el número de vectores de cointegración

r_cointegracion <- 1  
vecm_model <- cajorls(johansen_test, r = r_cointegracion)
vecm_model
## $rlm
## 
## Call:
## lm(formula = substitute(form1), data = data.mat)
## 
## Coefficients:
##              salmon.d  atun.d   bacalao.d
## ect1         -3.0484   -0.2812  -3.5757  
## salmon.dl1    3.3535    1.0089   3.0311  
## atun.dl1      3.8382    0.8815   3.1058  
## bacalao.dl1  -4.5329    0.6906  -8.3551  
## 
## 
## $beta
##                  ect1
## salmon.l2    1.000000
## atun.l2      1.498923
## bacalao.l2   7.218581
## constant   -65.584437

3. Causalidad en el sentido de Granger.

Propósito de la prueba, es decir ¿Para qué se usa?

La prueba de causalidad de Granger se emplea para determinar si una serie temporal puede ser útil para predecir otra. En términos simples, busca establecer si los valores pasados de una serie temporal X son útiles para anticipar los valores futuros de otra serie temporal Y. Su objetivo principal es evaluar si una variable proporciona información única para predecir otra, más allá de su propia historia pasada, subrayando que la causalidad de Granger se refiere a una relación de predecibilidad fundamentada en el orden temporal, sin requerir restricciones teóricas , ya que se basa en la noción de que el pasado puede influir en el futuro, pero no al revés.

Hipótesis de la prueba.

La prueba de causalidad de Granger determina si una serie temporal X tiene la capacidad de predecir otra serie temporal Y. Esto se hace mediante la comparación de dos modelos de regresión; uno que incluye los valores pasados (rezagados) de X y otro que no los incluye.

Modelo 1: Con valores pasados de X

Yt = α0 + α1yt-1 + α2yt-2 +⋯+ αpYt-p + β1 Xt-1+ β2 Xt-2 +⋯+ βp Xt-p εt

Donde:

Yt: es el valor de la serie temporal Y en el tiempo t.

Yt-1: son los valores rezagados de la serie temporal Y en el tiempo t-i.

Xt-1: son los valores rezagados de la serie temporal X en el tiempo t-i.

α0: es el intercepto.

α1: los coeficientes asociados a los valores rezagados de Y.

β1: son los coeficientes asociados a los valores rezagados de X.

p: número de rezagos incluidos en el modelo.

εt: es el término de error.

Modelo 2: Sin valores pasados de X

Este modelo solo incluye los valores rezagados de Y para predecir el valor actual de Y, sin considerar la serie X:

Yt = α0 + α1yt-1 + α2yt-2 +⋯+ αpYt-p + εt

Donde:

Los componentes son los mismos que en el modelo 1, pero no se incluyen los valores rezagados de X.

Hipótesis nula (H0)

Establece que la serie temporal X no causa a la serie temporal Y en el sentido de Granger, lo que implica que los valores pasados de X no proporcionan información útil para predecir Y. Esta hipótesis se utiliza como punto de partida para el análisis, ya que se busca evidencia suficiente para rechazarla.

Hipótesis alternativa (H1)

Propone que la serie temporal X sí causa a la serie temporal Y en el sentido de Granger, sugiriendo que los valores pasados de X son útiles para anticipar los valores futuros de Y. La aceptación de esta hipótesis implica que existe una relación de predecibilidad entre las dos series temporales, lo que puede tener implicaciones significativas en el análisis y la toma de decisiones.

Es decir:

H0: Si la hipótesis nula no se puede rechazar, esto indica que los valores pasados de X no proporcionan información útil para predecir Y.

H1: Si la hipótesis nula se rechaza, esto indica que al menos uno de los valores pasados de X sí tiene información útil para predecir Y, por lo que se concluye que X “causa” a Y en el sentido de Granger.

Sintaxis de implementación en R, explicando cada uno de los argumentos.

Para llevar a cabo la prueba de causalidad de Granger en R, se utiliza la función grangertest() del paquete lmtest:

grangertest(y, x, order = 1)

Donde:

y: Representa la variable dependiente, es decir, la serie temporal que se desea predecir o la serie “causada”.

x: Es la variable independiente, que se utiliza para predecir y, conocida como la serie “causal”.

order: Un número entero que indica cuántos rezagos (o retardos) de x se incluirán en la prueba. El valor por defecto es 1, lo que significa que solo se considerará el valor inmediato anterior de x. Por ejemplo, si , se incluirán los valores de x de los tres períodos anteriores.

La función grangertest()toma como argumentos principales las dos series de tiempo (x e y) y busca determinar si x tiene un efecto causal de Granger sobre y.

El argumento order define cuántos rezagos de la variable x se incluirán en el análisis. La selección del número de rezagos debe basarse en la teoría económica, el conocimiento del proceso o criterios estadísticos como el AIC o BIC, y es común probar diferentes valores para este argumento.

La función genera una estadística de prueba F y un valor p. Si el valor p es menor que el nivel de significancia establecido (por ejemplo, 0.05), se rechaza la hipótesis nula de no causalidad de Granger.

Estadístico de prueba (haga referencia en la salida que genera R)

En la prueba de causalidad de Granger, se utiliza una estadística de prueba F para evaluar la relación entre las series temporales. Al ejecutar la función en R, se genera una salida que incluye varios componentes clave:

Estadístico F:

Este valor indica la relación entre la variabilidad explicada por el modelo que incluye los rezagos de x y la variabilidad no explicada. Un valor F más alto sugiere que los rezagos de x tienen un efecto significativo en la predicción de y.

Valor PValue:

Este valor se utiliza para determinar la significancia estadística del estadístico F. Si el valor p es menor que el nivel de significancia establecido (por ejemplo, 0.05), se rechaza la hipótesis nula de no causalidad de Granger, lo que sugiere que x causa a y en el sentido de Granger.

Ejemplo de salida en R. Al ejecutar la prueba, la salida puede verse así:

Res.Df: Grados de libertad residuales para cada modelo.

Df: Diferencia en los grados de libertad entre los dos modelos.

F: Estadístico de prueba F calculado.

Pr(>F): Valor p asociado al estadístico F.

Si el valor p es significativamente bajo (por ejemplo, menor a 0.05), se concluye que existe causalidad de Granger de x sobre y.

Ejemplo de la prueba de causalidad de Granger en R

Paso 1: Cargar datos

# Para este ejemplo, utilizaremos el conjunto de datos EuStockMarkets.

tsData <- EuStockMarkets[, 1:2]
head(tsData)
##          DAX    SMI
## [1,] 1628.75 1678.1
## [2,] 1613.63 1688.5
## [3,] 1606.51 1678.6
## [4,] 1621.04 1684.1
## [5,] 1618.16 1686.6
## [6,] 1610.61 1671.6

Paso 2: Realizar la prueba de causalidad de Granger

library(lmtest)
grangertest(DAX ~ SMI, order = 3, data = tsData)
## 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 0.00001322 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Paso 3: Realizar la prueba de causalidad de Granger en sentido inverso

# A pesar de que se rechazó la hipótesis nula de la prueba, es posible que se esté produciendo una causalidad inversa. En ese ejemplo, es probable que los cambios en los valores del DAX afecten a los valores del SMI.

grangertest(SMI ~ DAX, order = 3, data = tsData)
## 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

El código presentado realiza una prueba de causalidad de Granger utilizando la función grangertest() del paquete lmtest en R [el paquete lmtest contiene la función grangertest()].

Primero, tsData <- EuStockMarkets[, 1:2] carga los datos de EuStockMarkets y selecciona las columnas correspondientes a los índices DAX y SMI, creando el marco de datos tsData. Luego, head(tsData) muestra las primeras seis filas del marco de datos. library(lmtest) carga el paquete necesario para usar la función grangertest().

Después, grangertest(DAX ~ SMI, order = 3, data = tsData) ejecuta la prueba de causalidad de Granger, con DAX como variable dependiente y SMI como independiente, usando 3 rezagos.

Finalmente, grangertest(SMI ~ DAX, order = 3, data = tsData) realiza la prueba en sentido inverso, con SMI como variable dependiente y DAX como independiente, también con 3 rezagos, para evaluar si hay causalidad inversa. El propósito de ambas pruebas es determinar si los valores pasados de una serie temporal ayudan a predecir los valores futuros de otra, lo que se conoce como “causalidad de Granger.

Criterio de decisión (haga referencia en la salida que genera R)

El criterio de decisión es el valor Pvalue:

●Rechazar H0 si valor Pvalue < 0.05

●No Rechazar H0 si valor Pvalue ≥ 0.05

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

Rechazo de la Hipótesis Nula

Si el valor Pvalue es menor que el nivel de significancia (comúnmente 0.05), se rechaza la hipótesis nula. Esto indica que hay evidencia suficiente para afirmar que la serie temporal x causa a la serie temporal y en el sentido de Granger, lo que sugiere que los valores pasados de x son útiles para predecir los valores futuros de y.

No rechazo de la Hipótesis Nula

Si el valor Pvalue es mayor o igual al nivel de significancia (0.05), no se rechaza la hipótesis nula. Esto implica que no hay evidencia suficiente para concluir que los valores pasados de x ayudan a predecir los valores futuros de y.

Ejemplo de salida en R (del ejemplo en el código):

grangertest(DAX ~ SMI, order = 3, data = tsData)
## 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 0.00001322 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
En este caso, el valor Pvalue (Pr(>F)) es 1.322e-05, que es menor que 0.05. Por lo tanto, se rechaza la hipótesis nula y se concluye que SMI causa en el sentido de Granger a DAX.

Implementación de un ejemplo

Hipótesis de la Prueba de Causalidad de Granger

Hipótesis Nula (H0)

H0: La cantidad de “cuacs” del pato no causa el nivel del estanque. H0: El nivel del estanque no causa la cantidad de “cuacs” del pato.

Hipótesis Alternativa (H1)

H1: La cantidad de “cuacs” del pato causa el nivel del estanque. H1: El nivel del estanque causa la cantidad de “cuacs” del pato.

Criterio de Decisión

-Rechazar H0: Si el valor p es menor que un nivel de significancia predefinido (α), usualmente 0.05, se rechaza la hipótesis nula.

-No Rechazar H0: Si el valor p es mayor o igual a α, no se rechaza la hipótesis nula.

En este ejemplo, consideramos dos series temporales: una que representa la cantidad de “cuacs” emitidos por un pato y otra que representa el nivel del estanque donde nada el pato. Nuestro objetivo es determinar si la cantidad de cuacs puede predecir el nivel del estanque o si, por el contrario, el nivel del estanque influye en la cantidad de cuacs emitidos por el pato.

library(lmtest)
set.seed(456)
tsData <- data.frame(
  cuacs = cumsum(rnorm(200, 0.01, 0.05)),  # Cantidad de "cuacs" del pato
  nivel_estanque = cumsum(rnorm(200, 0.02, 0.1)) # Nivel del estanque
)
# Prueba de causalidad de Granger: ¿Los "cuacs" causan el nivel del estanque?

granger_test_cuacs_nivel <- grangertest(nivel_estanque ~ cuacs, 
                                        order = 3, 
                                        data = tsData)

print("Prueba de causalidad de Granger (cuacs -> nivel_estanque):")
## [1] "Prueba de causalidad de Granger (cuacs -> nivel_estanque):"
print(granger_test_cuacs_nivel)
## Granger causality test
## 
## Model 1: nivel_estanque ~ Lags(nivel_estanque, 1:3) + Lags(cuacs, 1:3)
## Model 2: nivel_estanque ~ Lags(nivel_estanque, 1:3)
##   Res.Df Df      F Pr(>F)
## 1    190                 
## 2    193 -3 1.0178  0.386

Si el valor p es menor que 0.05, se rechaza la H0 que dice que “la cantidad de ‘cuacs’ del pato no causa el nivel del estanque”.

# Prueba de causalidad de Granger en sentido inverso: ¿El nivel del estanque causa los "cuacs"?

granger_test_nivel_cuacs <- grangertest(cuacs ~ nivel_estanque, order = 3, data = tsData)
print("Prueba de causalidad de Granger (nivel_estanque -> cuacs):")
## [1] "Prueba de causalidad de Granger (nivel_estanque -> cuacs):"
print(granger_test_nivel_cuacs)
## Granger causality test
## 
## Model 1: cuacs ~ Lags(cuacs, 1:3) + Lags(nivel_estanque, 1:3)
## Model 2: cuacs ~ Lags(cuacs, 1:3)
##   Res.Df Df      F Pr(>F)
## 1    190                 
## 2    193 -3 1.1211 0.3418

Si el valor p de esta prueba es menor a 0.05, se rechaza la hipótesis nula de que “el nivel del estanque no causa la cantidad de ‘cuacs’