PLM包中的异方差稳健标准误差

18

我正在尝试学习R,之前使用的是Stata,我必须说我很喜欢它。但是现在我遇到了一些麻烦。我要使用plm包进行面板数据的多元回归。

现在我想在R中使用plm与Stata的lm函数获得相同的结果,执行异方差稳健和实体固定回归。

假设我有一个带有变量YENTITYTIMEV1的面板数据集。

使用以下代码,我可以在R中获得相同的标准误:

```r ```
lm.model<-lm(Y ~ V1 + factor(ENTITY), data=data)
coeftest(lm.model, vcov.=vcovHC(lm.model, type="HC1))

当我在Stata中执行这个回归分析时

xi: reg Y V1 i.ENTITY, robust

但是当我使用plm包执行此回归时,我得到了其他标准误差。

plm.model<-plm(Y ~ V1 , index=C("ENTITY","YEAR"), model="within", effect="individual", data=data)
coeftest(plm.model, vcov.=vcovHC(plm.model, type="HC1))
  • 我有遗漏设置一些选项吗?
  • plm模型是否使用其他类型的估计方法,如果是,那么是什么?
  • 我是否可以以某种方式使用plm获得与Stata中, robust相同的标准误差?

2
这是你最好问问http://www.crossvalidated.com,他们能更好地帮助你。同时,如果有一些可重现的代码和期望的结果就更好了,因为这通常能更快地解决问题。 - Joris Meys
3
我不懂Stata,但看起来你的Stata回归是一个带有鲁棒异方差标准误的Y = a0 + a1V1 + a2ENTITY + epsilon的汇总线性模型,这与您使用lm所做的相同,因此结果匹配。在plm模型中,你正在做一个固定效应回归,其中Y = a0 + a1*V1 + ui + epsilon,其中ui是每个“个体”的固定效应,而你通过index指定为ENTITY。所以我认为你的Stata和R结果在第一种情况下匹配,因为你在两种情况下都使用了实体作为独立变量进行汇总面板回归。但我不懂Stata。 - Richard Herron
2个回答

9

默认情况下,plm包未使用与Stata完全相同的面板数据小样本校正。但是,在CRAN上的plm 1.5版本中,您有一个选项可以模拟Stata正在执行的操作。

plm.model<-plm(Y ~ V1 , index=C("ENTITY","YEAR"), model="within", 
    effect="individual", data=data)
coeftest(plm.model, vcov.=function(x) vcovHC(x, type="sss"))

这应该会产生与Stata中相同的按组聚类的标准误差(但正如评论中提到的那样,如果没有可重现的示例以及您期望的结果,回答问题就更难了)。
有关此问题的更多讨论以及R和Stata鲁棒SE的一些基准,请参见Fama-MacBeth and Cluster-Robust (by Firm and Time) Standard Errors in R
另请参见:

2
plmtype="sss"并不能完全复制Stata的小样本调整,因为Stata在其FE模型中有一个截距,因此在调整中使用不同数量的系数。plm没有这个截距,因此相对于Stata在调整中使用"系数数量-1"。对于小样本,这会产生略微不同的结果,但在大样本中不会被注意到。 - Helix123
@Helix123 的确。我已经与 plm 的作者讨论过这个问题,总的来说,Stata 包含截距项的理论基础并不清楚。虽然可以计算出一个截距项,并且如果需要的话 plm 也会计算它(within_intercept(),可能仍在 SVN 中),但在“within”模型的背景下,它似乎是一个有些人为的概念。目前看来,包括 Stata 聚类标准误的“数值精确”复制似乎不明智...尽管如此,Gretl 似乎完全按照 Stata 的方式复制了这些计算。 - landroni

4
“您的Stata代码与plm中的操作是否不同?”
“plm” 中的 “within” 选项和 “individual” 效应意味着一个形式为: 的模型。
yit = a + Xit*B + eit + ci

“plm”的作用是将系数减少到“ci”从方程中消失。
yit_bar = Xit_bar*B + eit_bar

这里的“bar”后缀表示每个变量都减去了它们的平均值。均值是在时间上计算出来的,因此它的效果是对个体而言的。您也可以有一个固定的时间效应,这对所有个体是共同的,这种情况下效应也会随着时间改变(但在本例中不相关)。
我不确定STATA中的“xi”命令是干什么用的,但我认为它是扩展交互作用的,对吗?然后我觉得你正在尝试为每个实体使用一个虚拟变量,正如@richardh所强调的那样。
要使您的Stata和plm代码匹配,您有两个选择:(1)在stata中设置数据并使用带有fe修饰符的xtreg选项,或者(2)使用带有每个实体一个虚拟变量的汇集选项的plm。
将Stata与R匹配:
xtset entity year
xtreg y v1, fe robust 

将plm与Stata匹配:
plm(Y ~ V1 + as.factor(ENTITY) , index=C("ENTITY","YEAR"), model="pooling", effect="individual", data=data)

然后使用vcovHC和其中一个修饰符。确保查看这篇论文,它对所有“HC”选项背后的机制以及它们如何影响方差协方差矩阵进行了很好的回顾。
希望这可以帮助你。

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