En econometría, las regresiones de series de tiempo se ajustan con el método de Mínimos Cuadrados Ordinarios (MCO), siempre que esta esté almacenada en un objeto de tipo data.frame, lo cual no siempre es el caso en las series de tiempo. Las series de tiempo se suelen almacenar en objetos de tipo, por ejemplo, ts, las cuales contienen un vector o matriz con las series de tiempo, con algunos atributos adicionales, como la fecha de inicio, de final y la periodicidad de la serie. Estos objetos, son sumamente útiles para trabajar con series de tiempo, sin embargo, al usar MCO, la inclusión de los rezagos no se pueden especificar de manera directa en el modelo. Esto se puede solucionar con el uso del paquete dynlm, que permite la inclusión de diferencias y rezagos en el modelo. Considere, por ejemplo el modelo autorregresivo distribuido descrito por \[ y_t-y_{t-1}=\beta_0+\beta_1(y_{t-1}-y_{t-2})+\beta_2x_{t-4}+\varepsilon. \]

Este modelo se puede trabajar en R como d(y)~L(d(y))+L(x,4). Para hacer un ejemplo, tomaremos los datos de Greene (2003, cap. 8), que se pueden descargar de la base de datos de la biblioteca AER, del libro Applied Econometrics with R. Las siguientes líneas de código instalan el paquete si es necesario y lo cargan en R.

#if (!require("AER")) install.packages("AER") # Descarga el paquete "AER" si no está ya descargado.
library("AER") # Alternativamente, se puede abrir la pestaña "Packages en el recuadro de abajo a la izquierda y palomear el recuadro de AER"

En este paquete se encuentra la base de datos USMacroG, que tiene formato de serie de tiempo ts. Esta base contiene datos de 1950 al año 2000. La función plot() en series de tiempo de este tipo, generan automáticamente un gráfico de línea, que nos permite observar la evolución de la serie en el tiempo. Visualizaremos el ingreso disponible en dpi y consumo consumption.

data("USMacroG")
plot(USMacroG[, c("dpi", "consumption")], lty = c(3,1), plot.type = "single", ylab ="")
legend("topleft", legend = c("ingreso","consumo"), lty = c(3,1), bty = "n") # Esta linea sirve para colocar la leyenda en la esquina superior izquierda

Se consideran dos modelos, \[ \mbox{consumption}_t = \beta_0+\beta_1\mbox{dpi}_t+\beta_2\mbox{dpi}_{t-1}+\varepsilon_t \] \[ \mbox{consumption}_t = \beta_0+\beta_1\mbox{dpi}_t+\beta_2\mbox{consumption}_{t-1}+\varepsilon_t \]

En el primer modelo (modelo de rezago distribuido), el consumo responde a los cambios en el ingreso de hasta dos periodos, mientras que en el segundo (modelo autorregresivo de rezago distribuido), los efectos en los cambios en los ingresos persisten gracias a la especificacion autorregresiva. Estos modelos se pueden especificar de la siguiente manera

#if (!require("dynlm")) install.packages("dynlm") # Descargar el paquete, si se requiere
library(dynlm) # Cargar el paquete en R
cons_lm1 <- dynlm(consumption ~ dpi + L(dpi), data = USMacroG)
cons_lm2 <- dynlm(consumption ~ dpi + L(consumption), data = USMacroG)

Estos modelos se guardan en las variables cons_lm1 y cons_lm2 (o el nombre que nosotros les hayamos asignado) igual a las que se generan con la función lm(). Se adiciona en el reporte el periodo de la muestra

summary(cons_lm1)
## 
## Time series regression with "ts" data:
## Start = 1950(2), End = 2000(4)
## 
## Call:
## dynlm(formula = consumption ~ dpi + L(dpi), data = USMacroG)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -190.02  -56.68    1.58   49.91  323.94 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -81.07959   14.50814  -5.589 7.43e-08 ***
## dpi           0.89117    0.20625   4.321 2.45e-05 ***
## L(dpi)        0.03091    0.20754   0.149    0.882    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 87.58 on 200 degrees of freedom
## Multiple R-squared:  0.9964, Adjusted R-squared:  0.9964 
## F-statistic: 2.785e+04 on 2 and 200 DF,  p-value: < 2.2e-16

