在R的plm包中为双向固定效应模型配置HAC标准误的疑问
问题根源与解决方法
你遇到的核心问题是plm()函数本身的vcovHC/vcovHAC参数并不直接控制模型输出的标准误,这些参数仅用于内部传递,所以直接加在plm()里不会改变summary的输出结果,自然看起来标准误完全一致。
正确操作步骤
要在双向固定效应模型中得到HC3或HAC稳健标准误,需要分两步:先估计基础固定效应模型,再用专门的协方差矩阵函数结合coeftest()输出结果。
- 加载必要的包
library(plm) library(lmtest) # 提供coeftest函数用于输出稳健标准误
- 估计双向固定效应模型(和你原代码的fe1一致)
fe_base <- plm(log(DEB) ~ log(IMP), model = "within", data = data, index = c("country","year"), effect = "twoways")
- 计算HC3异方差稳健标准误
# 输出带HC3标准误的系数结果 coeftest(fe_base, vcov. = vcovHC(fe_base, type = "HC3"))
- 计算HAC(Newey-West型)稳健标准误
HAC标准误需考虑序列相关性,通常要指定滞后阶数(示例设为3):
# 输出带HAC3标准误的系数结果,lag参数指定滞后阶数 coeftest(fe_base, vcov. = vcovHAC(fe_base, type = "HAC3", lag = 3))
为什么之前的代码没差异?
当你在plm()里添加vcovHC="HC3"或vcovHAC="HAC3"时,这些参数并没有替换模型默认的协方差矩阵——plm对象的summary()默认仍输出固定效应模型的普通标准误。只有通过coeftest()结合对应的vcovHC()/vcovHAC()函数,才能真正得到稳健标准误的结果。
内容的提问来源于stack exchange,提问作者TFT
相关产品推荐
相关产品推荐

