PARTE UNO DEL LABORATORIO : COINTEGRACIÓN Y CAUSALIDAD.

UNIVERSIDAD DE EL SALVADOR
FACULTAD DE CIENCIAS ECONÓMICAS
ESCUELA DE ECONOMÍA
CICLO II - 2023
“COINTEGRACIÓN Y CAUSALIDAD.”
ASIGNATURA: MÉTODOS PARA EL ANÁLISIS ECONÓMICO
CATEDRÁTICO: MSF. CARLOS ADEMIR PERÉZ ALAS
GRUPO TEÓRICO: 02
GRUPO DE TRABAJO: 04
EL EQUIPO DE TRABAJO ESTA CONFORMADO POR:
NOMBRE CARNET
AGUILAR ZACARIAS, CRISTALI DAYAMARI AZ20006
GUARDADO ANGEL, CARLOS ALBERTO GA19035
SANABRIA HERNÁNDEZ, MARIA ISABEL SH21012
PÉREZ PALACIOS, ELDER ARIEL PP18054
CIUDAD UNIVERSITARIA, 07 DE ENERO DE 2024

Prueba de Raíz Unitaria de Dickey & Fuller.

Propósito de la prueba

La Prueba Dickey Fuller permite determinar la presencia de raíz unitaria en series de tiempo, a partir de ello comprobar la existencia de estacionariedad o no estacionariedad. La estacionariedad se refiere a la recurrencia de un patrón en la serie de tiempo, una de las pruebas más utilizada es la de Dickey Fuller.

Hipótesis de la prueba.

Existen 3 versiones de esta prueba dada las características de ella, a fin de considerar múltiples posibilidades:

Yt es una caminata aleatoria (no contiene termino constante):

\[\Delta Y = [(\delta Y)]_{(t-1)}+u_t\]

Yt es una caminata aleatoria con deriva (hay termino constante):

\[\Delta Y = [(\beta_1+\delta Y)]_{(t-1)}+u_t\]

Yt es una caminata aleatoria con deriva alrededor de una tendencia determinística (termino constante y de tendencia):

\[\Delta Y = [(\beta_1+\beta_2 \delta Y)]_{(t-1)}+u_t\]

Hipótesis nula y Hipótesis Alternativa:

Ho: δ=0 es decir, contiene raíz unitaria, la serie temporal es no estacionaria.

H1: δ<0 es decir, la serie temporal es estacionaria.

Sintaxis de implementación en R

La implementación en R se realiza mediante la librería urca() y la función ur.df(), y se realiza de la siguiente manera:

library(urca)
 ur.df(y,
       type=  c("drift"),
       lags=0)

Donde:

-y: es un vector númerico o serie de tiempo

-type: Se refiere al tipo de prueba,(“none” ni una intersección ni una tendencia, “drift” una intersección, “trend” una intersección y una tendencia).

-lags: Número de rezagos de la variable endógena

Estadístico de prueba

Para decidir si rechazar o no la Ho, utilizaremos el estadístico tau (ya que las pruebas t usuales no son las adecuadas para la prueba) y lo compararemos con lo valores de la tabla DF (Dickey-Fuller).

Criterio de Decision

• Si el estadístico tau calculado es mayor que el de la tabla, aceptaremos la Ho, por lo que es una serie temporal no estacionaria.

• Si el estadístico tau calculado es menor que el de la tabla, rechazaremos la Ho, la serie temporal estacionaria.

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

-Al ser rechazada la hipótesis Nula, no se rechaza la hipótesis alternativa y por tanto se concluye que no existe raíz unitaria.

-Al no ser rechazada la hipótesis nula, se concluye que existe raíz unitaria.

Ejemplo de aplicación

Analizaremos la serie de tiempo para el desarrollo de los precios del Bitcoin, y lo haremos para cada una de las versiones y concluiremos los resultados para cada una.(vamos a considerar un intervalo de confianza al 95% y con datos mayores a 500)

carga de datos

library(quantmod)
library(tseries)
library(fImport)
library(httr)
library(RCurl)
library(rjson)
library(parsedate)
require(tseries)
library(urca)
getSymbols("BTC-USD",quote="Close",from ="2016-01-01",periodicity = "daily")
## [1] "BTC-USD"
plot(`BTC-USD`[,4],type="l")

Sin tendencia y sin constante

