Como minimizar o tamanho do objeto da classe "lm" sem comprometer a sua passagem para prever ()
Eu quero correrlm()
em um grande conjunto de dados com mais de 50 milhões de observações com 2 preditores. A análise é executada em um servidor remoto com apenas 10 GB para armazenar os dados. Eu testei 'lm ()' em 10 mil observações amostradas dos dados e o objeto resultante tinha tamanho 2 GB +.
Eu preciso do objeto da classe "lm" retornado delm()
SOMENTE para produzir as estatísticas resumidas do modelo (summary(lm_object)
) e fazer previsões (predict(lm_object)
)
Eu fiz um experimento com as opçõesmodel, x, y, qr
dolm
. Se eu definir todos eles paraFALSE
Reduzo o tamanho em 38%
library(MASS)
fit1=lm(medv~lstat,data=Boston)
size1 <- object.size(fit1)
print(size1, units = "Kb")
# 127.4 Kb bytes
fit2=lm(medv~lstat,data=Boston,model=F,x=F,y=F,qr=F)
size2 <- object.size(fit2)
print(size2, units = "Kb")
# 78.5 Kb Kb bytes
- ((as.integer(size1) - as.integer(size2)) / as.integer(size1)) * 100
# -38.37994
mas
summary(fit2)
# Error in qr.lm(object) : lm object does not have a proper 'qr' component.
# Rank zero or should not have used lm(.., qr=FALSE).
predict(fit2,data=Boston)
# Error in qr.lm(object) : lm object does not have a proper 'qr' component.
# Rank zero or should not have used lm(.., qr=FALSE).
Aparentemente eu preciso manterqr=TRUE
que reduzem o tamanho do objeto em apenas 9% se comparado ao objeto padrão
fit3=lm(medv~lstat,data=Boston,model=F,x=F,y=F,qr=T)
size3 <- object.size(fit3)
print(size3, units = "Kb")
# 115.8 Kb
- ((as.integer(size1) - as.integer(size3)) / as.integer(size1)) * 100
# -9.142752
Como reduzo ao mínimo o tamanho do objeto "lm" sem despejar muitas informações desnecessárias na memória e no armazenamento?