2012-05-08 36 views
8

Tôi có một tập dữ liệu lớn tôi làm việc với R bằng cách sử dụng một số gói big.___(). Đó là ~ 10 hợp đồng biểu diễn (100mmR x 15C) và trông giống như sau:R biglm với các biến phân loại

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

Tôi đang cố gắng dự đoán giá dựa trên Var1 và Var2.

Vấn đề tôi đã đưa ra là Var1 và Var2 là các biến phân loại/yếu tố.
var1 và var2 từng có 3 cấp độ (1,2 và 3) nhưng chỉ có 6 kết hợp trong các dữ liệu thiết

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

Để sử dụng các biến yếu tố trong biglm() họ phải có mặt trong mỗi đoạn dữ liệu mà biglm sử dụng (hiểu biết của tôi là biglm chia dữ liệu thành số x 'x' của các khối và cập nhật các thông số hồi quy sau khi phân tích từng đoạn để xử lý các tập dữ liệu lớn hơn RAM).

Tôi đã cố gắng để tập hợp con các dữ liệu nhưng máy tính của tôi không thể xử lý nó hoặc mã của tôi là sai:

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

Trên đây mang lại cho tôi một bó của những:

Error: cannot allocate vector of size 1.1 Gb 

Liệu bất cứ ai có bất cứ đề nghị để làm việc xung quanh vấn đề này?

Tôi đang sử dụng R 64 bit trên máy tính Windows 7 có 4 bộ nhớ RAM.

+0

Bạn có thể tự tạo các núm vú giả và chạy 'biglm' trên chúng không? –

+0

@ gsk3: Đó là những gì tôi đã làm trước khi nhận ra rằng họ cần phải có mặt trong mỗi đoạn. Tôi chạy biglm thành công sau đó nhận được một thông báo lỗi khi tôi đã cố gắng để dự đoán giá trị mới và họ không phải tất cả đều có trong các thông số hồi quy. – screechOwl

Trả lời

9

Bạn không cần tất cả dữ liệu hoặc tất cả các giá trị có trong mỗi đoạn, bạn chỉ cần tất cả các cấp được tính. Điều này có nghĩa là bạn có thể có một đoạn như thế này:

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

và nó sẽ hoạt động. Mặc dù chỉ có 1 giá trị trong các giá trị Var1 và 2 trong Var2, tất cả ba cấp độ đều có mặt ở cả hai vì vậy nó sẽ làm điều đúng.

Ngoài ra biglm không chia dữ liệu thành các phần cho bạn, nhưng hy vọng bạn sẽ cung cấp cho nó khối dữ liệu có thể quản lý được. Làm việc thông qua các ví dụ để thấy điều này tốt hơn. Phương pháp phổ biến với biglm là đọc từ tệp hoặc cơ sở dữ liệu, đọc trong hàng 'n' đầu tiên (trong đó 'n' là tập con hợp lý) và chuyển chúng đến biglm (có thể sau khi đảm bảo tất cả các yếu tố có tất cả các cấp được chỉ định)), sau đó loại bỏ dữ liệu đó khỏi bộ nhớ và đọc trong các hàng 'n' tiếp theo và chuyển nó tới update, tiếp tục với điều này cho đến khi kết thúc tệp loại bỏ các khối đã sử dụng mỗi lần (để bạn có đủ bộ nhớ cho một).

Các vấn đề liên quan