precio_BTC<- na.omit(`BTC-USD`[,4])
y_nada=ur.df(precio_BTC, type="none",lags=0)
summary(y_nada)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression none 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7551.8  -129.6     2.9   161.8  7294.6 
## 
## Coefficients:
##           Estimate Std. Error t value Pr(>|t|)
## z.lag.1 -4.035e-05  6.630e-04  -0.061    0.951
## 
## Residual standard error: 843.4 on 2925 degrees of freedom
## Multiple R-squared:  1.266e-06,  Adjusted R-squared:  -0.0003406 
## F-statistic: 0.003704 on 1 and 2925 DF,  p-value: 0.9515
## 
## 
## Value of test-statistic is: -0.0609 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau1 -2.58 -1.95 -1.62

R/ ya que el estadistico tau calculado (-0.0577) es mayor que el estadistico tau de la tabla (-1.941), no se rechaza la hipotesis nula, por lo que hay suficiente evidencia para concluir que la serie temporal de los precios del BTC no es estacionaria.

Con constante

y_intercept=ur.df(precio_BTC, type="drift",lags=0)
summary(y_intercept)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression drift 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7527.9  -146.6   -27.1   141.7  7300.8 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)
## (Intercept) 32.4123013 22.4510926   1.444    0.149
## z.lag.1     -0.0010321  0.0009547  -1.081    0.280
## 
## Residual standard error: 843.3 on 2924 degrees of freedom
## Multiple R-squared:  0.0003996,  Adjusted R-squared:  5.775e-05 
## F-statistic: 1.169 on 1 and 2924 DF,  p-value: 0.2797
## 
## 
## Value of test-statistic is: -1.0812 1.044 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau2 -3.43 -2.86 -2.57
## phi1  6.43  4.59  3.78

R/ ya que el estadistico tau calculado (-1.077) es mayor que el estadistico tau de la tabla (-2.863), no se rechaza la hipotesis nula, por lo que hay suficiente evidencia para concluir que la serie temporal de los precios del BTC no es estacionaria.

Con tendencia y constante

y=ur.df(precio_BTC,type="trend",lags=0)
summary(y)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression trend 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7477.4  -160.6    -3.7   136.1  7322.4 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)  
## (Intercept) -7.726856  31.687156  -0.244   0.8074  
## z.lag.1     -0.002914   0.001418  -2.055   0.0400 *
## tt           0.049185   0.027411   1.794   0.0729 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 842.9 on 2923 degrees of freedom
## Multiple R-squared:  0.001499,   Adjusted R-squared:  0.0008163 
## F-statistic: 2.195 on 2 and 2923 DF,  p-value: 0.1116
## 
## 
## Value of test-statistic is: -2.055 1.7697 2.1947 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau3 -3.96 -3.41 -3.12
## phi2  6.09  4.68  4.03
## phi3  8.27  6.25  5.34

R/ ya que el estadistico tau calculado (-2.049) es mayor que el estadistico tau de la tabla (-3.413), no se rechaza la hipotesis nula, por lo que hay suficiente evidencia para concluir que la serie temporal de los precios del BTC no es estacionaria.

Cointegración en el enfoque de Soren Johansen.

Propósito de la prueba

La cointegración en el enfoque de Soren Johansen es un concepto utilizado en el análisis de series temporales para modelar relaciones de largo plazo entre variables no estacionarias, es decir que la cointegración implica que aunque las series temporales individuales pueden ser no estacionarias, existe una combinación lineal de ellas que sí es estacionaria, y este enfoque es especialmente útil en la modelización de relaciones de equilibrio a largo plazo entre variables económicas.

El propósito de la prueba de cointegración es determinar si existe una relación de cointegración entre las series temporales, es decir, si hay combinaciones lineales de las series que son estacionarias.

Hipótesis de la prueba.

Las hipótesis para la prueba de cointegración en el enfoque de Johansen son:

Hipótesis nula (\(H_0\)): No hay cointegración (ningún vector de cointegración).

Hipótesis alternativa (\(H_1\)): Hay al menos un vector de cointegración.

Sintaxis de implementación en R

La sintaxis en R es la siguiente:

Librerías a utilizar:

library(urca) Dentro de esta libreria se encuentra la función “ca.jo” que brinda el cálculo de la cointegración por el enfoque de johansen.

Prueba de Soren Johansen

johansen <- ca.jo(x, type = c(“eigen”, “trace”), ecdet = c(“none”, “const”, “trend”), K = 2, spec=c(“longrun”, “transitory”), season = NULL, dumvar = NULL)

summary(johansen)

Argumentos:

X: Matriz de datos a investigar para la cointegración.

type: La prueba a realizar, ya sea eigen o trace.

