Создание model.matrix в R не помещается в памяти (перепробовал все пакеты отображения памяти)

Я пытаюсь оценить lm() Fitment в R для большого набора данных продаж. Сами данные не настолько велики, что R не может их обработать; около 250 МБ в памяти. Проблема в том, когда lm() вызывается для включения всех переменных и кросс-терминов, конструкция model.matrix() выдает ошибку, говорящую о том, что машине не хватает памяти, и она не может выделить вектор размера (в данном случае около 47 ГБ). Понятно, у меня не так много оперативной памяти. Проблема в том, что я пробовал ff, bigmemory, а также filehash пакеты, все из которых отлично работают для работы вне памяти с существующими файлами (мне особенно нравятся функции базы данных filehash). Но я не могу, ради моей жизни, получить model.matrix быть созданным на всех. Я думаю, проблема в том, что, несмотря на отображение выходного файла в базу данных, которую я создал, R все равно пытается установить его в ОЗУ и не может. Есть ли способ избежать этого с помощью этих пакетов, или я делаю что-то не так? [Также, используя biglm и другие функции, чтобы делать вещи по частям, даже не позволяют мне по частям по одному. Опять же, кажется, R пытается сделать ВСЕ model.matrix во-первых, прежде чем разбить его на куски]

Любая помощь будет принята с благодарностью!

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)

1 ответ

Это основано на примере метода solve-method в пакете Matrix:

> ?`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
Другие вопросы по тегам