Stargazer 中的聚类稳健标准误差
Cluster-Robust Standard Errors in Stargazer
有谁知道如何让 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 - and also 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-stats。
使用包 lmtest 和 multiwayvcov 会导致很多不必要的开销。在 R 中计算聚类标准误差的最简单方法是修改后的 summary()
函数。此函数允许您向常规 summary()
函数添加一个称为 cluster 的附加参数。下面post描述了如何使用这个函数来计算R中的聚类标准误差:
https://economictheoryblog.com/2016/12/13/clustered-standard-errors-in-r/
您可以轻松地使用 summary 函数获取聚类标准误差并将它们添加到 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")
我会推荐 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)
有谁知道如何让 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 - and also 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-stats。
使用包 lmtest 和 multiwayvcov 会导致很多不必要的开销。在 R 中计算聚类标准误差的最简单方法是修改后的 summary()
函数。此函数允许您向常规 summary()
函数添加一个称为 cluster 的附加参数。下面post描述了如何使用这个函数来计算R中的聚类标准误差:
https://economictheoryblog.com/2016/12/13/clustered-standard-errors-in-r/
您可以轻松地使用 summary 函数获取聚类标准误差并将它们添加到 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")
我会推荐 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)