ecdet: Carácter, none para no interceptar en la cointegración, const por término constante en cointegración y trend para la variable de tendencia en cointegración

k: El orden de retraso de la serie (niveles) en el VAR.

spec:Determina la especificación del VECM, consulte los detalles a continuación.

season: Si se deben incluir variables ficticias estacionales, la frecuencia de los datos debe establecerse en consecuencia, es decir 4 para datos trimestrales.

dumvar: Si se deben incluir variables ficticias, se puede proporcionar una matriz con una dimensión de fila igual a x.

El summary es para la visualización de la prueba

Estadístico de prueba

El estadístico de prueba es obtenido a partir de la prueba de tendencia (trend) y la prueba de valores propios (eigen) en el análisis de Johansen.

Criterio de decisión

El criterio de decisión se basa en comparar el estadístico de prueba con los valores críticos de la distribución bajo la hipótesis nula y si el estadístico es mayor que el valor crítico, se rechaza la hipótesis nula, lo que sugiere la presencia de al menos un vector de cointegración.

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

Si el estadístico de prueba es mayor que el valor critico se tendrán las suficientes evidencias para no aceptar la hipotesis nula es decir que en la serie de tiempo existe cointegración.

Implementación de un ejemplo.

library(Quandl)
## Warning: package 'Quandl' was built under R version 4.3.2
library(tseries)

Poil  <- Quandl("FRED/MCOILWTICO", type ="ts", collapse = "monthly", start_date = "1995-01-01", end_date = "2017-12-01")
Pgas  <- Quandl("FRED/GASREGCOVM", type ="ts", collapse = "monthly", start_date = "1995-01-01", end_date = "2017-12-01")


LPoil <- log(Poil)
LPgas <- log(Pgas)

library(vars)
## Warning: package 'vars' was built under R version 4.3.2
## Warning: package 'strucchange' was built under R version 4.3.2
## Warning: package 'sandwich' was built under R version 4.3.2
v1 <- cbind(LPoil, LPgas)
var <- VARselect(v1, type = "trend")
nlags <- var$selection["SC(n)"]
v1.CA <- ca.jo(v1, ecdet = "trend", type = "trace", K=nlags, spec = "transitory", season = 12)
summary(v1.CA)
## 
## ###################### 
## # Johansen-Procedure # 
## ###################### 
## 
## Test type: trace statistic , with linear trend in cointegration 
## 
## Eigenvalues (lambda):
## [1]  1.037680e-01  1.873353e-02 -1.699366e-19
## 
## Values of teststatistic and critical values of test:
## 
##           test 10pct  5pct  1pct
## r <= 1 |  5.16 10.49 12.25 16.26
## r = 0  | 35.07 22.76 25.32 30.45
## 
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
## 
##               LPoil.l1    LPgas.l1    trend.l1
## LPoil.l1  1.0000000000  1.00000000   1.0000000
## LPgas.l1 -1.6267117480  3.75026554 -10.7065612
## trend.l1  0.0009487176 -0.01919425   0.1692144
## 
## Weights W:
## (This is the loading matrix)
## 
##             LPoil.l1     LPgas.l1      trend.l1
## LPoil.d -0.006283109 -0.008367640 -2.545462e-19
## LPgas.d  0.138252677 -0.003301629  8.623684e-20

Los resultados muestran que se rechaza la hipótesis nula de r = 0. La estadística de prueba es 35,07 y el valor crítico al nivel del 1% es 30,45.

No rechazamos la prueba para r <= 1 ya que el estadístico de prueba es 5.16 y el valor crítico al nivel del 10% es 10,49.

La prueba de trazas de cointegración sugiere que r debe ser igual a 1.

v1.CA <- ca.jo(v1, ecdet = "trend", type = "eigen", K=nlags, spec = "transitory", season = 12)
summary(v1.CA)
## 
## ###################### 
## # Johansen-Procedure # 
## ###################### 
## 
## Test type: maximal eigenvalue statistic (lambda max) , with linear trend in cointegration 
## 
## Eigenvalues (lambda):
## [1]  1.037680e-01  1.873353e-02 -1.699366e-19
## 
## Values of teststatistic and critical values of test:
## 
##           test 10pct  5pct  1pct
## r <= 1 |  5.16 10.49 12.25 16.26
## r = 0  | 29.91 16.85 18.96 23.65
## 
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
## 
##               LPoil.l1    LPgas.l1    trend.l1
## LPoil.l1  1.0000000000  1.00000000   1.0000000
## LPgas.l1 -1.6267117480  3.75026554 -10.7065612
## trend.l1  0.0009487176 -0.01919425   0.1692144
## 
## Weights W:
## (This is the loading matrix)
## 
##             LPoil.l1     LPgas.l1      trend.l1
## LPoil.d -0.006283109 -0.008367640 -2.545462e-19
## LPgas.d  0.138252677 -0.003301629  8.623684e-20

