1. Prueba de raíz unitaria de Dickey & Fuller

1.1. Propósito de la prueba

Esta prueba sirve para saber si la serie de tiempo es estacionaria o no, es decir, si la serie de tiempo tiene una media y varianza constante. Esta prueba puede ser necesaria previa a realizar modelos ARIMA ya que este requiere que la serie sea estacionaria, en este caso se utilizaría como una comprobación inicial.

Demostración:

La prueba comienza con un proceso autorregresivo de orden uno \(AR (1)\), quiere decir que la serie de tiempo \((y_t)\) está en función de su valor pasado en un periodo \((y_{t-1})\). Formalmente se expresaría como:

\[y_t={\rho y}_{t-1}+u_t\]

Donde \(\rho\) es el parámetro autorregresivo, entonces de acuerdo a esto tenemos que:

Si \(\rho<1\)     La serie \(yt\) es estacionaria

Si \(\rho=1\)     La serie \(yt\) posee raíz unitaria o es no estacionaria

La idea de la prueba de raíz unitaria es estimar si \(\rho\) es estadísticamente igual a 1, de ser así, \(y_t\) es no estacionaria. Pero como lo plantea (gujarati) esta ecuación no se puede estimar por Mínimos Cuadrados ordinarios debido a un sesgo por ser raíz unitaria, debido a eso se debe transformar.

Al manipular la ecuación y restar \(y_{t-1}\) a ambos lados nos queda:

\[y_t-y_{t-1}={\rho y}_{t-1}-y_{t-1}+u_t\] \[∆yt=(ρ-1)y_{t-1}+u_t\] Ecuación regresión lineal simple: \[∆yt=δy_{t-1}+u_t\] \[donde\ \ \delta=\rho-1\]

Con esto ya podemos formular las hipótesis de la prueba

1.2. Hipótesis de la prueba.

Como nos interesa observar el parámetro autoregresivo las hipótesis de la prueba estaran formuladas sobre su comportamiento de la siguiente forma:

\(H_0\) : La serie \(y_t\) tiene una raíz unitaria o no es estacionaria

\(H_1\) : La serie \(y_t\) es estacionaria

Esto es equivlente a la formula anterior:

\(H_0\) : \(\delta = 0\) o \(\rho = 1\)

\(H_1\) : \(\delta \neq 0\) o \(\rho < 1\)

Cálculo

La prueba DF se estima de tres formas:

  1. \(y_t\) es una caminata aleatoria

\[\Delta y_t = {\delta y}_{t-1}+u_t\]

  1. \(y_t\) es una caminata aleatoria con rumbo o deriva

\[ \beta_1 + {\delta y}_{t-1}+u_t\]

  1. \(Y_t\) es una caminata aleatoria con deriva alrededor de una tendencia determinista

\[ \beta_1 + \beta_2t + {\delta y}_{t-1}+u_t\]

Donde \(t\) es el tiempo.

1.3. Sintaxis de implementación en R

La implementación en R es a travez de la librería urca() y la función dentro de ella llamada ur.df(), se hace de forma siguiente:

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

Donde:

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

  • type: Se reefiere al tipo de prueba, predeterminado “drift”

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

1.4. Estadístico de prueba

El estadistico utilizado en la prueba se denomina tau o comunmente como prueba Dickey-Fuller (DF). En R el estadístico aparece con ese mismo nombre a partir del cáculo con la función ur.df().

1.5. Criterio de decisión

El criterio de decición se basa en comparar el estadístico Dickey-Fuller realizado con R y la función ur.df() y el valor crítico de la tabla del estadistico. El investigador debe de elegirlo de acuerdo al nivel de significancia y el número de la muestra.

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

La Hipótesis nula \(H_0\) No se rechaza si el valor del estadístico de prueba Dickey-Fuller es mayor que el valor crítico. Diriamos entonces que la serie posee una raíz unitaria o no es estacionaria.

