2014-10-14 24 views
6

Tôi tự hỏi là có một cách để tóm tắt đầu ra cho hồi quy sườn núi trong R? Đó là kết quả của hàm lm.ridge{MASS}.Làm thế nào để thực hiện tóm tắt lm.ridge?

Đối với mô hình tuyến tính chuẩn, bạn chỉ cần thực hiện summary(lm_model) nhưng mô hình hồi quy sườn núi thì sao? Cảm ơn bạn đã trợ giúp.

Trả lời

9

Tôi vừa thêm phương thức tóm tắt (hoặc chính xác hơn, tidies) "ridgelm" đối tượng vào gói broom của mình. Điều này có dạng của hai Generics S3: tidyglance. Bạn có thể cài đặt nó với devtools::install_github("dgrtwo/broom") (mặc dù trước tiên bạn sẽ cần cài đặt devtools).

Như một ví dụ, chúng ta hãy thiết lập một hồi quy sườn núi:

library(MASS) 
names(longley)[1] <- "y" 
fit <- lm.ridge(y ~ ., longley, lambda = seq(0.001, .05, .001)) 

Chức năng tidy cung cấp một khung dữ liệu cho thấy mỗi sự kết hợp của lambda và thời hạn dự kiến:

library(broom) 
td <- tidy(fit) 
head(td) 
## lambda GCV term estimate 
## 1 0.001 0.1240 GNP 23.02 
## 2 0.002 0.1217 GNP 21.27 
## 3 0.003 0.1205 GNP 19.88 
## 4 0.004 0.1199 GNP 18.75 
## 5 0.005 0.1196 GNP 17.80 
## 6 0.006 0.1196 GNP 16.99 

Trong khi glance chức năng tạo một bản tóm tắt một hàng, đặc biệt là các lựa chọn của lambda theo các phương pháp khác nhau:

g <- glance(fit) 
g 
##  kHKB  kLW lambdaGCV 
## 1 0.006837 0.05267  0.006 

này rất hữu ích vì nó giúp bạn dễ dàng vẽ và khám phá dữ liệu cho mình chứ không phải dựa vào máy vẽ MASS của:

library(ggplot2) 
ggplot(td, aes(lambda, estimate, color = term)) + geom_line() 

enter image description here

# plot of GCV versus lambda 
ggplot(td, aes(lambda, GCV)) + geom_line() + 
    geom_vline(xintercept = g$lambdaGCV, col = "red", lty = 2) 

enter image description here

Để biết thêm về các phương pháp , xem ?ridgelm_tidiers hoặc xem họa tiết của gói để biết thêm thông tin về các phương pháp tidyglance nói chung.

+0

Thay vì nháy mắt Bạn có thể sử dụng chức năng dựng sẵn 'chọn' - nó hoạt động giống nhau. Hàm ggplot hoạt động giống như plot.lmridge thông thường (nhưng tất nhiên trông có vẻ pritty hơn). –

+2

@MarcinKosinski: 'select' không hoạt động theo cách tương tự vì nó * in * các giá trị đã chọn thay vì trả lại chúng (vì vậy không có cách nào để lưu chúng, trích xuất chúng, kết hợp chúng hoặc thêm chúng vào biểu đồ, ví dụ). 'plot.ridgelm' tạo ra một đồ thị tương tự, nhưng đáng chú ý là nó không đi kèm với một huyền thoại, hoặc một cách để chọn màu sắc. (Thực ra vì 'plot.ridgelm' không truyền theo' ... 'thành' matplot', bạn có khả năng hạn chế tùy chỉnh nó). –

+0

Ok tôi hiểu rồi. Cảm ơn :) –

2

Không có phương pháp summary cho lớp ridgelm:

> methods(class = 'ridgelm') 
[1] coef.ridgelm* plot.ridgelm* print.ridgelm* select.ridgelm* 

tóm tắt này phải trả lại gì? Bạn có thể trích xuất tất cả thông tin bạn cần từ đối tượng ridgelm.

Tuy nhiên, bạn cũng có thể viết các phương pháp tóm tắt của riêng mình cho các mục đích của mình (kiểm tra mã cho summary.lm() để bắt đầu). Nếu bạn hài lòng với nó, bạn có thể gửi cho người bảo trì của MASS.

+0

Bạn thực sự nghĩ rằng họ sẽ quan tâm và xuất bản chức năng này trong gói của họ? –

+1

Bạn có thể nhận được câu trả lời thú vị. Nói chung, Giáo sư Ripley sẽ đưa vào các chức năng hỗ trợ khi ông cho rằng chúng phù hợp, vì vậy có thể có lý do mà ông không làm. –

+0

Tôi không nhận được bạn –

1

bạn có thể sử dụng gói lmridge của tôi từ CRAN.

+0

Tôi sẽ đánh giá cao việc mở rộng câu trả lời với một trường hợp sử dụng ngắn và có lẽ là tài liệu mà tôi có thể tham khảo! Cảm ơn trước. –

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