问题描述
我试图在具有固定效果和model = 'within'
的R的plm
程序包中运行回归,同时使标准错误聚类.使用plm
中的Cigar
数据集,我正在运行:
I'm trying to run a regression in R's plm
package with fixed effects and model = 'within'
, while having clustered standard errors. Using the Cigar
dataset from plm
, I'm running:
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(将Cigar文件写为.dta)所获得的(略)不同:
This is (slightly) different than what I'd get by using Stata (having written the Cigar file as a .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相同的结果.我想念什么吗?
Namely, the standard error and T statistic are different. I've tried rerunning the R code with different "types", but none give the same result as Stata. Am I missing something?
推荐答案
Stata使用有限样本校正以减少向下偏差由于群集数量有限而导致的错误.它是方差-协方差矩阵$ c = \ frac {G} {G-1} \ cdot \ frac {N-1} {NK} $的乘法因子,其中G是组数,N是观察数,K是参数数.我认为coeftest
仅使用$ c'= \ frac {N-1} {NK} $,因为如果我按c中第一项的平方来缩放R的标准误差,我会得到一些与Stata的标准误差非常接近的信息:/p>
Stata uses a finite sample correction to reduce downwards bias in the errors due to the finite number of clusters. It is a multiplicative factor on the variance-covariance matrix, $c=\frac{G}{G-1} \cdot \frac{N-1}{N-K}$, where G is the number of groups, N is the number of observations, and K is the number of parameters. I think coeftest
only uses $c'=\frac{N-1}{N-K}$ since if I scale R's standard error by the square of the first term in c, I get something pretty close to Stata's standard error:
display 0.21136*(46/(46-1))^(.5)
.21369554
这是我将如何复制Stata在R中所做的事情:
Here's how I would replicate what Stata is doing in 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一致.
which agrees with Stata's error of 0.2137726 and t-stat of -5.70.
此代码可能并不理想,因为数据中的状态数可能不同于回归中的状态数,但是我太懒了,无法弄清楚如何获得正确的面板数.
This code is probably not ideal, since the number of states in the data may be different than the number of states in the regression, but I am too lazy to figure out how to get the right number of panels.
这篇关于使用plm在R中聚集标准错误(具有固定效果)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!