plm与lfe中聚类标准误差的不同

11

当我使用plmlfe运行一个集群标准误面板规范时,我得到的结果在第二有效数字处不同。有人知道它们计算标准误差的差异吗?

set.seed(572015)
library(lfe)
library(plm)
library(lmtest)
# clustering example
x <- c(sapply(sample(1:20), rep, times = 1000)) + rnorm(20*1000, sd = 1)
y <- 5 + 10*x + rnorm(20*1000, sd = 10) + c(sapply(rnorm(20, sd = 10), rep, times = 1000))
facX <- factor(sapply(1:20, rep, times = 1000))
mydata <- data.frame(y=y,x=x,facX=facX, state=rep(1:1000, 20))
model <- plm(y ~ x, data = mydata, index = c("facX", "state"), effect = "individual", model = "within")
plmTest <- coeftest(model,vcov=vcovHC(model,type = "HC1", cluster="group"))
lfeTest <- summary(felm(y ~ x | facX | 0 | facX))
data.frame(lfeClusterSE=lfeTest$coefficients[2],
       plmClusterSE=plmTest[2])

lfeClusterSE plmClusterSE
1   0.06746538   0.06572588
1个回答

17

区别在于自由度调整。当寻找 supposedly 相似的标准误差的不同之处时,这是通常的第一个猜测(例如,请参见:Different Robust Standard Errors of Logit Regression in Stata and R)。在这里,当比较 (1) plm+vcovHC、(2) felm 和 (3) lm+cluster.vcov(来自包 multiwayvcov)的结果时,可以说明问题。

首先,我重新拟合了所有模型:

m1 <- plm(y ~ x, data = mydata, index = c("facX", "state"),
  effect = "individual", model = "within")
m2 <- felm(y ~ x | facX | 0 | facX, data = mydata)
m3 <- lm(y ~ facX + x, data = mydata)

所有的结果都导致相同的系数估计值。对于 m3 ,固定效应明确报告,而对于 m1m2 则没有。因此,只有对于 m3 使用 tail(..., 1) 才能提取最后一个系数。

all.equal(coef(m1), coef(m2))
## [1] TRUE
all.equal(coef(m1), tail(coef(m3), 1))
## [1] TRUE

非稳健标准误差也是一致的。

se <- function(object) tail(sqrt(diag(object)), 1)
se(vcov(m1))
##          x 
## 0.07002696 
se(vcov(m2))
##          x 
## 0.07002696 
se(vcov(m3))
##          x 
## 0.07002696 

当比较聚类标准误差时,我们现在可以显示 felm 使用自由度校正,而plm则不使用:

se(vcovHC(m1))
##          x 
## 0.06572423 
m2$cse
##          x 
## 0.06746538 
se(cluster.vcov(m3, mydata$facX))
##          x 
## 0.06746538 
se(cluster.vcov(m3, mydata$facX, df_correction = FALSE))
##          x 
## 0.06572423 

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - landroni
1
我认为是这样,但还没有详细检查代码。此外,请注意目前sandwich本身不提供聚类标准误差。 sandwich包背后的所有理论细节也都记录在两个vignettes中。 - Achim Zeileis
2
更新:现在sandwich中也提供了聚类协方差。来自multiwayvcovcluster.vcov()函数已被重写和扩展,并作为vcovCL()纳入sandwich中。请参见https://CRAN.R-project.org/web/packages/sandwich/vignettes/sandwich-CL.pdf。 - Achim Zeileis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接