the standard residual online estimate error r regression standard-error

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?