Los resultados muestran que se rechaza la hipótesis nula de r = 0. La estadística de prueba es 29,91 y el valor crítico al nivel del 1% es 23,65.

Sin embargo, no rechazamos la prueba para r <= 1 ya que el estadístico de prueba es 5.16 y el valor crítico al nivel del 10% es 10,49.

La prueba propia de cointegración sugiere que r debe ser igual a 1

Causalidad en el sentido de Granger.

Propósito de la prueba

El concepto de causalidad de C.W.J. Granger, desarrollado en 1969, se refiere a una prueba estadística utilizada para determinar si una serie temporal puede predecir a otra. Esta prueba analiza si los resultados de una variable son capaces de predecir de manera unidireccional o bidireccional a otra variable en series temporales. La causalidad de Granger se basa en la comparación del comportamiento actual y pasado de una serie temporal X para predecir la conducta de otra serie temporal Y.

El test de Granger plantea dos ecuaciones que involucran rezagos de las variables X e Y. Para que una serie temporal X cause a otra Y, los modelos que utilizan datos retrasados de ambas variables deben funcionar mejor que aquellos basados únicamente en datos retrasados de Y. La causalidad de Granger se relaciona con el concepto de causa-efecto, pero solo identifica si una variable antecede a otra en una serie temporal, sin implicar necesariamente un vínculo causal en el sentido estricto.

La prueba de causalidad de Granger se aplica examinando si los valores rezagados de una variable en la regresión de otra variable reducen significativamente el error de varianza. En el contexto más general, la causalidad de Granger implica que si la variable X causa la variable Y, los cambios en X deben preceder a los cambios en Y, y esto se verifica al incluir valores pasados de X en la predicción de Y.

Aunque introducida por Granger en 1969, la noción de causalidad también fue abordada por Wiener en 1956 y Christopher A. Sims en la década de 1980. A pesar de estar formalmente definida, la causalidad de Granger sigue siendo objeto de controversias entre los economistas. En resumen, la prueba de causalidad de Granger es una herramienta estadística fundamental para evaluar si una serie temporal puede predecir otra y determinar la dirección de la relación entre ellas.

Hipótesis de la prueba.

La prueba de causalidad de Granger es una técnica estadística utilizada para evaluar si una serie temporal puede predecir otra serie temporal. La prueba se basa en la idea de que si una serie temporal (X) causa causalmente a otra serie temporal (Y), entonces las variaciones en X deberían proporcionar información para predecir las variaciones en Y.

La hipótesis nula(Ho) en la prueba de causalidad de Granger es que la serie temporal X no causa causalmente a la serie temporal Y.

\[H_o: \beta\ yx_1 = \beta\ yx_2 = \beta\ yx_3 =...=\beta\ yx_p = 0\]

La hipótesis Alternativa (H1) es que la serie temporal X sí causa causalmente a la serie temporal Y.

\[H_o: \beta\ yx_1 = \beta\ yx_2 = \beta\ yx_3 =...=\beta\ yx_p \neq 0\]

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

Para llevar a cabo una prueba de causalidad de Granger en R, se puede emplear la función grangertest() del paquete lmtest, la cual sigue la siguiente sintaxis:

grangertest(y ~ x, order = k, data = data)

Argumentos:

y: La serie temporal que se supone es causalmente anterior.

x: La serie temporal que se supone es causalmente posterior.

order: El orden máximo de rezago a incluir en el modelo. Especifica cuántos períodos de tiempo hacia atrás se deben considerar al construir el modelo.

data: El conjunto de datos que contiene las variables y y x.

Estadístico de prueba

Para la hipótesis nula, aplicamos la prueba F dada por:

\[\frac{(SCR_R - SCR_{NR})/m}{SCR_{NR} / (n-k)}\]

Sigue la distribución F con m y (n - k) grados de libertad. En el presente caso, m es igual al número de términos rezagados de X, y k es el número de parámetros estimados en la regresión no restringida.

Ejemplo de salida que genera R

