【发布时间】:2019-04-10 03:19:23
【问题描述】:
我正在使用大样本和许多协变量运行回归,导致每个大约 10Gb 的 lm 对象(我需要运行几十个回归)。我想保存回归输出,然后将它们导入并使用 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,问题仍然存在。有没有其他方法可以在不占用大量磁盘空间的情况下完成我一直在做的事情?
【问题讨论】:
-
如果您只想保留系数和标准误差,那么
coef(reg1)和vcov(reg1)将只提取您需要的信息。请注意,reg1是一个列表,其中的内容可能比您需要的要多得多。另一种选择是从每个列表中删除/删除您不需要的大项目,例如,reg1$residuals <- NULL。 -
另一种节省空间的方法是只将
summary(reg1)$coefficients写入磁盘。这是一个包含'Estimate'、'Std. Error'、't value'和'Pr(>|t|)'列的数据框。 -
@DanY 我知道我可以以这种方式存储回归输出,但问题是如果我以后不知道如何使用 Stargazer 创建一个以这种方式存储结果的表。
-
@RuiBarradas 这是存储结果的好方法。但是,如果使用 summary(reg1)$coefficients 作为 stargazer 的输入,它将打印整个数据框,而不是创建回归表并在第一列中打印 reg1 结果。