我正在尝试估算大型销售数据集中的lm()
装备。数据本身并不大,以至于R无法处理它;内存大约250MB。问题是当lm()
被调用以包含所有变量和交叉项时,model.matrix()
的构造会抛出错误,指出机器已经耗尽内存并且无法分配大小的向量(在这种情况下,约47GB)。可以理解,我没有那么多RAM。问题是,我尝试了ff
,bigmemory
和filehash
包,所有这些都适用于在现有文件之外使用现有文件(我特别喜欢数据库的数据库功能) filehash
)。但是,对于我的生活,我不能完全创造model.matrix
。我认为问题在于,尽管将输出文件映射到我创建的数据库,R仍试图将其设置在RAM中,并且无法进行。有没有办法避免使用这些包,或者我做错了什么?
[另外,使用biglm
和其他功能来做事情,甚至不允许我一次一个块。再一次,似乎R试图在整理之前先将model.matrix
作为整体{1}}
非常感谢任何帮助!
library(filehash)
library(ff)
library(ffbase)
library(bigmemory)
library(biganalytics)
library(dummies)
library(biglm)
library(dplyr)
library(lubridate)
library(data.table)
SID <- readRDS('C:\\JDA\\SID.rds')
SID <- as.data.frame(unclass(SID)) # to get characters as Factors
dbCreate('reg.db')
db <- dbInit('reg.db')
dbInsert(db, 'SID', SID)
rm(SID)
gc()
db$summary1 <-
db$SID %>%
group_by(District, Liable, TPN, mktYear, Month) %>%
summarize(NV.sum = sum(NV))
start.time <- Sys.time()
# Here is where it throws the error:
db$fit <- lm(NV.sum ~ .^2, data = db$summary1)
Sys.time() - start.time
rm(start.time)
gc()
summary(fit)
anova(fit)
答案 0 :(得分:0)
这是基于Matrix包中的solve-methods的例子:
> ?`solve-methods`
> n1 <- 7; n2 <- 3
> dd <- data.frame(a = gl(n1,n2), b = gl(n2,1,n1*n2))# balanced 2-way
> X <- sparse.model.matrix(~ -1+ a + b, dd)# no intercept --> even sparser
> Y <- rnorm(nrow(X))
> # Forming normal equations manually and solving for beta-hat
> solve(crossprod(X), crossprod(X, Y))
9 x 1 Matrix of class "dgeMatrix"
[,1]
[1,] 1.2384385
[2,] 1.3313779
[3,] 0.7497135
[4,] 0.7840841
[5,] 0.9586135
[6,] 0.4667769
[7,] 1.6648260
[8,] -1.6669776
[9,] -1.1142240