2012-05-08 12 views
8

big.___()パッケージを使用してRで作業している大きなデータセットがあります。それは〜10回のギグ(100mmR X 15C)だとこのようになります:私はVAR1とVAR2に基づいて価格を予測しようとしていますカテゴリ変数を持つbiglm

Price   Var1   Var2 
12.45   1    1 
33.67   1    2 
25.99   3    3 
14.89   2    2 
23.99   1    1 
...   ...   ... 

私が思いついた問題は、Var1とVar2がカテゴリ/要因変数であるということです。
VAR1とVAR2それぞれ有する3つのレベル(1,2及び3)が、データの唯一6の組み合わせは、それらがデータの各チャンク内に存在しなければならないbiglm()の要因変数を使用する

(1,1; 1,2; 1,3; 2,2; 2,3; 3,3) 

を設定あるbiglmその(私の理解は、biglmがデータセットを 'x'個のチャンクに分割し、RAMよりも大きいデータセットを扱うために各チャンクを分析した後に回帰パラメータを更新するということです)。私は、データのサブセットを試みたが、私のコンピュータはそれを扱うことができないか、私のコードが間違っている

bm11 <- big.matrix(150000000, 3) 
bm11 <- subset(x, x[,2] == 1 & x[,3] == 1) 

上記は私にこれらの束を与える:

Error: cannot allocate vector of size 1.1 Gb 

はい誰でもこの問題を回避するための提案はありますか?

私はWindows 7マシンで4ギガバイトのRAMを使用しています。

+0

ダミーを自分で作成し、その上に 'biglm'を実行できますか? –

+0

@ gsk3:それは私が彼らが各塊に存在する必要があることを理解する前にやったことです。 biglmを正常に実行した後、新しい値を予測しようとしたときにエラーメッセージが表示され、すべてが回帰パラメータに含まれていなかった。 – screechOwl

答えて

9

各チャンクに存在するすべてのデータまたはすべての値を必要とするわけではなく、すべてのレベルを考慮する必要があります。つまり、次のようなチャンクを持つことができます。

curchunk <- data.frame(Price=c(12.45, 33.67), Var1=factor(c(1,1), levels=1:3), 
    Var2 = factor(1:2, levels=1:3)) 

となります。 Var1には1つの値しかなく、Var2には2つの値があるにもかかわらず、3つのレベルは両方に存在しているため、正しいことを行います。

また、biglmは、データをチャンクに分割しませんが、扱いやすいチャンクを与えることを期待しています。これをより良く見るために例を試してください。 biglmの一般的な方法は、ファイルまたはデータベースから読み込み、最初の 'n'行(ここで 'n'は合理的なサブセットです)を読み込み、biglmに渡すことです(すべての要素にすべてのレベルが指定されていることを確認した後)、そのデータのチャンクをメモリから削除し、次の 'n'行を読み込んでそれをupdateに渡して、ファイルの最後まで毎回使用するチャンクを削除するまで続けます。 1)。

関連する問題