我正在尝试运行以下回归:
m1=glm(y~x1+x2+x3+x4,data=df,family=binomial())
m2=glm(y~x1+x2+x3+x4+x5,data=df,family=binomial())
m3=glm(y~x1+x2+x3+x4+x5+x6,data=df,family=binomial())
m4=glm(y~x1+x2+x3+x4+x5+x6+x7,data=df,family=binomial())
然后使用打印它们观星者包裹:
stargazer(m1,m2,m3,m4 type="html", out="models.html")
事实是,数据框 df 相当大(~600MB),因此我创建的每个 glm 对象至少~1.5GB。
这会产生内存问题,导致我无法创建需要打印的所有回归观星者.
我尝试了两种方法来减小 glm 对象的大小:
- 使用修剪 glm 对象this http://www.r-bloggers.com/trimming-the-fat-from-glm-models-in-r/教程。这确实将 glm 对象修剪到
Error in Qr$qr[p1, p1, drop = FALSE] : incorrect number of dimensions
- 使用包speedglm。但是,它不支持观星者.
有什么建议么?
对我来说效果很好的一个选项是首先使用以下命令将大型 *lm 对象转换为“coeftest”类lmtest
包裹。 “coeftest”对象实际上只是汇总回归结果的矩阵,因此几乎不占用任何空间。此外,Stargazer 很容易接受“coeftest”类作为输入,因此您的代码根本不需要进行太多更改。
使用你的例子:
library(lmtest)
m1 <- glm(y~x1+x2+x3+x4,data=df,family=binomial())
m1 <- coeftest(m1)
m2 <- glm(y~x1+x2+x3+x4+x5,data=df,family=binomial())
m2 <- coeftest(m2)
m3 <- glm(y~x1+x2+x3+x4+x5+x6,data=df,family=binomial())
m3 <- coeftest(m3)
m4 <- glm(y~x1+x2+x3+x4+x5+x6+x7,data=df,family=binomial())
m4 <- coeftest(m4)
stargazer(m1,m2,m3,m4 type="html", out="models.html")
除了解决内存问题之外,这种方法还有一个额外的好处:coeftest()
转变本身非常快。 (嗯,有一个值得注意的例外,当您要求它通过调用“vcov = vcovHC”选项在特别大的 *lm 对象上产生健壮/聚集的标准错误时。但是,即使如此,coeftest()
转换是首先导出稳健回归结果的必要步骤。)
这种方法的一个小缺点是它不会保存 Stargazer 表可能感兴趣的一些回归统计数据(例如 R 平方或 N)。但是,您可以在转换 *lm 对象之前轻松获取它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)