5
当我运行集群标准错误面板规范plm
和lfe
时,我得到的结果在第二个有效数字上有所不同。有谁知道他们为什么在SE的计算上存在差异?plm vs lfe不同集群标准错误
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
检查'multiwayvcov :: cluster.vcov'是容易看到用于获得Stata小样本自由度校正的代数,即:(df $ M /(df $ M-1))*((df $ N - 1)/(df $ N - df $ K))'。但是,使用的等效df修正是“sandwich(...,adjust = TRUE)'?在[这个答案](http://stackoverflow.com/questions/27367974/)中,你解释了两者之间的区别在于,对于Stata,除法是'1 /(n-1)',而'sandwich'它是由'1 /(n - k)'。然而,我不确定这是如何转化为适当的代数的...我是否用上面的'(df $ N - df $ K)'替代'(df $ N - 1)'? – landroni
我这么认为,但没有详细检查代码。另请注意,目前'sandwich'本身并不提供集群标准错误。 “三明治”套餐背后的所有理论细节也记录在两个小插曲中。 –