R biglm与分类变量

时间:2012-05-08 16:50:05

标签: r

我使用一些big.___()包在R中使用了大量数据集。这是~10演出(100mmR x 15C),看起来像这样:

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是分类/因子变量 Var1和Var2各有3个级别(1,2和3),但数据集中只有6种组合

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

要在biglm()中使用因子变量,它们必须出现在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机器上使用R 64位w / 4演出RAM。

1 个答案:

答案 0 :(得分: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个值,但两者都存在所有三个级别,因此它会做正确的事情。

此外,biglm不会将数据分成多个块,但是您希望为其提供可管理的块。通过示例来更好地了解这一点。使用biglm的常用方法是从文件或数据库中读取,读取第一个“n”行(其中“n”是合理的子集)并将它们传递给biglm(可能在确定之后)所有因素都指定了所有级别),然后从内存中删除该数据块并在下一行'n'行中读取并将其传递给update,继续此操作直到文件末尾删除使用过的块每次(所以你有足够的记忆空间用于下一个)。