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

1.1 Propósito de la prueba

¿Para que se usa?

La prueba de Dickey–Fuller se utiliza para determinar si una serie de tiempo es estacionaria o si presenta una raíz unitaria, lo cual indica que la serie sigue un comportamiento altamente persistente y no vuelve a un promedio estable (Dickey & Fuller, 1979). En términos prácticos, sirve para identificar si los datos deben ser diferenciados antes de aplicar modelos como ARIMA, ya que trabajar con series no estacionarias puede producir regresiones espurias, es decir, resultados estadísticamente engañosos (Gujarati & Porter, 2009). Por esta razón, la prueba ADF se usa como un paso inicial en el análisis de series de tiempo para asegurar que los modelos que se construyan posteriormente sean válidos y confiables (Enders, 2015).

1.2 Hipótesis de la prueba

La prueba de Dickey y Fuller parte del siguiente modelo general para evaluar la presencia de una raíz unitaria en una serie temporal:

\[Δyt​=α+βt+γyt−1​+i=1∑k​δi​Δyt−i​+εt​ \]

El parámetro clave es \(γ\), ya que determina si existe o no un mecanismo de retorno hacia el equilibrio.

Las hipótesis de la prueba son:

La serie tiene una raíz unitaria; es no estacionaria: \[H_0: γ = 0\]

La serie no tiene raíz unitaria; es estacionaria: \[H_0: γ < 0\]

Justificación de las hipótesis:

  • Bajo la hipótesis nula \(H_0\), el parámetro \(𝛾=0\) implica que no existe una fuerza de corrección hacia la media. En este caso, el proceso sigue un camino aleatorio, por lo que la serie es no estacionaria.

  • Bajo la hipótesis alternativa \(H_1\), el valor \(γ<0\) indica un mecanismo de retorno: cuando \(yt−1\) se aleja del equilibrio, la diferencia \(Δyt​\) lo empuja de vuelta. Esto caracteriza a un proceso estacionario.

1.3 Sintaxis de implementación en R

La prueba de Dickey & Fuller se implementa en R utilizando la función adf.test() del paquete tseries. La sintaxis básica es:

library(tseries)

adf.test(serie,
         alternative = "stationary",
         k = trunc((length(serie)-1)^(1/3)))

Explicación de argumentos

  • serie: Objeto numérico que contiene los valores de la serie temporal que se desea analizar. Puede ser un vector o un objeto ts.

  • alternative = “stationary”: Define la hipótesis alternativa que se evalúa en la prueba. En el contexto del ADF, “stationary” indica que: \(H_1\): la serie es estacionaria

  • k: Número de rezagos incluidos en la prueba para controlar autocorrelación en los errores. Por defecto, adf.test() usa la regla: \(k=⌊(T−1)1/3⌋\) donde \(𝑇\) es el número de observaciones.

Este parámetro es importante porque incluir pocos rezagos puede dejar autocorrelación residual, pero incluir demasiados reduce poder estadístico.

1.4 Estadístico de prueba

La prueba de Dickey y Fuller calcula un estadístico que contrasta la hipótesis nula de presencia de raíz unitaria. Este estadístico se obtiene al estimar el coeficiente \(𝛾\) γ del modelo:

\(Δyt​=α+βt+γyt−1​+i=1∑k​δi​Δyt−i​+εt​\)

El estadístico ADF es:

\(ADF=γ ̂/(SE(y ̂))\)

Es decir, es un estadístico t modificado para el contexto de raíz unitaria. En la salida de R, aparece de la siguiente manera:

Dickey-Fuller = -3.0521

Este valor es el estadístico de prueba ADF, y se compara con los valores críticos correspondientes (que R no muestra directamente en adf.test(), pero que están implícitos en el p-value calculado).

Interpretación general:

  • Valores más negativos del estadístico indican mayor evidencia contra la hipótesis nula \(H_0\)

  • Si el estadístico es menor (más negativo) que los valores críticos, se rechaza la hipótesis de raíz unitaria.

1.5 Criterio de decición

El criterio de decisión en la prueba de Dickey & Fuller se basa en el valor p (p-value) que R devuelve en la salida del comando adf.test(). La salida típica muestra algo como:

p-value = 0.0321
alternative hypothesis: stationary

El criterio es el siguiente:

  • Si el \(p-value < α\) (comúnment \(α = 0.05\)):

Rechazar \(H_0\)

Existe evidencia estadística suficiente para concluir que la serie no tiene raíz unitaria y, por tanto, es estacionaria.

  • Si el \(p-value ≥ α\):

