큰 판매 데이터 세트의 lm()
R 값을 추정하려고합니다. 데이터 자체가 너무 커서 R이 처리 할 수 없습니다. 약 250MB의 메모리. 문제는 모든 변수와 교차 단어를 포함하도록 lm()
을 호출 할 때 model.matrix()
의 구성에서 시스템 메모리가 부족하여 크기가 벡터 인 경우 (약 47GB)를 할당 할 수 없다는 오류가 발생합니다. 이해할 수있는, 나는 그다지 RAM이 없다. 문제는, 내가 ff
, bigmemory
및 filehash
패키지를 시도했는데, 모두 기존 파일 (특히 데이터베이스 기능이 filehash
)과 함께 메모리 외부에서 작업 할 때 적합합니다. 그러나 나는 내 삶을 위해서 model.matrix
을 전혀 만들 수 없습니다. 나는 문제는, 내가 만든 데이터베이스에 출력 파일을 매핑 했음에도 불구하고, R은 RAM에 그것을 설정하려고 시도하고, 그렇게 할 수 없다고 생각한다. 이 패키지를 사용하지 않도록하는 방법이 있습니까, 아니면 제가 잘못하고있는 것입니까? [biglm
및 기타 기능을 사용하여 청크 와이즈를 수행하더라도 한 번에 하나씩 청크를 허용하지 않습니다. 다시, R은 그것을 청킹하기 전에 먼저 model.matrix
을 만들려고 시도합니다.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' 패키지로부터 희소 행렬을 사용하여 시도. –
몇 개의 변수가 있습니까? 얼마나 많은 관측이 있었습니까? – MrFlick
@NealFultz, 그 트릭을 했어, 고마워. 매트릭스는 이제 메모리 공간을 차지하고 있습니다. 그러나 (그리고 이것은 초보적인 것일 수도 있습니다.) 먼저,'model.matrix'를 생성 한 다음,'lm' 함수에 연결하는 방법을 찾았습니다. 나는 일찍 오류를 던지고 있었다. 그것을하기위한 방법이 있는가, 또는'lm' 호출에서'model.matrix' 생성을 지정하여 그것을 희귀 한 것으로 만드는 방법이 있습니까? @MrFlick, 원래 데이터 세트에는 약 750,000 회의 관측치가 있고 집계 된 데이터에는 약 113,000 개의 데이터가 있고 변수 6 개에는 요인이 있고 그 중 2 개에는 100 개가 넘는 변수가 있습니다. –