laboratorio 3 Cointegracion y Causalidad
Portada
Universidad de El Salvador
Facultad de ciencias económicas
Métodos para el análisis económico
Fecha: 04-12-2021
Grupo teorico #2
Integrantes
Apellido | Nombre | carnet |
---|---|---|
Canizales Avalos | Gerardo Javier | CA16014 |
Hernández Guardado | Walter Stanley | HG13005 |
1- Prueba de Raíz Unitaria de Dickey & Fuller
La prueba de raíces unitarias Dickey Fuller tiene como objetivo determinar si existen o no raíces unitarias en una serie de tiempo para comprobar si hay o no estacionariedad.
La estacionariedad en sentido hace referencia a la situación que se produce cuando la media y la varianza se mantienen constantes para la serie en cualquier periodo de tiempo. Por otro lado, la estacionariedad en sentido débil es aquella en donde la media es constante y la varianza es finita, dependiendo solamente de la amplitud del periodo con el cual se esté trabajando.
Se parte del modelo:
\[ Y_t=\mu+\varphi_1Y_{t-1}+\beta_t+\varepsilon_t \] Nos interesa saber si \[ \varphi_{1=1} \] es decir, si el modelo presenta raíz unitaria.
Prueba Dickey Fuller Aumentada
Es una versión de la prueba de Dickey Fuller para modelos de series de tiempo más complejos y extensos. Se reestructura de la siguiente manera:
Hipótesis de la prueba:
\[ H_0=\gamma=0 \] Hay presencia de una raíz unitaria, se acepta la hipótesis nula por lo que la serie es no estacionaria
\[ H_1=\gamma<0 \] La serie no tiene raíz unitaria, se rechaza la hipótesis nula por lo que es estacionaria.
Sintaxis de implementación en R
Adf.test: Prueba Dickey-Fuller aumentada
Realiza la prueba Dickey-Fuller aumentada para la hipótesis nula de una raíz unitaria de una serie de tiempo univariante “x”. No permite especificar la naturaleza de las series de tiempo. Sin embargo tiene la opción de especificar la hipótesis alternativa.
Código: adf.test (x, nlag=NULL, output=TRUE)
Argumento | Significado |
---|---|
X | Un vector numérico o una serie de tiempo univariante |
nlag | El orden de retraso con el valor predeterminado para calcular el estadístico de prueba. |
Output | Un valor lógico que indica imprimir los resultados de la prueba en la consola R. |
Ur.df: Prueba de raíz unitaria de Dickey-Fuller aumentada.
Realiza la prueba de raíz unitaria de Dickey-Fuller aumentada. Permite especificar las series de tiempo a las cuales se les aplicara la prueba DF. Código: ur.df (y, type = c (“none”, “drift”, “trend”), lags = 1, selectlags = c (“Fixed”, “AIC”, “BIC”))
Argumento | Significado |
---|---|
Y | Vector que se probara para una raíz unitaria |
Type | Tipo de prueba, ya sea “none”, “drift” o “trend” |
lags | Numero de rezagos de la variable endógena a incluir |
selectlags | La selección de retardos se puede lograr de acuerdo con los criterios de información de Akaike “AIC”o Bayes “BIC”. El número máximo de rezagos considerados lo establece “lags” |
Estadísticos de prueba
Dickey fuller:
\[ ∆Y_t=\mu+\gamma Y_{t-1}+\beta_y+\varepsilon_t \] Donde: \[Y_t=\ Y_t-\ Y_{t-1}\]
Donde: \[ \gamma=\varphi-1 \]
Prueba Dickey Fuller Aumentada
\[ ∆Y_t=\mu+\gamma Y_{t-1}+\beta_t+\sum_{i=1}^{k}\varphi_i∆Yt-i+\varepsilon_t \] Donde: \[Y_t=\ Y_t-\ Y_{t-1}\] Donde: \[ \gamma=\varphi-1 \] ### Ejemplo de aplicación de la prueba Dickey-Fuller en R
Ejemplo propuesto
library(AER)
library(tseries)
library(urca)
data("USMacroG")
<- USMacroG[2:204,9]
unemp_us plot(unemp_us)
adf.test(unemp_us)
##
## Augmented Dickey-Fuller Test
##
## data: unemp_us
## Dickey-Fuller = -2.4984, Lag order = 5, p-value = 0.3673
## alternative hypothesis: stationary
Si no se rechaza la hipotesis nula (p-valor > 0.05) la serie es no estacionaria y tiene raíz 1. si se rechaza la hipotesis nula (p-valor<0.05) la serie es estacionaria y tiene una raíz 0.
En nuestro caso observamos que (p=0.3673>0.05) por lo que la serie es no estacionaria y tiene raíz 1
2- Cointegración en el enfoque de Soren Johansen
Propósito de la prueba:
- Es aplicable a sistemas de ecuaciones
- Este método está basado en modelos VAR (Vectores autorregresivos)
- Es un test de máxima verosimilitud que requiere grandes volúmenes de datos (100 o más)
- Prueba la existencia de múltiples vectores de cointegración entre las variables
- Descansa fuertemente en la relación entre el rango de la matriz y sus raíces características
Metodología:
- Determinar el orden de integración a cada una de las series incluidas en el modelo.
- Especificar un Vector AutoRegresivo (VAR) con las sereis que resulten integradas de orden (1).
Seleccionar las Variables del Modelo
- Seleccionar las transformaciones de las variables, si las hubieren
- Determinar el retardo óptimo del VAR para asegurar que los residuos sean ruido blanco (white noise)
Especificar las variables determinísticas
- Aplicar el procedimiento de Máxima Verosimilitud al vector autorregresivo con el fin de determinar el rango (r) de cointegración del sistema:
- Prueba de la Traza
- Prueba del Eigenvalue Máximo (valor propio)
- Estimar el modelo Vector de Corrección de Errores
- Determinar la relación causal entre las variables del modelo
- Diagnóstico del VAR estimado
Hipótesis de la prueba
Johansen propuso 2 tipos de pruebas para R
La prueba eigenvalor máximo: Esta prueba está basada en la razón de máxima verosimilitud
\[ln\left[\frac{L_{MV}\left(r\right)}{L_{MV}\left(r+1\right)}\right]\] y se efectúa secuencialmente para:
\[ r=0,1,\ldots\ldots,n-1 \] Esta prueba coorbora la hipótesis nula de que el rango de cointegracion e “r” versus la alterna de que el rango de cointegración es r+1
La prueba de la traza: Esta prueba se basa en la razón de máxima verosimilitud
\[ln\left[\frac{L_{MV}\left(r\right)}{L_{MV}\left(n\right)}\right]\] y es efectuada secuencialmente para:
\[ r=n-1,\ldots\ldots,1,0 \] Esta prueba comprueba la hipótesis nula de que el rango de cointegración es “r” frente a la alternativa de que el rango de cointegración es “n”.
Sintaxis de implementación en R
Código: VECM (data, lag, r = 1, include = c (“const”, “trend”, “none”, “both”), beta = NULL, estim = c (“2OLS”, “ML”), LRinclude = c(“none”, “const”, “trend”, “both”), exogen = NULL)
Argumento | Significado |
---|---|
Data | Serie de tiempo multivariante |
Lag | Número de retrasos |
R | Número de relaciones cointegradas |
Include | Tipo de regresores deterministas a incluir |
Beta | Solo para VECM: valor de cointegración impuesto. |
estim | Tipo de estimador: 2OLSpara el método de dos pasos o ML para Johansen MLE |
LRinclude | Tipo de regresores deterministas a incluir en la relación de largo plazo. También puede ser una matriz con regresores exógenos |
exogen | Inclusión de variables exógenas (la primera fila es la primera = valor más antiguo). Tiene el mismo tamaño que los datos (luego se corta automáticamente) o que la muestra final. |
Estadístico de prueba
Prueba de Eigenvalor máximo:
\[\ell_{r+1}-\ell_r=-\frac{T}{2}\ln(1-\lambda_{r+1})\] Prueba de la traza:
\[\ell_A-\ell_0=-\frac{T}{2}\sum_{i=r+1}^{n}\log{(1-\lambda_i)}\]
Ejemplo de aplicación de la prueba de Soren Johansen en R
Ejemplo propuesto
library(Quandl)
library(tseries)
<- Quandl("FRED/MCOILWTICO", type ="ts", collapse = "monthly", start_date = "1995-01-01", end_date = "2017-12-01")
Poil <- Quandl("FRED/GASREGCOVM", type ="ts", collapse = "monthly", start_date = "1995-01-01", end_date = "2017-12-01")
Pgas
<- log(Poil)
LPoil <- log(Pgas)
LPgas
library(vars)
<- cbind(LPoil, LPgas)
v1 <- VARselect(v1, type = "trend")
var <- var$selection["SC(n)"]
nlags <- ca.jo(v1, ecdet = "trend", type = "trace", K=nlags, spec = "transitory", season = 12)
v1.CA 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.
<- ca.jo(v1, ecdet = "trend", type = "eigen", K=nlags, spec = "transitory", season = 12)
v1.CA 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
3- Causalidad en el sentido de Granger
El test de causalidad de Wiener-Granger, o causalidad de Granger, es una prueba estadística empleada para determinar si una serie temporal puede predecir a otra. Para ello se basa en la idea de que si una serie temporal X causa otra Y, los modelos de Y en los que se emplean datos retrasados de X e Y deben funcionar mejor los basados únicamente en datos retrasados de Y. Permitiendo identificar en series temporales en las que se observa una correlación que variable antecede a la otra.
Hipótesis de la prueba
De modo más general, como el futuro no puede predecir el pasado, si la variable X (a la manera de Granger) causa la variable Y, los cambios en X deben preceder a los cambios en Y. Por consiguiente, en una regresión de Y sobre otras variables (con sus propios valores pasados), si incluimos valores pasados o rezagados de X y esto mejora significativamente la predicción de Y, podemos decir que X (a la manera de Granger) causa Y. Aplica una definición similar si Y (a la manera de Granger) causa X.
Los pasos comprendidos en la prueba de causalidad de Granger son los siguientes.
- A partir de la regresión, obtenga la suma de cuadrados residuales restringida, SCRR.
- Ahora efectúe la regresión con los términos rezagados M. apartir de esta regresión, obtenga la suma de cuadrados residuales no restringida, SCRNR.
- La hipótesis nula es
\[ H0:\propto_1=0,i=1,2,...,n \] es decir, los términos rezagados de M no pertenecen a la regresión.
- Para probar esta hipótesis, aplicamos la prueba F
\[ F=\frac{\left({\rm SCR}_R\ -\ {\rm SCR}_{NR}\right)/m}{{\rm SCR}_{NR}/(n-k)} \] que sigue la distribución F con m y (n − k) gl. En el presente caso, m es igual al número de términos rezagados de M, y k es el número de parámetros estimados en la regresión no restringida.
- Si el valor F calculado excede al valor F crítico en el nivel seleccionado de significancia, rechazamos la hipótesis nula, en cuyo caso los términos rezagados de M pertenecen a la regresión.
Ejemplo de aplicación de la prueba de Granger en R
Ejemplo 1 Proporcionado
Esta prueba genera una estadística de prueba F junto con un valor p.
Podemos rechazar la hipótesis nula e inferir que la serie de tiempo X Granger causa la serie de tiempo Y si el valor p es menor que un nivel de significancia particular (por ejemplo, = .05).
En R, podemos usar la función grangertest () del paquete lmtest para realizar una prueba Granger-Causality, que tiene la siguiente sintaxis:
grangertest ( X, Y, orden = 1 ) dónde:
X: Esta es la primera serie temporal.
Y: el segundo conjunto de la serie temporal
orden: en la primera serie de tiempo, el número de retrasos a utilizar. El valor predeterminado es 1.
El siguiente ejemplo paso a paso demuestra cómo utilizar esta función en la práctica.
Paso 1: Cargar datos
## Carga de la data
<- EuStockMarkets[, 1:2]
tsData
## Ver las primeras seis filas del conjunto de datos
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
A continuación, usaremos la función grangertest () para ejecutar una prueba de Causalidad de Granger para examinar si los valores de SMI predicen los valores de DAX en el futuro. Realizaremos la prueba con tres rezagos diferentes:
## 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 1.322e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
El estadístico de prueba F se denota con la letra F igual a 8.4968 y el valor p que corresponde al estadístico de prueba F es Pr (> F) 1.322e-05.
Podemos rechazar la hipótesis nula de la prueba porque el valor p es menor que 0.05 e inferir que conocer los valores de SMI es valioso para pronosticar los valores futuros de DAX.
Ejemplo 2 propuesto
if(!require("quantmod",quietly = TRUE))
install.packages("quantmod",dependencies = TRUE, repos = "https://cloud.r-project.org")
Para realizar esta prueba, se requerirá el paquete lmtest, como ya se hizo en ejemplo anterior
grangertest(chicken ~ egg, order = 3, data = ChickEgg)
## Granger causality test
##
## Model 1: chicken ~ Lags(chicken, 1:3) + Lags(egg, 1:3)
## Model 2: chicken ~ Lags(chicken, 1:3)
## Res.Df Df F Pr(>F)
## 1 44
## 2 47 -3 5.405 0.002966 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
grangertest(egg ~ chicken, order = 3, data = ChickEgg)
## Granger causality test
##
## Model 1: egg ~ Lags(egg, 1:3) + Lags(chicken, 1:3)
## Model 2: egg ~ Lags(egg, 1:3)
## Res.Df Df F Pr(>F)
## 1 44
## 2 47 -3 0.5916 0.6238
En el primer caso del numero de huevos determinante del numero de gallinas, el valor p es 0.002966 que es menor que el valor crítico, por lo que rechazamos la hipótesis nula y decimos que el numero de gallinas sí dependen del de los huevos.
En el segundo caso de gallina causante del numero de huevos, el valor p es 0,6238, que está por encima del valor crítico, por lo que no podemos rechazar la hipótesis nula de que los huevos pueden no depender del numero de las gallina.