tsData <- EuStockMarkets[, 1:2]
library(lmtest)
# Prueba de Granger
resultado_granger <- grangertest(DAX ~ SMI, order = 3, data = tsData)
summary(resultado_granger)
##      Res.Df           Df           F             Pr(>F)        
##  Min.   :1850   Min.   :-3   Min.   :8.497   Min.   :1.32e-05  
##  1st Qu.:1851   1st Qu.:-3   1st Qu.:8.497   1st Qu.:1.32e-05  
##  Median :1852   Median :-3   Median :8.497   Median :1.32e-05  
##  Mean   :1852   Mean   :-3   Mean   :8.497   Mean   :1.32e-05  
##  3rd Qu.:1852   3rd Qu.:-3   3rd Qu.:8.497   3rd Qu.:1.32e-05  
##  Max.   :1853   Max.   :-3   Max.   :8.497   Max.   :1.32e-05  
##                 NA's   :1    NA's   :1       NA's   :1

El estadístico de prueba F, representado por la letra F, tiene un valor de 8.497, y el valor p asociado a este estadístico es Pr (> F) 1.32e-05.

Dado que el valor p es inferior a 0.05, podemos rechazar la hipótesis nula de la prueba. Por lo tanto, podemos inferir que la información contenida en los valores de la serie SMI es significativa para predecir los valores futuros de la serie DAX.

Criterio de decisión

El criterio de decisión para determinar si se debe o no rechazar la hipótesis nula es:

Si el valor p-value es menor o igual a un nivel de significancia predefinido (α), entonces se rechaza la hipótesis nula (H0).

p_value ≤ α

Si el valor p-value es mayor que α, entonces no se rechaza la hipótesis nula (H0).

p_value>α

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

Interpretación del rechazo:

Se dispone con evidencia suficiente que respalda la afirmación de que la serie temporal identificada como causalmente anterior ejerce una influencia significativa en la serie temporal que se presume como causalmente posterior. En consecuencia, se puede establecer la existencia de causalidad de Granger.

Interpretación de no rechazo:

No se cuenta con evidencia suficiente para sostener que la serie temporal identificada como causalmente anterior ejerza un impacto significativo en la serie temporal que se presume causalmente posterior. En consecuencia, no se puede establecer la existencia de causalidad de Granger.

Implementación de un ejemplo

set.seed(123)
datos <- data.frame(
  tiempo = 1:100,
  serie_x = rnorm(100),
  serie_y = 0.5 * lag(rnorm(100)) + rnorm(100))
library(lmtest)
# Prueba de Granger
resultado_granger <- grangertest(serie_x ~ serie_y, order = 3, data = datos)
summary(resultado_granger)
##      Res.Df            Df           F             Pr(>F)      
##  Min.   :90.00   Min.   :-3   Min.   :1.038   Min.   :0.3798  
##  1st Qu.:90.75   1st Qu.:-3   1st Qu.:1.038   1st Qu.:0.3798  
##  Median :91.50   Median :-3   Median :1.038   Median :0.3798  
##  Mean   :91.50   Mean   :-3   Mean   :1.038   Mean   :0.3798  
##  3rd Qu.:92.25   3rd Qu.:-3   3rd Qu.:1.038   3rd Qu.:0.3798  
##  Max.   :93.00   Max.   :-3   Max.   :1.038   Max.   :0.3798  
##                  NA's   :1    NA's   :1       NA's   :1

Este código en R está creando un conjunto de datos de ejemplo con dos series temporales, serie_x y serie_y, a lo largo de 100 periodos.

set.seed(123): Establece una semilla para la generación de números aleatorios.

data.frame: Se crea un dataframe llamado datos

-La columna tiempo contiene valores de 1 a 100, que representan el tiempo o los periodos de observación.

-La columna serie_x se llena con valores aleatorios generados por rnorm(100), que sigue una distribución normal estándar.

-La columna serie_y se calcula como 0.5 veces el valor retardado de la serie serie_x más un término de error (rnorm(100)).

resultado_granger <- grangertest(serie_x ~ serie_y, order = 3, data = datos): Realiza la prueba de causalidad de Granger. Se especifica que serie_x es la serie causalmente anterior y serie_y es la serie causalmente posterior. El parámetro order se establece en 3, lo que significa que se incluirán lags hasta el orden 3 en el modelo. datos es el conjunto de datos que contiene ambas series temporales.

summary(resultado_granger): Muestra un resumen del resultado de la prueba de Granger.

INTERPRETACIÓN:

No disponemos de evidencia suficiente para afirmar que la serie serie_y tenga una influencia causal significativa sobre la serie serie_x, dado que el valor p asociado es superior a 0.05. La carencia de significancia estadística sugiere que no existe una relación causal significativa en el marco de la prueba de Granger.