Stargazer 中的集群稳健标准误差

Posted

技术标签:

【中文标题】Stargazer 中的集群稳健标准误差【英文标题】:Cluster-Robust Standard Errors in Stargazer 【发布时间】:2017-10-17 01:42:46 【问题描述】:

有谁知道如何让stargazer 显示lm 模型的集群SE? (以及相应的 F 检验?)如果可能,我想遵循类似于使用 sandwich 计算异方差稳健性 SE 并将它们弹出到 stargazer 中的方法,如 http://jakeruss.com/cheatsheets/stargazer.html#robust-standard-errors-replicating-statas-robust-option。

我正在使用lm 来获取我的回归模型,并且我正在按公司进行聚类(回归模型中未包含的因子变量)。我也有一堆 NA 值,这让我认为multiwayvcov 将是最好的包(请参阅landroni 答案的底部 - Double clustered standard errors for panel data - 还有https://sites.google.com/site/npgraham1/research/code)?请注意,我不想使用plm

编辑:我想我找到了使用 multiwayvcov 包的解决方案...

library(lmtest) # load packages
library(multiwayvcov)

data(petersen) # load data
petersen$z <- petersen$y + 0.35  # create new variable

ols1 <- lm(y ~ x, data = petersen) # create models
ols2 <- lm(y ~ x + z, data = petersen)

cl.cov1 <- cluster.vcov(ols1, data$firmid) # cluster-robust SEs for ols1
cl.robust.se.1 <- sqrt(diag(cl.cov1))
cl.wald1 <- waldtest(ols1, vcov = cl.cov1)

cl.cov2 <- cluster.vcov(ols2, data$ticker) # cluster-robust SEs for ols2
cl.robust.se.2 <- sqrt(diag(cl.cov2))
cl.wald2 <- waldtest(ols2, vcov = cl.cov2)

stargazer(ols1, ols2, se=list(cl.robust.se.1, cl.robust.se.2), type = "text") # create table in stargazer

这种方法的唯一缺点是您必须从每个模型的waldtest() 输出手动重新输入 F 统计数据。

【问题讨论】:

【参考方案1】:

使用包 lmtest 和 multiwayvcov 会导致很多不必要的开销。在 R 中计算聚类标准误差的最简单方法是修改后的 summary() 函数。此函数允许您向传统的summary() 函数添加一个名为 cluster 的附加参数。下面的文章描述了如何使用这个函数来计算 R 中的聚类标准误差:

https://economictheoryblog.com/2016/12/13/clustered-standard-errors-in-r/

您可以轻松地使用汇总函数来获取聚集的标准错误并将它们添加到 stargazer 输出中。根据您的示例,您可以简单地使用以下代码:

# estimate models
ols1 <- lm(y ~ x) 

# summary with cluster-robust SEs
summary(ols1, cluster="cluster_id") 

# create table in stargazer
stargazer(ols1, se=list(coef(summary(ols1,cluster = c("cluster_id")))[, 2]), type = "text") 

【讨论】:

我想用 4 个回归模型创建一个输出。每个模型都应该有聚集的标准误。您将如何设置代码?这是没有聚集标准错误的模型的样子:stargazer(m1,m2,m3,m4, type="html", dep.var.labels=c("ROA"), intercept.bottom = FALSE, out ="OLS1") @YaronNolan 我会执行以下操作:clust 我使用了这个函数,但它给了我与没有集群选项的相同的标准错误。 felm 也给出了另一个错误(非常小),而 stata 给出了一个稍大的错误。不知道为什么会发生这种情况,但首先比较几个工具的一致性可能是个好主意。 请注意,那里的代码不再起作用。【参考方案2】:

我会推荐lfe 包,它比lm 包更强大。您可以轻松地在回归模型中指定集群:

ols1 <- felm(y ~ x + z|0|0|firmid, data = petersen)
summary(ols1)

stargazer(OLS1, type="html")

将自动生成聚类标准误。而stargazer 会相应地报告集群标准错误。

顺便说一下(允许我做更多营销),对于微观经济分析,强烈推荐felm。您可以使用felm 轻松指定固定效果和 IV。语法是这样的:

ols1 <- felm(y ~ x + z|FixedEffect1 + FixedEffect2 | IV | Cluster, data = Data)

【讨论】:

当我使用“lm”命令时,会显示我的行业和年份假人。当我使用“felm”命令时,我的行业和你的假人没有显示出来。 r 在使用您的代码时是否仍然考虑这些假人?这就是我的代码的样子: m1_1

以上是关于Stargazer 中的集群稳健标准误差的主要内容,如果未能解决你的问题,请参考以下文章

Stata和R中Logit回归的不同稳健标准误差

R计算具有奇点的lm模型的稳健标准误差(vcovHC)

在 stargazer 中计算偏度和峰度

R:LATEX中的强大标准错误

添加误差线以在 R 中的绘图上显示标准偏差

Q 方法求稳健标准差——理论和 Python实现