2

lm()大規模な販売データセットに対する R の適合性を見積もろうとしています。データ自体は、R が処理できないほど大きくはありません。メモリは約250MB。問題はlm()、すべての変数と交差項を含めるために が呼び出されると、 の構築でmodel.matrix()、マシンのメモリが不足し、サイズのベクトル (この場合は約 47GB) を割り当てることができないというエラーがスローされることです。当然のことながら、私はそれほど多くの RAM を持っていません。問題は、ffbigmemory、およびfilehashパッケージを試してみたことです。これらはすべて、既存のファイルを使用してメモリ外で作業する場合に問題なく動作します (特に のデータベース機能が気に入っていますfilehash)。しかし、私は私の人生のために、得ることはできませんmodel.matrixまったく作成されません。問題は、出力ファイルを私が作成したデータベースにマッピングしたにもかかわらず、R がとにかくそれを RAM に設定しようとして、できないことだと思います。これらのパッケージを使用してこれを回避する方法はありますか、それとも何か間違っていますか? [また、biglmおよび他の関数を使用してチャンク単位で処理しても、一度に 1 つずつチャンクすることさえできません。model.matrix繰り返しますが、R はチャンクする前に最初に全体を作成しようとしているようです]

どんな助けでも大歓迎です!

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)
4

1 に答える 1

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
于 2014-12-09T18:40:36.247 に答える