16.4 Errores estándar de HAC
El término de error \(u_t\) en el modelo de retardo distribuido (16.2) puede estar correlacionado en serie debido a determinantes correlacionados en serie de \(Y_t\) que no se incluyen como regresores. Cuando estos factores no están correlacionados con los regresores incluidos en el modelo, los errores correlacionados en serie no violan el supuesto de exogeneidad, de modo que el estimador de MCO permanece insesgado y consistente.
Sin embargo, los errores estándar autocorrelacionados invalidan los errores estándar habituales de solo homocedasticidad y heterocedasticidad robustos y pueden causar inferencias engañosas. Los errores de HAC son una solución.
Concepto clave 15.2
Errores estándar de HAC
Problema:
Si el término de error \(u_t\) en el modelo de retardo distribuido ((16.2)) está correlacionado en serie, la inferencia estadística que se basa en errores estándar habituales (robustos a la heterocedasticidad) puede ser muy engañosa.
Solución:
Los estimadores consistentes con heterocedasticidad y autocorrelación (HAC) de la matriz de varianza-covarianza evitan este problema. Existen funciones R como vcovHAC() del paquete sandwich que son convenientes para el cálculo de tales estimadores.
El paquete sandwich también contiene la función NeweyWest(), una implementación del estimador de varianza-covarianza HAC propuesto por Newey and West (1987).
Considere el modelo de regresión de rezagos distribuidos sin rezagos y un solo regresor \(X_t\):
\[\begin{align*} Y_t = \beta_0 + \beta_1 X_t + u_t. \end{align*}\]
con errores autocorrelacionados. Una breve derivación de
\[\begin{align} \overset{\sim}{\sigma}^2_{\widehat{\beta}_1} = \widehat{\sigma}^2_{\widehat{\beta}_1} \widehat{f}_t \tag{16.4} \end{align}\]
el llamado estimador de varianza de Newey-West para la varianza del estimador de MCO de \(\beta_1\). \(\widehat{\sigma}^2_{\widehat{\beta}_1}\) en (16.4) es la estimación de la varianza robusta a la heterocedasticidad de \(\widehat{\beta}_1\) y
\[\begin{align} \widehat{f}_t = 1 + 2 \sum_{j=1}^{m-1} \left(\frac{m-j}{m}\right) \overset{\sim}{\rho}_j \tag{16.5} \end{align}\]
es un factor de corrección que se ajusta a los errores correlacionados en serie e involucra estimaciones de \(m-1\) coeficientes de autocorrelación \(\overset{\sim}{\rho}_j\). Como resultado, usar la autocorrelación de muestra implementada en acf() para estimar los coeficientes de autocorrelación hace que (16.4) sea inconsistente. Por tanto, se utiliza un estimador algo diferente. Para una serie de tiempo \(X\) se tiene \[ \ \overset{\sim}{\rho}_j = \frac{\sum_{t=j+1}^T \hat v_t \hat v_{t-j}}{\sum_{t=1}^T \hat v_t^2}, \ \text{with} \ \hat v= (X_t-\overline{X}) \hat u_t. \] Implementando este estimador en la función acf_c() a continuación:
\(m\) in (16.5) is a truncation parameter to be chosen. A rule of thumb for choosing \(m\) is \[\begin{align} m = \left \lceil{0.75 \cdot T^{1/3}}\right\rceil. \tag{16.6} \end{align}\]
Se simula una serie de tiempo que, como se indicó anteriormente, sigue un modelo de retardo distribuido con errores autocorrelacionados y luego se muestra cómo calcular la estimación de Newey-West HAC de \(SE(\widehat{\beta}_1)\) usando R. Esto se hace a través de dos enfoques separados pero, como se verá, idénticos: Al principio se sigue la derivación presentada paso a paso y se calcula la estimación “manualmente.” Luego se muestra que el resultado es exactamente la estimación obtenida al usar la función NeweyWest().
# función que calcula rho tilde
<- function(x, j) {
acf_c return(
t(x[-c(1:j)]) %*% na.omit(Lag(x, j)) / t(x) %*% x
)
}
# simular series de tiempo con errores correlacionados en serie
set.seed(1)
<- 100
N
<- arima.sim(n = N, model = list(ma = 0.5))
eps <- runif(N, 1, 10)
X <- 0.5 * X + eps
Y
# calcular los residuos de MCO
<- lm(Y ~ X)$res
res
# compute v
<- (X - mean(X)) * res
v
# calcular una estimación sólida de la varianza beta_1
<- 1/N * (1/(N-2) * sum((X - mean(X))^2 * res^2) ) /
var_beta_hat 1/N * sum((X - mean(X))^2))^2
(
# parámetro de truncamiento de la regla general
<- floor(0.75 * N^(1/3))
m
# calcular el factor de corrección
<- 1 + 2 * sum(
f_hat_T - 1:(m-1))/m * sapply(1:(m - 1), function(i) acf_c(x = v, j = i))
(m
)
# calcular la estimación de Newey-West HAC del error estándar
sqrt(var_beta_hat * f_hat_T)
#> [1] 0.04036208
Para que el código sea reutilizable en otras aplicaciones, se usa sapply() para estimar las \(m-1\) autocorrelaciones \(\overset{\sim}{\rho}_j\).
# usando NeweyWest():
<- NeweyWest(lm(Y ~ X),
NW_VCOV lag = m - 1, prewhite = F,
adjust = T)
# calcular el error estándar
sqrt(diag(NW_VCOV))[2]
#> X
#> 0.04036208
Al elegir lag = m-1 se asegura que el orden máximo de autocorrelaciones utilizadas sea \(m-1\) — tal como en la ecuación (16.5). Observe que se establecen los argumentos prewhite = F y adjust = T para asegurar que se usa la fórmula (16.4) y se realizan ajustes de muestra finitos.
Se encontró que los errores estándar calculados coinciden. Por supuesto, una estimación de la matriz de varianza-covarianza calculada por NeweyWest() se puede proporcionar como el argumento vcov en coeftest(), tal que el estadístico \(t\) de HAC y los valores \(p\) son proporcionados por este último.
<- lm(Y ~ X)
example_mod coeftest(example_mod, vcov = NW_VCOV)
#>
#> t test of coefficients:
#>
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 0.542310 0.235423 2.3036 0.02336 *
#> X 0.423305 0.040362 10.4877 < 2e-16 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1