No rechazar \(H_0\)

No existe evidencia suficiente para descartar la presencia de raíz unitaria, por lo que la serie se considera no estacionaria.

Esto corresponde directamente con la hipótesis alternativa que se especifica en la función:

alternative = "stationary"

R reporta el valor p bajo esa alternativa, de manera que:

  • Un p-value pequeño respalda la estacionariedad.

  • Un p-value grande respalda la presencia de raíz unitaria.

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

La prueba de Dickey & Fuller evalúa si la serie temporal contiene una raíz unitaria. La decisión se basa en el valor p obtenido en la salida de R.

a) Rechazo de la Hipótesis Nula

Si el valor p es menor que el nivel de significancia (\(α=0.05\), usualmente): - Rechazar \(H_0:γ=0\)

Interpretación económica y estadística:

  • La serie no tiene raíz unitaria.
  • El parámetro \(𝛾\) γ es significativamente menor que cero. -La serie presenta un mecanismo de corrección hacia la media. -Conclusión: la serie es estacionaria en niveles.

Esto implica que:

  • Su media y varianza son constantes en el tiempo.
  • Puede utilizarse directamente en modelos econométricos sin generar relaciones espurias.

b) No rechazo de la Hipótesis Nula

Si el valor p es mayor o igual a 0.05:

  • No rechazar \(H_0:γ=\)

Interpretación económica y estadística:

  • No hay evidencia suficiente para afirmar que la serie es estacionaria.
  • Se considera que la serie sí tiene raíz unitaria.
  • Conclusión: la serie es no estacionaria.

1.6 Implementación de ejercicio

Se presenta un ejemplo completo de cómo aplicar la prueba de Dickey & Fuller en R, utilizando una serie simulada. Se muestran dos casos: una serie no estacionaria (con raíz unitaria) y una serie estacionaria.

Serie con raíz unitaria (no estacionaria)

Creamos una serie generada por un proceso de caminata aleatoria:\(y_t=y_t−1+ε_t\)… Este tipo de proceso tiene raíz unitaria por construcción.

library(tseries)
## Warning: package 'tseries' was built under R version 4.4.3
set.seed(123)

# Serie no estacionaria (camino aleatorio)
y1 <- cumsum(rnorm(200))

# Aplicar prueba ADF
adf.test(y1)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  y1
## Dickey-Fuller = -2.2954, Lag order = 5, p-value = 0.4524
## alternative hypothesis: stationary

Conclusión: No existe evidencia estadística suficiente para rechazar la hipótesis nula de raíz unitaria. Por lo tanto:

  • La serie \(𝑦_1\) sí tiene raíz unitaria.
  • La serie es no estacionaria en niveles.

Serie estacionaria Ahora se genera una serie estacionaria usando un proceso AR(1) con coeficiente menor a 1 en valor absoluto: \(y_t=0.6y_t−+ε_tY\)

set.seed(123)

# Serie estacionaria AR(1)
y2 <- arima.sim(list(order = c(1,0,0), ar = 0.6), n = 200)

# Aplicar prueba ADF
adf.test(y2)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  y2
## Dickey-Fuller = -4.9753, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary

Conclusión:

  • Existe suficiente evidencia estadística para rechazar la hipótesis nula de raíz unitaria.
  • Por tanto, la serie no tiene raíz unitaria, es decir, es estacionaria en niveles.

2. Cointegración en el enfoque de Johansen

La prueba de cointegración de Soren Johansen (1988, 1991) permite determinar si existe una o más relaciones de equilibrio a largo plazo entre un conjunto de series temporales integradas de orden uno (I(1)). Estas relaciones son conocidas como vectores de cointegración.

2.1 Propósito de la prueba

¿Para qué se usa?

El objetivo del método de Johansen es identificar si varias series temporales no estacionarias comparten una relación de equilibrio estable en el largo plazo.

En términos matemáticos, si existe un vector no trivial:

\[ β≠0... tal que ... Zt​=β′Xt​∼I(0) \] entonces las series que componen \[Xt\] estan cointegradas.

2.2 Hipótesis de la prueba

El método de Johansen evalúa el rango de la matriz II dentro del modelo VECM: \[ΔXt​=ΠXt−1​+i=1∑k−1​Γi​ΔXt−i​+εt​\] donde:

  • Si \[Π=0⇒𝑟=0\]: no hay cointegración.
  • Si \[0<𝑟<𝑛\]: existe cointegración.
  • Si \[𝑟=𝑛\]: todas son estacionarias.

