均值组/Fama-MacBeth估计量的Newey-West标准误 [英] Newey-West standard errors with Mean Groups/Fama-MacBeth estimator

查看:740
本文介绍了均值组/Fama-MacBeth估计量的Newey-West标准误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使Newey-West标准错误与plm包中的pmg()(均值组/Fama-MacBeth估计量)的输出配合使用.

I'm trying to get Newey-West standard errors to work with the output of pmg() (Mean Groups/Fama-MacBeth estimator) from the plm package.

下面的示例来自

我可以直接使用coeftest来获取Fama-MacBeth标准错误:

I can use coeftest directly just fine to get the Fama-MacBeth standard errors:

# 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

但是,尝试使用Newey-West估计量会失败:

However, trying to use the Newey-West estimators fails:

# 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')"

这似乎是plm包中的一个缺点.您知道使这项工作有效的方法吗?我应该为pmg对象编写自己的estfun吗?从头开始编写Newey-West估算器?还是应该完全绕过plm包?

This seems like a shortcoming in the plm package. Do you know a way to make this work? Should I code my own estfun for pmg objects? Code a Newey-West estimator from scratch? Or should I bypass the plm package altogether?

推荐答案

当前使用plm包是不可能的.

Currently this is impossible with plm package.

但是,您可以自己创建它们.

However, you could just create them yourself.

假设您有

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 ***

然后,您可以像下面这样简单地自己创建估算器:

Then you can simply create the estimators yourself like in:

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

为防万一,请检查两个方向是否相同. 最后,您可以通过以下方法获得带有均值的滞后调整t统计量的Newey-West(1987):

Check that they are identical both ways just in case. Last, you can obtain the Newey-West (1987) with one lag adjusted t-statistics for the means with:

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

更新

在我的回答中,我只包括了t统计量的手动"计算,因为它的计算速度更快. 更为通用的解决方案是使用lmtest包的coeftest()函数计算Newey-West校正的t统计量及其p值.

Update

In my answer, I had only included the "manual" calculation of the t-statistic, because it is computationally faster. A more generic solution is to calculcate the Newey-West corrected t-statistics and their p-values with the coeftest() function of the lmtest package.

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 ***

这篇关于均值组/Fama-MacBeth估计量的Newey-West标准误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