当数据量很大时,如何在R中输出多元回归结果

当数据量很大时,如何在R中输出多元回归结果,r,xtable,stargazer,pander,R,Xtable,Stargazer,Pander,我正在研究R中的三个线性回归模型。例如: reg1=lm(y~x1,data=dataset) reg2=lm(y~x2,data=dataset) reg3=lm(y~x3,data=dataset) 我想使用“stargazer”软件包输出这些结果。代码如下: library(stargazer) stargazer(reg1, reg2, reg3, title="Results", align=TRUE,type = "html",style = "qje", out="Table1.

我正在研究R中的三个线性回归模型。例如:

reg1=lm(y~x1,data=dataset)
reg2=lm(y~x2,data=dataset)
reg3=lm(y~x3,data=dataset)
我想使用“stargazer”软件包输出这些结果。代码如下:

library(stargazer)
stargazer(reg1, reg2, reg3, title="Results", align=TRUE,type = "html",style = "qje", out="Table1.html")

但问题是我使用的数据集是巨大的。因此,reg1、reg2和reg3的大小非常大(每个大约为3.8Gb)。我的电脑无法同时保存所有三个回归模型的结果。但直觉上我只需要系数、标准差和p值等。这些项目不应该占用太多空间。如何解决这个问题?

可以将
lm
对象大量剥离,但不是全部剥离。(更具原则性的方法是沿着不同的路线重建
stargazer
,但这需要做更多的工作。)特别是,去除与某些组件相关联的残差和行/列名会有很大帮助(但在上面给出的例子中,它的影响最大,因为只有一个数值预测值;如果有一组更大的预测值,它的帮助将小得多。)
stargazer
工作所需的最大剩余组件是QR矩阵和拟合值

生成一个示例:

set.seed(101)
dd <- data.frame(y=rnorm(1e5),x1=rnorm(1e5),x2=rnorm(1e5),x3=rnorm(1e5))
reg1=lm(y~x1,data=dd)
reg2=lm(y~x2,data=dd)
reg3=lm(y~x3,data=dd)
删除组件的功能:

strip_lm <- function(x) {
    x$residuals <- NULL
    x$model <- NULL
    x$effects <- NULL
    names(x$fitted.values) <- NULL
    dimnames(x$qr$qr) <- NULL
    return(x)
}

请尝试
lm()
model=FALSE
参数。检查--正是为此而设计的。不确定它如何处理复杂的模型,但如果您只需要从线性模型中提取系数,请使用
lm()
,这就行了。@benbolker,添加model=FALSE并不能解决问题。对象仍然很大。@left谢谢你的建议。但我知道如何将结果逐个输出到矩阵中。我只是想将三组结果一起输出到一个好的格式表中。这就是我使用stargazer的原因。相关:谢谢你Ben.It大大减小了对象的大小。但似乎所有的标准偏差都变为0。要么查看
stargazer
/
summary.lm
,要么尝试重新合并/不删除组件,直到找到需要的组件。(看起来您需要保留残差,但您应该能够删除它们的名称)
s(reg1)  ## 24.4 Mb
inspect(reg1)
##  coefficients     residuals       effects          rank fitted.values 
##          0.00          6.87          1.53          0.00          6.87 
##        assign            qr   df.residual       xlevels          call 
##          0.00          7.63          0.00          0.00          0.00 
##         terms         model 
##          0.00          1.53 
strip_lm <- function(x) {
    x$residuals <- NULL
    x$model <- NULL
    x$effects <- NULL
    names(x$fitted.values) <- NULL
    dimnames(x$qr$qr) <- NULL
    return(x)
}
reg1B <- strip_lm(reg1)
s(reg1B)
##2.3 Mb 
inspect(reg1B)
## coefficients          rank fitted.values        assign            qr 
##         0.00          0.00          0.76          0.00          1.53 
##  df.residual       xlevels          call         terms 
##        0.00          0.00          0.00          0.00 
library(stargazer)
res <- capture.output(stargazer(reg1B,reg2,reg3,
          title="Results", align=TRUE,type = "html",
          style = "qje", out="Table1.html"))