2012-11-14 24 views
8

Khi tôi sử dụng mã R sau,Làm thế nào để lưu kết quả glm mà không có dữ liệu hoặc chỉ với các hệ số để dự đoán?

model_glm=glm(V1~. , data=xx,family="binomial"); 
save(file="modelfile",model_glm); 

Kích thước của modelfile sẽ càng nhiều càng tốt các dữ liệu, mà sẽ được 1gig trong trường hợp của tôi. Làm thế nào tôi có thể loại bỏ phần dữ liệu trong kết quả của model_glm, vì vậy tôi chỉ có thể lưu một tệp nhỏ.

+0

Sử dụng gói 'biglm' – hadley

+3

Đặt' model = FALSE' trong cuộc gọi của bạn thành 'glm' để ngăn mô hình.không được trả về. – BenBarnes

Trả lời

6

Đặt model = FALSE trong cuộc gọi của bạn tới glm sẽ ngăn không cho trả lại model.frame. Ngoài ra, thiết lập y = FALSE sẽ ngăn không cho trả lại vectơ phản hồi. x = FALSE là cài đặt mặc định và ngăn không cho trả lại model.matrix.

Sự kết hợp này sẽ thu nhỏ kích thước của đối tượng glm của bạn.

Tất nhiên, bạn cũng có thể trích xuất các hệ số với coef(model_glm) hay, với sai số chuẩn,

summary(model_glm)$coef 
+0

Bạn đã xem xét mô hình kết quả chưa? Nó vẫn còn rất nặng: dư, giá trị được trang bị và ma trận qr đầy đủ. Gói 'biglm' trả về các đối tượng mô hình nhỏ hơn nhiều. – hadley

+0

Có, chức năng 'bigglm' có thể là một sự thay thế khả thi. Nếu bạn đăng nó một câu trả lời, nó sẽ nhận được một phiếu bầu từ tôi. Tuy nhiên, vẫn có thể chọn chỉ các thành phần mong muốn từ đối tượng 'glm' trước khi lưu. – BenBarnes

0

Bạn có thể NULL dữ liệu trong đối tượng mô hình trước khi lưu nó. Tôi đã làm một bài kiểm tra nhanh và vẫn tạo ra những dự đoán.

model_glm$data <- NULL 
6

Tôi gặp vấn đề này khi tôi chạy GLM như một phần của R trong sản xuất và kích thước của GLM làm chậm đáng kể. Tôi thấy tôi cần phải giết nhiều hơn chỉ là $data. Here là bài đăng của tôi trên đó, với ví dụ bên dưới.

> object.size(sg) 
96499472 bytes 
> sg$residuals <- NULL 
> sg$weights <- NULL 
> sg$fitted.values <- NULL 
> sg$prior.weights <- NULL 
> sg$na.action<- NULL 
> sg$linear.predictors <- NULL 
> sg$fitted.values <- NULL 
> sg$effects <-NULL 
> sg$data <- NULL 
> object.size(sg) 
3483976 bytes 
> sg$qr$qr <- NULL 
> object.size(sg) 
79736 bytes 
+0

Chỉ cần một bình luận ... Trong blog của bạn, bạn chỉ có thể đọc những điều được đánh dấu bằng màu vàng –

+0

Bạn cũng có thể làm một cái gì đó như 'sg [c (" số dư "," trọng số "," fitted.values ​​")] <- NULL' nơi bạn làm cho vector đó bao gồm tên của mọi thứ bạn muốn loại bỏ. – Dason

+1

@RichardScriven Oh my - nó đã đốt cháy đôi mắt của tôi. – Dason