在R中使用鲁棒聚类标准误的逻辑回归

14
一个新手问题:有人知道如何在R中使用聚类标准误来运行逻辑回归吗? 在Stata中,只需运行logit Y X1 X2 X3, vce(cluster Z)即可完成,但不幸的是,我还没有弄清楚如何在R中进行相同的分析。 预先感谢!

1
sandwich 包中的 vcovHC() 函数可能也很有用(不确定是否适用于逻辑回归估计)。 - Ben Bolker
1
如果您正在从Stata迁移,您可能会发现名为“plm”的软件包非常有用。此外,还有名为“pcse”的软件包,可通过在估计后操作方差协方差矩阵来实现面板校正标准误差。 - hubert_farnsworth
非常感谢你们的回复,Ben和Hubert。我也会测试你们建议的软件包,并查看它们是否适用于逻辑估计。再次感谢! - danilofreire
4个回答

16

您可以考虑使用rms(回归建模策略)包。因此,lrm是逻辑回归模型,如果fit是您的输出名称,您将会得到以下内容:

fit=lrm(disease ~ age + study + rcs(bmi,3), x=T, y=T, data=dataf)

fit

robcov(fit, cluster=dataf$id)

bootcov(fit,cluster=dataf$id)

在模型语句中,您需要指定x=Ty=Trcs表示具有3个节点的受限立方样条。


非常感谢!它真的很有效!我会更仔细地阅读rms的手册,看看是否有一种按国家和年份对系数进行聚类的方法。再次感谢! - danilofreire
4
这个回答已经很好了,但如果可以完全可复制就更好了。我不知道这些变量是从哪里来的,输出是什么,以及为什么需要rcs(bmi,3) - MERose

6

另一种选择是使用 sandwichlmtest 包,具体操作如下。假设你的数据集 dat 中有一个名为 z 的列,其中包含聚类指标,则:

# load libraries
library("sandwich")
library("lmtest")

# fit the logistic regression
fit = glm(y ~ x, data = dat, family = binomial)

# get results with clustered standard errors (of type HC0)
coeftest(fit, vcov. = vcovCL(fit, cluster = dat$z, type = "HC0"))

能够胜任这项工作。

1
有趣的事实是,miceadds中的函数实际上是指sandwich包 :) - Poza

5

我已经苦思冥想了两天,幸运的是我找到了一个似乎注定会取得巨大成功的新软件包。例如,在我的分析中我还运行了一些集群稳健Tobit模型,而这个软件包也内置了这种功能。更不用说其语法要比我见过的所有其他解决方案(我们在谈论接近于Stata的清洁程度)的语法都 更加清晰易懂。

因此,对于您的样例,我会运行:

library(Zelig)
logit<-zelig(Y~X1+X2+X3,data=data,model="logit",robust=T,cluster="Z")

好了,完成了!


哇,这似乎是“只要工作”,而我的R代码似乎从来没有这样。这是新功能吗?如果不是,为什么Zelig不是在R中解决这个问题的标准方式? - Philip
不知道,但我希望它能够实现。这个项目似乎非常有雄心壮志!然而,Google小组似乎并不那么活跃,所以不确定进展有多快。 - MichaelChirico
2
不幸的是,我认为该命令在最新版本的Zelig(在CRAN上)中无法使用。我刚刚运行了几个模型,有些带有cluster参数,有些没有,但标准误差完全相同。我相信自从4.0版本以来,也就是我上次使用该软件包以来一直都是这样。 - danilofreire
1
是的,他们目前确实放弃了那个功能。请查看他们的谷歌社区(转到其网站的社区部分)- 他们正在重组整个项目;其中一位开发人员在回复我的帖子时说,他们正在努力恢复集群/鲁棒功能。 - MichaelChirico
5
大约三年后,集群功能仍未恢复:glm.control(cluster = "group")出现错误:unused argument (cluster = "group") - MERose
这个是否已经包含了集群功能,有任何更新吗? - melbez

5
在R包miceadds中有一个名为glm.cluster的命令,似乎可以给出与Stata使用选项vce(cluster)进行逻辑回归时相同的结果。请参见此处的文档here
在此页面的一个示例中,命令如下:
mod2 <- miceadds::glm.cluster(data=dat, formula=highmath ~ hisei + female,
                              cluster="idschool", family="binomial")
summary(mod2)

提供与Stata命令相同的健壮标准误差

logit highmath hisei female, vce(cluster idschool)

例如,变量hisei的标准误差为0.004038。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接