standard - se of regression formula
Errores estándar de Newey-West con el estimador Fama-MacBeth de Mean Groups (1)
Actualmente esto es imposible con el paquete plm
.
Sin embargo, puedes crearlos tú mismo.
Supongamos que usted tiene:
fpmg <- pmg(y~x, test, index = c(''year'', ''firmid''))
fpmg.coefficients <- fpmg$coefficients
# (Intercept) x
# 0.03127797 1.03558610
coeftest(fpmg)
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 0.031278 0.023356 1.3392 0.1806
# x 1.035586 0.033342 31.0599 <2e-16 ***
Entonces puedes simplemente crear los estimadores tú mismo como en:
the.years <- unique(test$year)
a.formula <- y ~ x
first.step <- lapply(the.years, function(a.year) {
temp.data <- test[test$year == a.year, ]
an.lm <- lm(a.formula, data = temp.data)
the.coefficients <- an.lm$coef
the.results <- as.data.frame(cbind(a.year, t(the.coefficients)))
the.results
})
first.step.df <- do.call(''rbind'', first.step)
second.step.coefficients <- apply(first.step.df[, -1], 2, mean)
second.step.coefficients
# (Intercept) x
# 0.03127797 1.03558610
identical(fpmg.coefficients, second.step.coefficients)
# [1] TRUE
Compruebe que son idénticos en ambos sentidos por si acaso. Por último, puede obtener el Newey-West (1987) con una estadística t ajustada por retardo para los medios con:
library(sandwich)
second.step.NW.sigma.sq <- apply(first.step.df[, -1], 2,
function(x) sqrt(NeweyWest(lm(x ~ 1),
lag = 1, prewhite = FALSE)[''(Intercept)'',
''(Intercept)'']))
second.step.NW.sigma.sq
# (Intercept) x
# 0.02438398 0.02859447
t.statistics.NW.lag.1 <- second.step.coefficients / second.step.NW.sigma.sq
t.statistics.NW.lag.1
# (Intercept) x
# 1.282726 36.216301
Actualizar
En mi respuesta, solo había incluido el cálculo "manual" de la estadística t, porque es computacionalmente más rápido. Una solución más genérica es calcular las estadísticas t corregidas de Newey-West y sus valores p con la función coeftest()
del paquete lmtest
.
coeftest(lm(first.step.df$''(Intercept)'' ~ 1), vcov = NeweyWest(lm(first.step.df$''(Intercept)'' ~ 1), lag = 1, prewhite = FALSE))
# t test of coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 0.031278 0.024384 1.2827 0.2316
coeftest(lm(first.step.df$x ~ 1), vcov = NeweyWest(lm(first.step.df$x ~ 1), lag = 1, prewhite = FALSE))
# t test of coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 1.035586 0.028594 36.216 4.619e-11 ***
Estoy tratando de hacer que los errores estándar de Newey-West funcionen con la salida de pmg()
(Estimador de Grupos de Fama / MacBeth) del paquete plm
.
Siguiendo el ejemplo de here :
require(foreign)
require(plm)
require(lmtest)
test <- read.dta("http://www.kellogg.northwestern.edu/faculty/petersen/htm/papers/se/test_data.dta")
fpmg <- pmg(y~x, test, index=c("firmid", "year")) # Time index in second position, unlike the example
Puedo usar coeftest
directamente bien para obtener los errores estándar de Fama-MacBeth:
# Regular “Fama-MacBeth” standard errors
coeftest(fpmg)
# t test of coefficients:
#
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 0.032470 0.071671 0.453 0.6505
# x 0.969212 0.034782 27.866 <2e-16 ***
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Sin embargo, al intentar usar los estimadores de Newey-West falla:
# Newey-West standard-errors
coeftest(fpmg, vcov = NeweyWest(fpmg, lag=3))
# Error in UseMethod("estfun") :
# no applicable method for ''estfun'' applied to an object of class "c(''pmg'', ''panelmodel'')"
Esto parece una deficiencia en el paquete plm
. ¿Conoces una forma de hacer que esto funcione? ¿Debo codificar mi propio estfun
para objetos pmg
? ¿Codificar un estimador de Newey-West desde cero? ¿O debo pasar por alto el paquete plm
por completo?