La hipótesis nula \(H_0\) se rechaza si el valor del estadístico de prueba Dickey-Fuller es menor que el valor crítico. En esta caso plantearimos que la serie es estacionaria.

1.7. Ejemplo

Implementamos un ejemplo de la prueba de raíz unitaria Dickey-Fuller en R utilizando datos de el Índice de Precios al Consumidos (IPC) de El Salvador a fin de mostrar los pasos descritos anteriormente.

Cargamos los paquetes a utilizar

library(readxl)
library(urca)
library(lubridate)
library(kableExtra)
library(dplyr)

Cargamos los Datos

datos <- read_excel("datos.xlsx")
datos$IPC %>% 
  head() %>% 
  kable(caption = "IPC de El Salvador", align = "c") %>% 
  footnote(general = "Elaboración propia en base al BCR") %>% 
  kable_minimal()
IPC de El Salvador
x
99.65
99.53
100.00
100.08
100.36
100.40
Note:
Elaboración propia en base al BCR

Crear las Series de tiempo

# Las observaciones son de enero del 2009 a septiembre del 2021
IPC.ts <- ts(datos$IPC, start = c(2009, 1), end = c(2021, 9), freq = 12)

Prueba de Dickey-Fuller

library(urca)
df.test <- ur.df(IPC.ts, 
                 type=c("drift"),
                 lags=0)
summary(df.test)
## 
## ############################################### 
## # 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 
## -0.99979 -0.24780 -0.01856  0.16941  2.91584 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)
## (Intercept)  1.149443   0.986476   1.165    0.246
## z.lag.1     -0.009508   0.009058  -1.050    0.296
## 
## Residual standard error: 0.4667 on 150 degrees of freedom
## Multiple R-squared:  0.007291,   Adjusted R-squared:  0.0006728 
## F-statistic: 1.102 on 1 and 150 DF,  p-value: 0.2956
## 
## 
## Value of test-statistic is: -1.0496 5.1501 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau2 -3.46 -2.88 -2.57
## phi1  6.52  4.63  3.81

Interpretar los resultados

Para un nivel de significancia del 5% el valor crítico es de -3.46 mientras que el valor del estadístico de prueba es de -1.049 por tanto se concluye:

Como el estadístico Dickey-Fuller es mayor que el valor crítico hay evidencia para no rechazar la hipótesis nula. La seríe de tiempo del IPC tiene una raíz unitaria, es decir, es no estacionaria.

2. Cointegración en el enfoque de Soren Johansen

2.1. Propósito de la prueba

La prueba nos permite analizar si dos o más series de tiempo pueden formar una relación de cointegración. La prueba es un análisis multivariado y también se utiliza cuando se tiene un conjunto de variables cuya relación lineal es estacionaria.

Johansen planteo 2 tipos de pruebas, la de eigenvalor máximo y la prueba de la traza.

El modelo de Johansen parte de un modelo autorregresivo vectorial (VAR) que se define como un modelo estadístico que se utiliza para capturar la relación entre múltiples cantidades a medida que cambian con el tiempo. El modelo lo iniciamos con una formula general VAR(p) sin deriva como sigue a continuación:

\[X_t= \mu + A_1X_{t-1}+...+A_pX_{t-p}+u_t\]

Donde:

\(\mu\) es la media de valores vectoriales de la serie

\(A_i\) Son las matrices de coeficientes para cada rezago

\(p\) Son los rezagos

\(u_t\) Es el termino de ruido blanco gaussiano (su función de densidad responde a una distribución normal)

A partir de aquí se forma un modelo de corrección de errores vectoriales (VECM) ahora con deriva:

\[ \Delta X_t = \mu+AX_{t-1} + F_1\Delta X_{t-1} +...+ F_p\Delta X_{t-p} + u_t\]

Donde:

\(\Delta X_t = X_t-X_{t-1}\) y es el operador de diferenciación

\(A\) Es la matriz de coeficientes para el primer rezago

