2012-05-08 19 views
8

Tengo un gran conjunto de datos con el que trabajo en R usando algunos de los paquetes big.___(). Es ~ 10 gigas (100mmR x 15C) y se ve así:R biglm con variables categóricas

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

Estoy tratando de predecir el precio basado en Var1 y var2.

El problema que he encontrado es que Var1 y Var2 son variables categóricas/de factores.
Var1 y Var2 cada uno tiene 3 niveles (1,2 y 3), pero sólo hay 6 combinaciones en el conjunto de datos

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

Para utilizar variables de factor en biglm() que deben estar presentes en cada fragmento de datos que biglm usos (mi opinión es que biglm rompe el conjunto de datos en número 'x' de trozos y actualiza los parámetros de regresión después de analizar cada trozo con el fin de conseguir alrededor de tratar con conjuntos de datos que son más grandes que la RAM).

He tratado de crear un subconjunto de datos, pero el ordenador no puede manejarlo o mi código es incorrecto:

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

Lo anterior me da un montón de estos:

Error: cannot allocate vector of size 1.1 Gb 

¿El Alguien tiene alguna sugerencia para solucionar este problema?

Estoy usando R 64 bits en una máquina de Windows 7 con 4 gigas de RAM.

+0

¿Podrías crear los muñecos tú mismo y ejecutar 'biglm' en ellos? –

+0

@ gsk3: Eso es lo que hice antes de darme cuenta de que necesitan estar presentes en cada fragmento. Ejecuté Biglm con éxito y luego recibí un mensaje de error cuando traté de predecir nuevos valores y no todos estaban presentes en los parámetros de regresión. – screechOwl

Respuesta

9

No necesita todos los datos o todos los valores presentes en cada fragmento, solo necesita todos los niveles contabilizados. Esto significa que puede tener un fragmento como este:

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

y funcionará. Aunque solo hay 1 valor en Var1 y 2 valores en Var2, los tres niveles están presentes en ambos, por lo que hará lo correcto.

También biglm no divide los datos en fragmentos para usted, pero espera que le dé fragmentos manejables para trabajar. Trabaja con los ejemplos para ver esto mejor. Una metodología común con biglm es leer desde un archivo o base de datos, leer las primeras 'n' filas (donde 'n' es un subconjunto de argumentos) y pasarlas al biglm (posiblemente después de asegurarse de que todos los factores tengan todos los niveles especificados), luego elimine ese trozo de datos de la memoria y lea en las próximas 'n' filas y páselo a update, continúa con esto hasta el final del archivo eliminando los trozos usados ​​cada vez (para que tenga suficiente espacio de memoria para el próximo uno).

Cuestiones relacionadas