Aspectos avanzados de la regresión con series temporales

Multidimensionalidad y evaluación
Regresión múltiple
análisis de residuos
interpretación de coeficientes
Author

Javier Sánchez García

Published

January 1, 2007

Librerías requeridas:

Regresión múltiple

El modelo de regresión lineal se puede extender a \(k\) variables aleatorias independientes:

\[ Y_t = \beta_0 + \beta_1 X_{1,t} + \beta_2 X_{2,t} + \dots + \beta_k X_{k,t} + \epsilon_t \]

donde se mantienen las propiedades del modelo de regresión lineal simple o univariante. La recta de regresión es ahora un hiperplano.

library(Ecdat, quietly=TRUE)
library(dplyr, quietly=TRUE)
library(forecast, quietly=TRUE)
library(ggplot2, quietly=TRUE)
library(tseries, quietly=TRUE)
data(Macrodat) #Series temporales macroeconomicas de USA para 1959-2000
autoplot(Macrodat) + theme_classic()

lista1 <- lapply(Macrodat[,c(1,5,6)], diff) #Primeras diferencias (no log)
lhur1 <- lista1$lhur # Tasa de desempleo en primeras diferencias
kpss.test(lhur1)

    KPSS Test for Level Stationarity

data:  lhur1
KPSS Level = 0.088716, Truncation lag parameter = 4, p-value = 0.1
fygt11 <- lista1$fygt1 # Tipo de interés del bono a 1 año
kpss.test(fygt11)

    KPSS Test for Level Stationarity

data:  fygt11
KPSS Level = 0.082756, Truncation lag parameter = 4, p-value = 0.1
exruk1 <- lista1$exruk # Tipo de cambio dolar/libra a 1 año
kpss.test(exruk1)

    KPSS Test for Level Stationarity

data:  exruk1
KPSS Level = 0.047765, Truncation lag parameter = 4, p-value = 0.1
dat <- data.frame(lhur1, fygt11, exruk1) #Juntar en data frame
dat1 <- as.ts(dat, start =c(1959,1), end=c(2000,4)) #Hacer serie temporal
autoplot(dat1) + xlab("") + ylab("") + theme_classic() #Gráfico

modelom1 <- lm(exruk1 ~ fygt11 + lhur1) #Regresión del tipo de cambio sobre el tipo de interés del bono a 1 año y la tasa de desempleo
summary(modelom1) #Resumen

Call:
lm(formula = exruk1 ~ fygt11 + lhur1)

Residuals:
    Min      1Q  Median      3Q     Max 
-36.481  -3.713   0.852   4.072  18.741 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  -0.7891     0.6161  -1.281   0.2021  
fygt11       -1.1128     0.6005  -1.853   0.0656 .
lhur1         0.5274     2.0121   0.262   0.7936  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 7.957 on 164 degrees of freedom
Multiple R-squared:  0.02692,   Adjusted R-squared:  0.01506 
F-statistic: 2.269 on 2 and 164 DF,  p-value: 0.1067

El tipo de interés a 1 año del bono afecta negativamente al tipo de cambio dolar-libra. El efecto marginal es de \(-1.11\), y el coeficiente es significativo al 90% de significación. Al ser un modelo con dos variables independientes y una dependiente, la representación gráfica es en tres dimensiones.

x <- fygt11
y <- lhur1
z <- exruk1

fit <- lm(z ~ x + y)


# Plano de regresión:
grid.lines = 40
x.pred <- seq(min(x), max(x), length.out = grid.lines)
y.pred <- seq(min(y), max(y), length.out = grid.lines)
xy <- expand.grid( x = x.pred, y = y.pred)
z.pred <- matrix(predict(fit, newdata = xy), 
                 nrow = grid.lines, ncol = grid.lines)

# Valores estimados:
fitpoints <- predict(fit)

#Libreria:
library(plot3D, quietly=TRUE)

#Scatterplot:
scatter3D(x, y, z, pch = 18, cex = 1.5, colvar=FALSE, col="black", theta = 20, phi = 30, bty="u",
col.panel ="white", expand =0.5, col.grid = "snow",
xlab = "Interes", ylab = "Desempleo", zlab = "Tipo de cambio",  
surf = list(x = x.pred, y = y.pred, z = z.pred,  
facets = TRUE, col=ramp.col (col = c("red1","red4"), n = 100, alpha=0.7), fit = fitpoints),main = "")

Conforme aumenta el tipo de interés, disminuye el tipo de cambio.

Interpretación de coeficientes

Cuando se log-diferencia una serie, la escala de las variables, y, por tanto, de los coeficientes, varía. Si se tiene una variable aleatoria \(Y_t\) , se toman logaritmos \(\log(Y_t)\) , y se diferencia, se tiene:

\[ \Delta log(Y_t) = \log(Y_t) - \log(Y_{t-1}) = \log(\frac{Y_t}{Y_{t-1}}) \approx \frac{Y_t - Y_{t-1}}{Y_{t-1}} \]

es decir, se está trabajando con tasas de crecimiento o decrecimiento porcentuales o proporcionales. Por tanto, en el modelo de regresión lineal:

