2017-06-11 15 views
5

私は2^31以上の観測値を含む大量のデータを扱っています。実際の観測回数は35億回にも及ぶ。2^31以上の観測値を持つbiglmの使い方

私はRパッケージ "biglm"を使用して、約70の予測変数で回帰を実行しています。私は一度に100万行のデータを読み込み、回帰結果を更新します。データは、Rライブラリ "ffdf"を使用してffdf形式で保存され、すばやくロードし、すべてのRAMを使い果たしません。ここで

は、私が使用していたコードの基本的なアウトラインです:

library(ff,ffbase,biglm) 
load.ffdf(dir='home') 

dim(data) #the ffdf contains about 70 predictors and 3.5 billion rows 

chunk_1 <- data[1:1000000,] 
rest_of_data <- data[1000000:nrow(data),] 

# Running biglm for first chunk 
b <- biglm(y~x1+x2+...+x70, chunk_1) 

chunks <- ceiling((nrow(rest_of_data)/1000000) 

# Updating biglm results by iterating through the rest of the data chunks 
for (i in seq(1,chunks)){ 
     start <- 1+((i-1))*1000000 
     end <- min(i*1000000,nrow(d)) 
     d_chunk <- d[start:end,] 
     b<-update(b,d_chunk) 
} 

結果は素晴らしい見て、データの各チャンクでモデルを更新からの観測の累積数が2を超えるまで、すべてがスムーズに実行されています^ 31の観測。次に、読み取るエラーが発生する

In object$n + NROW(mm) : NAs produced by integer overflow 

このオーバーフローの問題を回避するにはどうすればよいですか?あなたの助けを前もってありがとう!

+1

@DavidArenburg現在、64ビットシステムを使用していますが、私はR 3.4.0を使用していました。しかし、私はまだ整数オーバーフローの問題にぶち当たっていました。 – Eunice

+0

本当に1.8TBのデータセットがありますか? –

答えて

7

私はbiglmコードで問題の原因を見つけたと思います。

観測数(n)は、has a max value2^31 - 1の整数で格納されます。

numericタイプはこの制限の対象ではなく、私が知る限り、nを格納する整数の代わりに使用できます。

Here is a commit on githubnnumericに変換するコードを1行追加してこの問題を解決する方法を示しています。モデルが更新されると、新しいバッチの行数が古いnに追加されるため、nのタイプはnumericのままです。

私はこの質問に記載されているエラーを再現し、私の修正プログラムは、このコードで動作することを確認することができた:(WARNING

:あなた場合、これは、大量のメモリを消費し、より小さな配列を使用してより多くの反復を行うことを検討元biglmライブラリで

library(biglm) 
df = as.data.frame(replicate(3, rnorm(10000000))) 
a = biglm(V1 ~ V2 + V3, df) 
for (i in 1:300) { 
    a = update(a, df) 
} 
print(summary(a)) 

)厳しいメモリ制約を持って、このコードの出力:

Large data regression model: biglm(ff, df) 
Sample size = NA 
       Coef (95% CI) SE p 
(Intercept) -1e-04 NA NA NA NA 
V2   -1e-04 NA NA NA NA 
V3   -2e-04 NA NA NA NA 

私のパッチを適用したバージョンの出力:

Large data regression model: biglm(V1 ~ V2 + V3, df) 
Sample size = 3.01e+09 
       Coef (95% CI) SE p 
(Intercept) -3e-04 -3e-04 -3e-04 0 0 
V2   -2e-04 -2e-04 -1e-04 0 0 
V3   3e-04 3e-04 3e-04 0 0 

SEとpの値はゼロではなく、上記の出力で丸められます。

私はRエコシステムをかなり新しくしています。誰かがこのパッチを提出する方法を教えてくれたら元の著者が見直し、最終的にアップストリームパッケージに含めることができたらうれしいです。

+0

残念ながら、biglmパッケージは放棄されるように見えます。最後のリリースは4年前です。幸運なことに、オープンソースなので、誰でも自分のシステムに変更を加えてコンパイルすることができます(+1)。 –

+0

うわー、これは素晴らしいです。ご助力ありがとうございます!これは私にはたくさんのことを意味し、大きなデータを使って作業する他の人にとっては役に立ちそうです。 – Eunice

+1

自動化されていませんが、 $ n <-as.numeric(rval $ n) '直後の' 'rval < - list(...) ' – rawr

関連する問題