\(F_i\) Son matrices para cada rezago diferenciado

Entonces la prueba de Soren Johansen verifica la situación de no cointegración que ocurre cuando la matriz \(A = 0\)

Y para lograr que las series de tiempo combinadas sean conjuntos estacionarios se requiere cumplir los requisitos de las Hipótesis planteadas a continuación.

2.2. Hipótesis de la prueba

Para lograr que las serie sean estacionales se requiere una descomposicion de los valores propios de \(A\). El rango de esta matriz viene representado por \(r\) la prueba de Johansen comprueba secuencialmente si este rango es igual a cero, uno o \(r=n-1\). donde \(n\) representa el número de series de tiempo que se tiene. Por lo tanto las hipótesis se plantean de la forma siguiente:

Hipótesis nula \(H_0\) : El rango de cointegración es \(r=0\)

Hipótesis Alternativa \(H_1\) : El rango de cointegración es \(r>0\)

Tenemos que:

\(H_0\) No existe cointegración

\(H_1\) Existe cointegración de 1 o más series.

2.3. Sintaxis de implementación en R

La implementación de la librería se hace a través de la librería urca() y su función ca.jo() quien implementa el procedimiento para las pruebas de Johansen.

library(urca)
ca.jo (x, 
       type = c ("eigen", "trace"), 
       ecdet = c ("none", "const", "trend"), 
       K = 2,
       spec = c ("largo plazo", "transitorio"), 
       temporada = NULL, 
       dumvar = NULL)

Donde

X: Es un conjunto o marco de datos

type: El tipo de prueba a realizar, eigenvalor máximo o traza

ecdet: Muestra si no hay intercepto (none), constante (const) o variable de tendencia (trend).

k: El número de retrasos de la serie

spec: Determina especificación de la serie,largo plazo o trasnsitorio, se refiere a la especificación del VECM.

temporada: Cuando se incluyen variables estacionales por periodos.

dumvar: Matriz de variables estacionales, si se incluyen.

2.4. Estadístico de prueba

El estadístico de prueba en la salida R se muestra como “Values of teststatistic and critical values of test:” donde estan los valores de \(r\) y los niveles de significancia. la columna test (primera columna) muestra el estadístico con el respectivo valor \(r\) al lado izquierdo.

2.5. Criterio de decisión

El criterio de decisión se basa en comparar el valor del estadístico \(r\) mostrado en la columna test de la prueba realizada por la función ca.jo() con los niveles de significancia que estan en las otras columnas mostradas como 10pct, 5pct, 1pct.

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

La hipótesis nula \(H_0\) Se rechaza si el valor del estadístico de prueba excede el nivel de significancia de 1, 5 o 10%. En esta caso diriamos que si hay cointegración de n series.

La hipótesis nula \(H_0\) No se rechaza si el valor del estadístico de prueba es menor al nivel de significancia de 1, 5 o 10%. En esta caso diriamos que no hay cointegración.

2.7. Ejemplo

Para este ejemplo tomaresmos los precios de las acciones de las economías australianas y canadienses en la base de datos proporcionada por el paquete quantmod.

Cargar los paquetes a utilizar

library(urca)
library(quantmod)
library(dplyr)
library(kableExtra)

Crear marco de datos

# Crear un Data Frame
datos <- data.frame(EWA_ajustado, EWC_ajustado, IGC_ajustado)
head(datos) %>% 
  kable(caption = "Precios ajustados de las canastas de acciones para las economías australiana y canadiense", align = "c") %>% 
  kable_minimal()
Precios ajustados de las canastas de acciones para las economías australiana y canadiense
EWA.Adjusted EWC.Adjusted IGE.Adjusted
10.92243 18.38087 24.63727
10.86269 18.25522 24.32120
10.92243 18.37347 24.67588
11.02698 18.45477 24.99919
11.01702 18.65432 25.51554
11.03195 18.50651 25.20428

realizar Prueba

