当数据量很大时,如何在R中输出多元回归结果
我正在研究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.
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"))