El segundo modelo logra un mejor ajuste, aunque el valor del rezago en el consumo es significativo

summary(cons_lm2)
## 
## Time series regression with "ts" data:
## Start = 1950(2), End = 2000(4)
## 
## Call:
## dynlm(formula = consumption ~ dpi + L(consumption), data = USMacroG)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -101.303   -9.674    1.141   12.691   45.322 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     0.535216   3.845170   0.139    0.889    
## dpi            -0.004064   0.016626  -0.244    0.807    
## L(consumption)  1.013111   0.018161  55.785   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 21.52 on 200 degrees of freedom
## Multiple R-squared:  0.9998, Adjusted R-squared:  0.9998 
## F-statistic: 4.627e+05 on 2 and 200 DF,  p-value: < 2.2e-16

La suma de los residuos al cuadrado se puede usar con la función deviance(), en el caso del primer modelo esta es 1534001, y en el segundo de 92644.15. Es posible visualizar estos residuales:

plot(merge(as.zoo(USMacroG[,"consumption"]), fitted(cons_lm1),fitted(cons_lm2), 0, residuals(cons_lm1),residuals(cons_lm2)), screens = rep(1:2, c(3, 3)), lty = rep(1:3, 2), ylab = c("Valores ajustados", "Residuales"), xlab = "Time", main = "")
legend(0.05, 0.95, c("Observados", "cons_lm1", "cons_lm2"), lty = 1:3, bty = "n")

Note que los datos se cohercionan al tipo zoo(). Esta es una generalización de los datos de tipo ts.

Pruebas de acercamiento

Para discriminar entre dos modelos no anidados que compiten entre si, considere la siguiente prueba. El objetivo es reducir el problema de dos modelos no anidados a dos modelos anidados que podamos comparar. Considere el modelo que abarca todos los regresores:

cons_lmE <- dynlm(consumption ~ dpi + L(dpi) + L(consumption), data = USMacroG)

Ahora resta comparar realizar un comparativo entre los modelos. Si alguno de los modelos no es significativamente peor al modelo que abarca todos los regresores, mientras que el otro si lo es, esta prueba nos ayudará a seleccionar el primero.

anova(cons_lm1, cons_lmE, cons_lm2)
## Analysis of Variance Table
## 
## Model 1: consumption ~ dpi + L(dpi)
## Model 2: consumption ~ dpi + L(dpi) + L(consumption)
## Model 3: consumption ~ dpi + L(consumption)
##   Res.Df     RSS Df Sum of Sq        F    Pr(>F)    
## 1    200 1534001                                    
## 2    199   73550  1   1460451 3951.448 < 2.2e-16 ***
## 3    200   92644 -1    -19094   51.661 1.299e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

La primera prueba \(F\) compara al modelo cons_lm1 con cons_lmE y la segunda compara a cons_lmE con cons_lm2. Ambos modelos muestran un desempeño significativamente menor al del modelo que abarca todos los regresores, aunque el estadístico \(F\) es considerablemente menor en el modelo cons_lm2. Este mismo resultado se podría haber obtenido usando la función èncomptest(), que se vale de la prueba de Wald.

encomptest(cons_lm1, cons_lm2)
## Encompassing test
## 
## Model 1: consumption ~ dpi + L(dpi)
## Model 2: consumption ~ dpi + L(consumption)
## Model E: consumption ~ dpi + L(dpi) + L(consumption)
##           Res.Df Df        F    Pr(>F)    
## M1 vs. ME    199 -1 3951.448 < 2.2e-16 ***
## M2 vs. ME    199 -1   51.661 1.299e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Ejercicios

Considere un modelo en el que el consumo en el momento \(t\) depende de la diferencia entre el ingreso disponible y el consumo en el periodo anterior \(t-1\). Es decir, \[ \mbox{consumption}_t = \beta_0+\beta_1\mbox{dpi}_t+\beta_2(\mbox{dpi}_{t-1}-\mbox{comsumption}_{t-1})+\varepsilon_i, \qquad \varepsilon_t\sim\mathcal{N}(0,\sigma^2). \] Evalúe este modelo con respecto a los modelos anteriormente planteados.

Notas

Esta sección se vale del libro “Applied Econometrics in R”.