johansen <- ca.jo(datos, 
             type="trace", 
             K=2, 
             ecdet="none", 
             spec="longrun")
summary(johansen)
## 
## ###################### 
## # Johansen-Procedure # 
## ###################### 
## 
## Test type: trace statistic , with linear trend 
## 
## Eigenvalues (lambda):
## [1] 0.011822777 0.008279694 0.002926140
## 
## Values of teststatistic and critical values of test:
## 
##           test 10pct  5pct  1pct
## r <= 2 |  4.39  6.50  8.18 11.65
## r <= 1 | 16.83 15.66 17.95 23.52
## r = 0  | 34.64 28.71 31.52 37.22
## 
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
## 
##                 EWA.Adjusted.l2 EWC.Adjusted.l2 IGE.Adjusted.l2
## EWA.Adjusted.l2       1.0000000        1.000000        1.000000
## EWC.Adjusted.l2      -1.0042716        2.965672        3.616259
## IGE.Adjusted.l2       0.2316032       -2.999586       -1.364331
## 
## Weights W:
## (This is the loading matrix)
## 
##                EWA.Adjusted.l2 EWC.Adjusted.l2 IGE.Adjusted.l2
## EWA.Adjusted.d    -0.006852148     0.003873692   -0.0011022273
## EWC.Adjusted.d     0.023436532     0.004446648   -0.0012937018
## IGE.Adjusted.d     0.028503580     0.010042731   -0.0009331143

Interpretación de los resultados

Tenemos que el estadístico de prueba en es de 34.64 mientras que el nivel de \(r=0\) a un nivel de significacnia del 1% es de 37.22 por lo tanto se concluye que:

Debido a que el estadístico es menor al valor \(r\) del 1% hay evidencia a favor de no rechazar la hipótesis nula. No existe cointegración en la series.

Para \(r<= 1\) Contra la hipótesis alternativa \(r > 1\) también proporciona evidencia clara para no rechazar la hipótesis nula dado que la estadística de prueba supera significativamente el nivel del 1%.

3. Causalidad en el sentido de Granger

3.1 Propósito de la prueba

Esta prueba es utilizada principalmente para poder predicir lo que puede suceder en el futuro y esto se hace con la utilización de datos que se tienen en el presente período.

La causalidad de Granger-Sims se basa en el axioma fundamental de que el pasado y el presente puede causar el futuro, pero el futuro no puede causar el pasado.

3.2 Hipótesis de la prueba

  • Hipotesis nula:\(H0:β2,1=β2,2=β2,3=0\)

La serie temporal X no causa que Y se cause a sí misma".

  • Hipotesis alternativa:\(H1:β2,1,β2,2,β2,3≠0\)

La serie temporal X hace que la serie temporal Y se cause a si misma con causa-Granger"

3.3 Sintaxis de implementación en R

En R, podemos usar la función grangertest() del paquete lmtest para realizar una prueba de causalidad de Granger, que tiene la siguiente sintaxis:

grangertest(X, 
            Y, 
            orden = 1)

Donde:

X: Esta es la primera serie de tiempo.

Y: El segundo conjunto de la serie temporal

Paso 1: Carga de datos.

Para comenzar con la prueba Granger, primero se cargan los datos.

Paso 2: Comprobacion de la estacionareidad.

Para probar la estacionariedad podemos utilizar dos pruebas fundamentales:

Prueba aumentada de Dickey Fuller (ADF) para raíces unitarias.

Para ello se puede hacer uso del paquete GAUSS para probar las raices unitarias, el cual contiene la libreia tsplib. Cargando esta libreia y haciendo uso del comando adf kpss obtendremos los resultados de la prueba.

Si los datos cumples con el requisito de estacionariedad se procede a realizar la prueba de Grange ; si los datos no cumplen con este requisito habra que transformar los datos utilizados.

Paso 3: Prueba de casualidad de Granger

