2012-06-29 6 views
15

Gói data.table rất hữu ích về mặt tốc độ. Nhưng tôi đang gặp rắc rối thực sự sử dụng đầu ra từ hồi quy tuyến tính. Có một cách dễ dàng để có được đầu ra data.table được khá/hữu ích như là từ gói plyr? Dưới đây là một ví dụ. Cảm ơn bạn!Đầu ra hồi quy dữ liệu có thể xảy ra vs plyr

library('data.table'); 
library('plyr'); 

REG <- data.table(ID=c(rep('Frank',5),rep('Tony',5),rep('Ed',5)), y=rnorm(15), x=rnorm(15), z=rnorm(15)); 
REG; 

ddply(REG, .(ID), function(x) coef(lm(y ~ x + z, data=x))); 

REG[, coef(lm(y ~ x + z)), by=ID]; 

Ước tính hệ số có thể được xuất trong một cột duy nhất trong khi ước tính hệ số plyr/ddply được xuất trong nhiều cột được gắn nhãn độc đáo.

Tôi biết tôi có thể chạy hồi quy ba lần với data.table nhưng điều đó có vẻ thực sự không hiệu quả. Tôi có thể sai mặc dù.

REG[, Intercept=coef(lm(y ~ x + z))[1], 
     x  =coef(lm(y ~ x + z))[2], 
     z  =coef(lm(y ~ x + z))[3], by=ID]; 

Trả lời

13

Hãy thử điều này:

> REG[, as.list(coef(lm(y ~ x + z))), by=ID]; 
     ID (Intercept)   x   z 
[1,] Frank -0.2928611 0.07215896 1.835106 
[2,] Tony 0.9120795 -1.11153056 2.041260 
[3,] Ed 1.0498359 5.77131778 -1.253741 

Tôi có cảm giác dai dẳng rằng câu hỏi này đã được hỏi ít hơn một tuần trước đây, nhưng tôi không nghĩ rằng tôi đến phương pháp này khi tôi đã thử nó và tôi không nhớ bất kỳ câu trả lời nào là nhỏ gọn này.

Ồ, ở đó có .. trên trợ giúp. Matthew có thể bình luận về sự đúng đắn của điều này nếu anh ta muốn. Tôi đoán thông báo là các hàm trả về danh sách sẽ không có thứ nguyên bị giảm. Điều thú vị là việc sử dụng list(coef(lm(...)) đã không thành công theo cách chúng tôi hy vọng.

+1

Có [this] (http://stackoverflow.com/questions/11233183/grouping-in-data-table-how-to-get-more-than-1-column-of-results/11233262#11233262) từ hôm qua (xem phần bình luận thứ hai cho câu trả lời của tôi) nhưng thật tuyệt khi có bản demo này nổi bật hơn. –

+1

Và lưu ý rằng 'list()' không phải là câu trả lời. –

+1

Đó là lý do tại sao tôi tham chiếu bình luận;) (Chỉ cần cố gắng thể hiện từ bạn, nơi bạn có thể có cảm giác dai dẳng đó.) –