仅存储回归系数和统计量,然后使用Stargazer导出它们

时间:2018-11-06 17:18:33

标签: r stargazer

我正在使用大量样本和许多协变量进行回归,导致每个lm对象约10Gb(我需要进行数十次回归)。我想保存回归输出,以后再导入它们,并使用Stargazer创建表。我一直通过以下方式进行此操作:

#Fake dataset
set.seed(1)
dataset<- data.frame(
x = rnorm(100),
z = rnorm(100),
w = rnorm(100),
y = rnorm(100) + 2*x + 3*w,
)

#Running regressions and storing them
reg1<-lm(y ~ x + z, data=dataset)
saveRDS(reg1, "reg1.rds")
rm(reg1)

reg2<-lm(y ~ x + w, data=dataset)
saveRDS(reg2, "reg2.rds")
rm(reg2)

#Later, I decide which models to report and export outputs tables using Stargazer
reg1<-read_rds("reg1.rds")
reg2<-read_rds("reg2.rds")
stargazer(reg1,reg2, type="text")

Here在此示例中找到了Stargazer的输出(对不起,我是新成员,并且Stack Overflow不允许我在帖子中嵌入图片)

此问题是rds文件太大,占用了我HD的大量内存空间。即使在lm()函数中设置了选项model = FALSE,问题仍然存在。是否有另一种方法可以在不使用大量磁盘空间的情况下做我一直在做的事情?

1 个答案:

答案 0 :(得分:0)

存储summary结果的建议实际上是针对您的目标的。您还需要知道的是观星者从model.object中获取的确切价值。帮助页面上并未对此进行详细描述,但是一旦您查看其代码,它就很明显了。这是stargazer使用的核心功能的顶部。如果您的控制台存储了足够的代码行,您也许可以看到它(但是我的Rstudio安装没有,所以我从CRAN下载包并解压缩后在编辑器中查看了它):

stargazer:::.stargazer.wrap  # scrolls off the top of my console
# cut from stargazer-internal.R
.stargazer.wrap <-
  function(..., type, title, style, summary, out, out.header, covariate.labels, column.labels, column.separate, 
           dep.var.caption, dep.var.labels, dep.var.labels.include, align, coef, se, t, p, t.auto, 
           p.auto, ci, ci.custom, ci.level, ci.separator, add.lines, apply.coef, apply.se, apply.t, apply.p, apply.ci,
           colnames,
           column.sep.width, decimal.mark, df, digit.separate, digit.separator, digits, digits.extra, 
           flip, float, 
           float.env, font.size, header, initial.zero, intercept.bottom, intercept.top, keep, keep.stat, 
           label, model.names, model.numbers, multicolumn, no.space, notes, notes.align, notes.append, 
           notes.label, object.names, omit, omit.labels, omit.stat, omit.summary.stat, omit.table.layout,
           omit.yes.no, order, ord.intercepts, perl, report, rownames,
           rq.se, selection.equation, single.row, star.char, star.cutoffs, suppress.errors, 
           table.layout, table.placement, 
           zero.component, summary.logical, summary.stat, nobs, mean.sd, min.max, median, iqr, warn) {

  .add.model <-
  function(object.name, user.coef=NULL, user.se=NULL, user.t=NULL, user.p=NULL, auto.t=TRUE, auto.p=TRUE, user.ci.lb=NULL, user.ci.rb=NULL) {

    if (class(object.name)[1] == "Glm") {
        .summary.object <<- summary.glm(object.name)
    }
    else if (!(.model.identify(object.name) %in% c("aftreg", "coxreg","phreg","weibreg", "Glm", "bj", "cph", "lrm", "ols", "psm", "Rq"))) {
      .summary.object <<- summary(object.name)
    }
    else {
      .summary.object <<- object.name
    }

因此,要诱骗观星者,所需要做的就是将摘要对象内容的类更改为原始模型的类。

(保存此内容并将返回示例代码。)

糟糕。我回到您的问题来设置我的测试代码,但可悲的是……它没有[MCVE]。我将在此处添加代码以实现该目标,但是我通常会通过完整的示例保留该服务以供查询。如果还不够的话,您应该参考How to make a great R reproducible example并编辑问题。