使用 plm 的 R 中的聚类标准错误(具有固定效果)
Clustered standard errors in R using plm (with fixed effects)
我正在尝试 运行 R 的 plm
包中的回归,具有固定效果和 model = 'within'
,同时具有集群标准错误。使用来自 plm
的 Cigar
数据集,我 运行ning:
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)得到的(稍微)不同:
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统计量不同。我尝试用不同的 "types" 重新 运行 调整 R 代码,但 none 给出与 Stata 相同的结果。我错过了什么吗?
由于集群数量有限,Stata 在错误中使用 a finite sample correction to reduce downwards bias。它是方差-协方差矩阵的乘法因子,$c=\frac{G}{G-1} \cdot \frac{N-1}{N-K}$,其中G是组数,N是观察次数,K 是参数的数量。我认为 coeftest
只使用 $c'=\frac{N-1}{N-K}$ 因为如果我用 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 一致。
这段代码可能并不理想,因为数据中的状态数可能与回归中的状态数不同,但我懒得弄清楚如何获得正确的面板数。
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
这给出了最多 3 位数的相同 SE 估计:
x <- coeftest(model, function(x) vcovHC(x, type = 'sss'))
x[ , "Std. Error"]
## [1] 0.2136951
我正在尝试 运行 R 的 plm
包中的回归,具有固定效果和 model = 'within'
,同时具有集群标准错误。使用来自 plm
的 Cigar
数据集,我 运行ning:
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)得到的(稍微)不同:
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统计量不同。我尝试用不同的 "types" 重新 运行 调整 R 代码,但 none 给出与 Stata 相同的结果。我错过了什么吗?
由于集群数量有限,Stata 在错误中使用 a finite sample correction to reduce downwards bias。它是方差-协方差矩阵的乘法因子,$c=\frac{G}{G-1} \cdot \frac{N-1}{N-K}$,其中G是组数,N是观察次数,K 是参数的数量。我认为 coeftest
只使用 $c'=\frac{N-1}{N-K}$ 因为如果我用 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 一致。
这段代码可能并不理想,因为数据中的状态数可能与回归中的状态数不同,但我懒得弄清楚如何获得正确的面板数。
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
这给出了最多 3 位数的相同 SE 估计:
x <- coeftest(model, function(x) vcovHC(x, type = 'sss'))
x[ , "Std. Error"]
## [1] 0.2136951