我正在尝试使用固定效果和plm
在R的model = 'within'
包中运行回归,同时具有群集标准错误。使用Cigar
中的plm
数据集,我正在运行:
require(plm)
require(lmtest)
data(Cigar)
model <- plm(price ~ sales + factor(state), model = 'within', data = Cigar)
coeftest(model, vcovHC(model, type = 'HC0', cluster = 'group'))
Estimate Std. Error t value Pr(>|t|)
sales -1.21956 0.21136 -5.7701 9.84e-09
这与我使用Stata(将雪茄文件编写为.dta)得到的结果略有不同:
use cigar
xtset state year
xtreg price sales, fe vce(cluster state)
price Coef. Std. Err. t P>t [95% Conf. Interval]
sales -1.219563 .2137726 -5.70 0.000 -1.650124 -.7890033
即,标准误差和T统计量不同。我尝试用不同的“类型”重新运行R代码,但没有一个给出与Stata相同的结果。我错过了什么吗?
答案 0 :(得分:7)
由于群集数量有限,Stata使用a finite sample correction来减少错误中的downwards bias。它是方差 - 协方差矩阵的乘法因子,$ c = \ frac {G} {G-1} \ cdot \ frac {N-1} {NK} $,其中G是群组的数量,N是观察次数,K是参数的数量。我认为coeftest
只使用$ c&#39; = \ frac {N-1} {NK} $,因为如果我按照c中第一项的平方来缩放R的标准误差,我会得到一些东西非常接近Stata的标准错误:
display 0.21136*(46/(46-1))^(.5)
.21369554
以下是我如何复制Stata在R中所做的事情:
require(plm)
require(lmtest)
data(Cigar)
model <- plm(price ~ sales, model = 'within', data = Cigar)
G <- length(unique(Cigar$state))
c <- G/(G - 1)
coeftest(model,c * vcovHC(model, type = "HC1", cluster = "group"))
这会产生:
t test of coefficients:
Estimate Std. Error t value Pr(>|t|)
sales -1.219563 0.213773 -5.70496 1.4319e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
同意Stata的错误0.2137726和t-stat为-5.70。
这段代码可能并不理想,因为数据中的状态数可能与回归中的状态数不同,但我太懒了,无法弄清楚如何获得正确数量的面板。
答案 1 :(得分:4)
Stata使用已在plm
1.5中实施的特定小样本修正。
试试这个:
require(plm)
require(lmtest)
data(Cigar)
model <- plm(price ~ sales + factor(state), model = 'within', data = Cigar)
coeftest(model, function(x) vcovHC(x, type = 'sss'))
将产生:
t test of coefficients:
Estimate Std. Error t value Pr(>|t|)
sales -1.2196 0.2137 -5.707 1.415e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
这给出了相同的SE估计值,最多3位数:
x <- coeftest(model, function(x) vcovHC(x, type = 'sss'))
x[ , "Std. Error"]
## [1] 0.2136951