\[ \Delta log(Y_t) = \beta_0 + \beta_1 \Delta log(X_{1,t}) + \beta_2 \Delta log(X_{2,t}) + \dots + \beta_k \Delta log(X_{k,t}) + \epsilon_t \] los coeficientes \(\beta_1, \beta_2, \ldots, \beta_k\) miden el efecto marginal en elasticidades, es decir, cuanto variará en porcentaje \(Y_t\) si la variable \(X_{1,t}, X_{2,t}, \ldots, X_{k,t}\) aumenta un 1%.

Evaluación del modelo

Los residuos del modelo son la diferencia entre los valores observados en los datos y aquellos estimados por la recta de regresión para cada observación. Por tanto, si la observación 1 tiene valor 3.5, es decir, \(Y_1=3.5\), y el valor estimado para esa observación de la recta de regresión es de 3.8, es decir, \(\hat{Y}_t=3.8\), el residuo para \(t=1\) será:

\[ e_1 = Y_1 - \hat{Y}_1 = 3.5 - 3.8 = -0.3 \] y así sucesivamente para las \(t=1,\ldots,T\) observaciones de las que se disponga.

Para que un modelo de regresión de series temporales esté correctamente específicado, ha de cumplir una serie de propiedades:

  1. \(\hat{e}_t = 0\) . La media de los residuos ha de ser cero. Esto implica que, aunque el modelo se desvía de los datos en cada observación, estas desviaciones se compensan, y, en general, el modelo no se equivoca sistemáticamente.

  2. \(E(\hat{e}_t \hat{e}_{t-p}) = 0, \ \ \forall 1, \ldots, p\). Los residuos no deben de sufrir de autocorrelación serial. Esto dificulta la inferencia (aunque se pueden emplear estadísticos robustos a la autocorrelación), además de indicar que existen retardos de variables incluidas y no incluidas (tanto dependientes como independiente) que son importantes para explicar el modelo.

  3. \(\sum_{t=1}^{T}X_{k,t}e_t = 0 \ \ \forall k\) . Las variables independientes no deben de estar correlacionadas con los residuos. A esta condición también se le llama exogeneidad.

    Finalmente, conviene que los residuos sigan una distribución normal. Aunque esto no es completamente necesario, la inferencia estadística se basa en la distribución normal, con lo cual que los residuos lo sean la facilita.

checkresiduals(modelom1)


    Breusch-Godfrey test for serial correlation of order up to 10

data:  Residuals
LM test = 26.997, df = 10, p-value = 0.002607

Por un lado, la media de los residuos parece 0. Sin embargo, parece haber dos periodos muy claros diferenciados por la varianza de los residuos, que es mucho menor para el primero que para el segundo, a lo que se le llama heterocedasticidad. Por tanto, el modelo se ajusta bien al primer periodo, pero no al segundo. Habría que estimar dos modelos distintos para los dos periodos, o bien tener en cuenta este cambio estructural en el modelo.

Por otra parte, parece que los residuos están autocorrelacionados. Esto se corrobora por el test de Breusch-Godfrey, cuya hipótesis nula es no autocorrelación residual. Probablemente hay variables y retardos de las mismas que precisan ser consideradas en el modelo.

Finalmente, hay una presencia clara de datos anómalos para los cuales los residuos son muy altos, que probablemente vengan por periodos de crisis económica para los cuales el modelo no puede predecir variaciones bruscas de los datos.

dat[,"Residuals"] = as.numeric(residuals(modelom1)) #Incluir los residuos del modelo como una columna más del data frame.
#Scatterplot variables y residuos:
grafica1 <- ggplot(dat, aes(x=fygt11, y=Residuals)) + geom_point() + geom_smooth(method="lm") + theme_classic()
grafica2 <- ggplot(dat, aes(x=lhur1, y=Residuals)) + geom_point() + geom_smooth(method="lm") + theme_classic()
grafica3 <- ggplot(dat, aes(x=exruk1, y=Residuals))+ geom_point() + geom_smooth(method="lm") + theme_classic()
gridExtra::grid.arrange(grafica1, grafica2, grafica3, nrow=1) #Aumentar el espacio para incluir varias gráficas de golpe
Don't know how to automatically pick scale for object of type <ts>. Defaulting
to continuous.
`geom_smooth()` using formula = 'y ~ x'
Don't know how to automatically pick scale for object of type <ts>. Defaulting
to continuous.
`geom_smooth()` using formula = 'y ~ x'
Don't know how to automatically pick scale for object of type <ts>. Defaulting
to continuous.
`geom_smooth()` using formula = 'y ~ x'

Parece que no hay relación entre las variables independientes y los residuos, con lo cual se cumple el requisito. Sin embargo, hay una alta correlación lineal entre la dependiente y los residuos, lo cual indica que hay otras variables no incluidas en el modelo que explican la variable dependiente.

Ejercicio: Cargue e inspeccione la serie temporal ice.river del paquete tseries. Analize el caudal medio diario del rio Vatnsdalsa a través de la precipitación y temperaturas en Hveravellir. Interprete los resultados. Evalue el modelo.