Johansen propone dos pruebas: Trace y Máximo Eigenvalor.

  1. Trace Test. \[H0:r=r^0\] \[𝐻1:𝑟>r0\] Evalúa si el número de vectores de cointegración es mayor al propuesto en \[H0\]

  2. Maximum Eigenvalue Test. \[H0:r=r0\] \[𝐻1:𝑟=𝑟0+1\] Compara si existe exactamente un vector adicional de cointegración.

2.3 Sintaxis de implementación en R

La prueba de Johansen se realiza mediante la función ca.jo() del paquete urca. La función es:

Prueba_Johansen <- ca.jo(
  datos,
  type = "trace",
  ecdet = "const",
  K = 2
)

Explicación de los argumentos:

  1. datos: Matriz o data frame con las series temporales I(1).

  2. type: “trace” o “eigen” para el tipo de prueba.

  3. ecdet: Determinísticos incluidos:

  • “none” sin constantes

  • “const” constante dentro del vector de cointegración

  • “trend” tendencia determinística

  1. K: Número de rezagos en el VAR. El VECM tendrá 𝐾−1

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

La salida típica de R muestra para el método Trace:

                 test   5pct   1pct
r ≤ 0 |  25.11   29.68  35.65
r ≤ 1 |   0.90   15.41  20.04

# El estadístico se compara contra los valores críticos entregados por R.

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

La regla es: \[ Rechazar H0 si estadıstico > valor crıtico\] Si el estadístico supera el valor crítico al 5%: - Se rechaza la hipótesis nula. - Existe evidencia de más cointegración que la establecida en \[H0\]

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

Si \[𝑟= 0\] : Las variables no están cointegradas.

Si \[𝑟= 1\] : Existe una relación estable de equilibrio.

Si \[𝑟> 1\]: Existen múltiples relaciones de largo plazo.

2.7 Implementación de un ejemplo.

# Se simulan dos series I(1) cointegradas artificialmente.

library(urca)
## Warning: package 'urca' was built under R version 4.4.3
set.seed(123)

# Simulación de dos series cointegradas

n <- 200
e1 <- rnorm(n)
e2 <- rnorm(n)

x1 <- cumsum(e1)
x2 <- 0.8 * x1 + e2 # x2 está cointegrada con x1

datos <- cbind(x1, x2)

# Johansen método Trace

Prueba_Trace <- ca.jo(
datos,
type = "trace",
ecdet = "const",
K = 2
)

summary(Prueba_Trace)
## 
## ###################### 
## # Johansen-Procedure # 
## ###################### 
## 
## Test type: trace statistic , without linear trend and constant in cointegration 
## 
## Eigenvalues (lambda):
## [1]  3.647929e-01  2.555981e-02 -1.993707e-18
## 
## Values of teststatistic and critical values of test:
## 
##           test 10pct  5pct  1pct
## r <= 1 |  5.13  7.52  9.24 12.97
## r = 0  | 94.98 17.85 19.96 24.60
## 
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
## 
##                x1.l2      x2.l2  constant
## x1.l2     1.00000000  1.0000000  1.000000
## x2.l2    -1.21151221  0.1084844 -2.022275
## constant -0.02178823 -1.8029024 60.630751
## 
## Weights W:
## (This is the loading matrix)
## 
##            x1.l2       x2.l2     constant
## x1.d -0.03308797 -0.05136114 1.291179e-19
## x2.d  0.85659561 -0.04279257 3.644968e-19

3.Causalidad en el sentido de Granger.

3.1 Propósito de la prueba

¿Para que se usa?

La causalidad de Granger se basa en el axioma fundamental de que “el pasado y el presente pueden causar el futuro, pero el futuro no puede causar el pasado”. Se dice que una variable X causa una variable Y, si en el tiempo t, la variable X ayuda a predecir la variable Y, es decir que la prueba de causalidad de Granger se utiliza para examinar si una serie temporal puede usarse para pronosticar otra.

3.2 Hipótesis de la prueba.

Hipotesis Nula(H0): La serie temporal X no causa que la serie temporal Y se cause a si misma en el sentido de Granger

\[H0:β1=β2=...=βi=0\]

El ¿porque? de la hipotesis nula: La idea es probar si los coeficientes de X en el modelo aportan informacion para predecir Y, o son “inutiles”

Hipotesis Alterna(H1): La serie temporal X causa que la serie temporal Y se cause a si misma en el sentido de Grager

\[H1:β1≠β2≠...≠βi≠0\]

