Я пытаюсь оценить lm()
установку в 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)
Matrix
. - person Neal Fultz   schedule 09.12.2014model.matrix
, а затем просто подключить его к функцииlm
. Раньше я выдавал ошибки; есть ли способ сделать это или указать созданиеmodel.matrix
в вызовеlm
, чтобы сделать его разреженным? @MrFlick, в исходном наборе данных около 750 000 наблюдений, в агрегированном (тот, который я использую) около 113 000 и 6 переменных, 5 из которых являются факторами, а 2 из которых имеют более 100 уровней. - person Ryan Price   schedule 09.12.2014