Suponiendo que los datos cumplen con el requisito de estacionareidad procedemos a aplicarle a nuestra data la prueba de Granger.

Ae hara uso de la funcion grangertest() para examinar si los valores sigen una casualidad de Granger, siguiendo el orden de las variables: X, Y.

Esta prueba arrojara 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.

Paso 4: Prueba de casualidad de Granger a la inversa

Esto se hace porque es posible que se este produciendo una casualidad inversa. Se hace siguiendo el mismo prosedimiento solo que poniendo las variables estudiadas en diferente orden: Y, X.

3.4 Estadístico de prueba

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 designificación (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.

Estadístico F La prueba generalmente se realiza en la prueba wald o F.

\[F = \frac{\frac{RSS_1-RSS_2}{P_2-P_1}}{\frac{RSS_2}{n-p_2}}\]

3.5 Criterio de decisión

Criterio de decisión:

Rechazar \(H_0\) si \({P_{value}}\le{\alpha}\)

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

Si \(P_{value}\le\alpha\) se rechaza la hipótesis nula por lo tanto decimos que la serie temporal X hace que la serie temporal Y se cause asi misma con Causa-Granger.

Si \(P_{value}\geq\alpha\) no se rechaza la hipótesis nula por lo tanto decimos que la serie temporal X no causa que la serie temporal Y se cause asi misma.

3.7 Ejemplo

Preparar paquetes a utilizar

library(lmtest) 
library(kableExtra)
library(dplyr)

Preparar los Datos

data("EuStockMarkets")
datos <- EuStockMarkets[, 1:2]
head(datos) %>% 
  kable(caption = "Precios diarios de cierre de los principales índices bursátiles europeos, 1991-1998", align = "c") %>% 
  kable_minimal()
Precios diarios de cierre de los principales índices bursátiles europeos, 1991-1998
DAX SMI
1628.75 1678.1
1613.63 1688.5
1606.51 1678.6
1621.04 1684.1
1618.16 1686.6
1610.61 1671.6

Realizar la prueba

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

Interpretación de los resultados

El estadístico de prueba es de 8.4968 mientras que el \(p_{value}\) es de aproximadamente 0 entonces conclueimos que:

Debido a que \(p_{value}\) es menor que 0.05 hay evidencia para rechazar la hipótesis nula por lo que concocer los valores de SMI sirve para pronosticar el futuro de DAX.

Prueba de causalidad de Granger a la inversa

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

Interpretación de los resultados

Debido a que \(p_{value}\) es menor que 0.05 hay evidencia a favor de rechazar la hipótesis nula por lo que los valores de DAX predicen los futuros valores de SMI

4. Bibliografía

Gujarati, D., & Porter, D. (2010). Econometrı́a (quinta edición). México: Editorial Mc. Graw Hill.
Pfaff, B. (2008). Analysis of integrated and cointegrated time series with r (Second). Springer. http://www.pfaffikus.de
Pfaff, Bernhard. (2016). Urca: Unit root and cointegration tests for time series data. https://CRAN.R-project.org/package=urca
QuantStart. (2021). Prueba de johansen para la cointegración. https://www.quantstart.com/articles/Johansen-Test-for-Cointegrating-Time-Series-Analysis-in-R/.
R Core Team. (2021). R: A language and environment for statistical computing. R Foundation for Statistical Computing. https://www.R-project.org/
R-bloggers. (2021). Granger causality test in r (with example). https://www.r-bloggers.com/2021/11/granger-causality-test-in-r-with-example/.
Ryan, J. A., & Ulrich, J. M. (2020). Quantmod: Quantitative financial modelling framework. https://CRAN.R-project.org/ package=quantmod
Wickham, H., François, R., Henry, L., & Müller, K. (2021). Dplyr: A grammar of data manipulation. https://CRAN.R-project.org/ package=dplyr
Zhu, H. (2021). kableExtra: Construct complex table with kable and pipe syntax. https://CRAN.R-project.org/ package=kableExtra