El¿porque? de la hipotesis alterna: En la alternativa se presenta que al menos un coeficiente es diferente de cero esto quiere decir que uno o mas rezagos de X si ayudan a predecir a Y, entonces X si aporta informacion para predecir Y.

3.3 Sintaxis de implementación en R

En R podemos utilizar la funcion grangertest() del paquete lmtest para realizar una prueba de causalidad de Granger, haciendo uso de la siguiente sintaxis:

library(lmtest)

Prueba_de_Granger <- grangertest(X,Y, orden =1)

  • Donde X: Es la primera serie temporal

  • Y: Es el segundo conjunto de la serie temporal

  • orden: En la primera serie temporal, el numero de retardos a utilizar. El valor predeterminado es 1

3.4 Estadístico de prueba

La prueba de causalidad de Granger gerera un estadistico de prueba F, que aparece en la tabla de salida, este estadistico contrasta si los coeficientes rezagados de X aportan informacion para predecir Y.

3.5 Criterio de decisión

La prueba de causalidad de Granger tambien genera un valor p, con este podemos rechazar la hipotesis nula e inferir que la serie temporal X causa Granger a la serie temporal Y, si el valor es menor a un nivel de significancia particular (por ejemplo = 0.05). Generando el siguiente criterio de desicion:

\[Se Rechaza H0:P-value < 0.05\]

\[No se rechaza H0: P-value > 0.05\]

3.6 Interpretacion del rechazo, o no rechazo de la Hipotesis Nula de la prueba.

  • Si se rechaza H0 (P-value < 0.05), esto quiere decir que los rezagos de X si aportan informacion significativa para predecir Y, por lo tanto X causa Granger a Y, es decir, que existe evidencia a favor de una relacion predictiva desde X hacia Y.
  • Si no se rechaza H0 (P-value > 0.05), esto quire decir que los rezagos de X no mejoran la prediccion de Y, no hay evidencia de causalidad, es decir que la serie temporal X no causa a la serie temporal Y.

3.7 Implementacion de un ejemplo.

Utilizaremos el conjunto de datos EuStockMarkets, este conjunto de datos contiene los precios de cierre diarios de los principales indices bursatiles europeos, 1991-1998: Alemania DAX, Suiza SMI, Francia CAC y Reino Unido FTSE. Pero para este caso solo utilizaremos los valores del DAX y el SMI.

Cargamos los datos

data("EuStockMarkets")
Datos_ts <- EuStockMarkets[, c("DAX","SMI")]
head(Datos_ts)
##          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

Realizamos la prueba de causalidad de Granger

Utilizaremos la funcion grangerest() para realizar la prueba de causalidad de Granger y examinar si los valores de SMI predicen los valores de DAX en el futuro, realizaremos la prueba con tres retardos diferentes.

library(lmtest)
Prueba_Granger <- grangertest(DAX ~ SMI, order = 3, data = Datos_ts)
print(Prueba_Granger)
## Granger causality test
## 
## Model 1: DAX ~ Lags(DAX, 1:3) + Lags(SMI, 1:3)
## Model 2: DAX ~ Lags(DAX, 1:3)
##   Res.Df Df      F    Pr(>F)    
## 1   1850                        
## 2   1853 -3 8.4968 1.322e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

La salida nos muestra el valor de la prueba F, denotada por F =8.4968 y el valo p que corresponde al estadistico de pruba F, denotado por Pr(>F) =1.322e-05. Haciendo uso del criterio de decision propuesto anteriormente se rechaza la hipotesis nula de la prueba ya que el valor de p es menor que 0.05, es decir que los valores de SMI son valiosos para pronosticar los valores futuros de Dax.

Realizar la prueba de causalidad de Granger en sentido inverso

A pesar del rechazo de la hipotesis nula de la prueba, es posible de que exista causalidad inversa, en este ejemplo e posible que las variaciones en los valores de Dax influyan en las variaciones de los valores de SMI, para descartar ests posibilidad, debemos utilizar DAX como variable predictora y SMI como variable de de respuesta en la prueba de causalidad de Granger a la inversa.

library(lmtest)
Prueba_Inversa <- grangertest(SMI ~ DAX, order = 3, data = Datos_ts)
print(Prueba_Inversa)
## 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 valor P en este caso de la prueba es Pr(>F) =0.04689. Rechazamos la hipotesis nula porque de acuerdo al criterio de decision, esete valor es menor que el 0.05, es decir que los valores de DAX predicen los valores de SMI en el futuro. En consecuencia podemos concluir que conocer los valores de SMI es util para proyectar los valores de DAX en el futuro.