2010-12-13 77 views
12

我想在使用Stata后学习R,我必须说我喜欢它。但是现在我遇到了一些麻烦。我将要使用面板数据进行多次回归,因此我使用的是plm软件包。使用PLM包的异方差强健的标准错误

现在我想与R中plm相同的结果,当我使用lm功能和Stata的,当我进行异稳健和实体固定回归。

假设我有一个面板数据集,其变量为Y,ENTITY,TIME,V1

我得到的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问,他们将能够帮助你更多。如果你有一些可重复的代码,以及预期的结果,这将是很好的。这通常会更快地解决问题。 – 2010-12-14 10:09:02

+3

我不知道stata,但它看起来像你的stata回归是一个合并的线性模型Y = a0 + a1 * V1 + a2 * ENTITY + epsilon与健壮的het se,这就是你用'lm' ,所以结果相符。在“plm”模型中,您正在进行FE回归Y = a0 + a1 * V1 + ui + epsilon,其中ui是每个“个人”的FE,按您指定的“索引”为ENTITY。所以我认为你的stata和R结果在第一种情况下是匹配的,因为在这两种情况下你正在做一个实体作为ind var的合并面板。但我不知道stata。 – 2011-01-12 00:54:28

回答

2

有没有可能是你的塔塔代码是从您与PLM做什么不同?

plm的‘内’与‘个人’效果选项意味着形式的模型:

yit = a + Xit*B + eit + ci 

什么plm确实是贬低系数,使得词从公式下降。

yit_bar = Xit_bar*B + eit_bar 

这样,“bar”后缀意味着每个变量的平均值被减去。平均值是随着时间的推移而计算的,这就是为什么这个效应是针对个人的。你也可以有一个固定的时间效应,这对所有的人来说都是共同的,在这种情况下,效果也会随着时间的推移(尽管如此,这与此无关)。

我不确定在STATA中“xi”命令是干什么的,但我认为它扩展了交互权限?那么在我看来,您正试图按照@richardh强调的每个ENTITY使用一个虚拟变量。

对于你的Stata和plm代码来匹配你必须使用相同的模型。您有两种选择:(1)您在stata中设置您的数据,并使用fe修饰符的xtreg选项;或者(2)您使用带有池选项的plm和每个ENTITY使用一个虚拟设备。

匹配的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与改性剂中的一个。请务必检查此paper,其中有“HC”选项背后的所有机制以及它们影响方差协方差矩阵的方式。

希望这会有所帮助。

4

默认情况下,plm包不会像Stata一样使用面板数据的相同小样本校正。然而在版本号为plm(在CRAN上)中,您可以选择模拟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健壮SEs的一些基准的讨论,请参阅Fama-MacBeth and Cluster-Robust (by Firm and Time) Standard Errors in R

参见:

+0

'plm''s'type =“sss”'不能完全复制Stata的小样本调整,因为Stata在其有限元模型中有截距,因此在调整中使用了不同数量的系数。 'plm'没有这个截距,因此在调整时使用相对于Stata的“系数量-1”。对于小样本,这会给出稍微不同的结果,但在大样本中不会被注意到。 – Helix123 2016-08-07 07:22:57

+0

@ Helix123确实。我已经和'plm'的作者讨论过这个问题,总的来说,Stata在这些计算中包含截距的理论依据并不清楚。虽然拦截*可以计算出来,如果需要的话,也可以用'plm'('within_intercept()',可能仍然在SVN中),它似乎在'内部'模型的上下文中是一种人为的概念。现在,包含一个“数值精确”的Stata聚簇SE复制似乎并不明智......这就是说,Gretl似乎复制了这些计算*完全符合Stata。 – landroni 2016-08-08 07:03:40