2013-04-22 80 views
9

Tôi có biến kết quả, nói Y và danh sách 100 thứ nguyên có thể ảnh hưởng đến Y (nói X1 ... X100).Chọn các biến có ý nghĩa thống kê trong mô hình R glm

Sau khi chạy glm và xem tóm tắt mô hình của mình, tôi thấy các biến đó có ý nghĩa thống kê. Tôi muốn có thể chọn các biến đó và chạy mô hình khác và so sánh hiệu suất. Có cách nào tôi có thể phân tích tóm tắt mô hình và chỉ chọn những tóm tắt có ý nghĩa không?

+1

Dùng thử gói [glmulti] (http://www.jstatsoft.org/v34/i12/paper). – krlmlr

+4

Ngoài ra, bạn phải được cảnh báo về việc chọn các biến "quan trọng" trong thời trang này. Ý nghĩa thống kê có thể được thay đổi bằng cách thêm/loại bỏ một biến độc lập.Câu hỏi của bạn cho thấy việc xóa * tất cả * biến không đáng kể trong lần chạy đầu tiên. Khi làm điều đó, một số biến quan trọng ban đầu sẽ trở nên không đáng kể, trong khi một số biến bạn đã xóa có thể có giá trị tiên đoán tốt. Những gì bạn thực sự muốn là loại bỏ từng cái một, và so sánh từng bước của mô hình phù hợp. Xem chủ đề này: http://bit.ly/ZLVaD5 –

+0

Xem thêm điều này: http://www.statmethods.net/stats/regression.html –

Trả lời

5

Bạn có thể truy cập các giá trị của kết quả glm thông qua hàm "tóm tắt". Cột cuối cùng của ma trận hệ số được gọi là "Pr (> | t |)" và giữ giá trị của các nhân tố được sử dụng trong mô hình.

Dưới đây là một ví dụ:

#x is a 10 x 3 matrix 
x = matrix(rnorm(3*10), ncol=3) 
y = rnorm(10) 
res = glm(y~x) 
#ignore the intercept pval 
summary(res)$coeff[-1,4] < 0.05 
16

Mặc dù @kith mở đường, có hơn có thể được thực hiện. Trên thực tế, toàn bộ quá trình có thể được tự động hóa. Trước tiên, hãy tạo ra một số dữ liệu:

x1 <- rnorm(10) 
x2 <- rnorm(10) 
x3 <- rnorm(10) 
y <- rnorm(10) 
x4 <- y + 5 # this will make a nice significant variable to test our code 
(mydata <- as.data.frame(cbind(x1,x2,x3,x4,y))) 

mô hình của chúng tôi là sau đó:

model <- glm(formula=y~x1+x2+x3+x4,data=mydata) 

Và vector Boolean của các hệ số thực sự có thể được chiết xuất bởi:

toselect.x <- summary(model)$coeff[-1,4] < 0.05 # credit to kith 

Nhưng đây không phải là tất cả các! Ngoài ra, chúng tôi có thể thực hiện việc này:

# select sig. variables 
relevant.x <- names(toselect.x)[toselect.x == TRUE] 
# formula with only sig variables 
sig.formula <- as.formula(paste("y ~",relevant.x)) 

EDIT: như áp phích tiếp theo đã chỉ ra, dòng sau phải là sig.formula <- as.formula(paste("y ~",paste(relevant.x, collapse= "+"))) để bao gồm tất cả các biến.

Và chạy hồi quy với các biến chỉ có ý nghĩa như OP ban đầu muốn:

sig.model <- glm(formula=sig.formula,data=mydata) 

Trong trường hợp này ước tính sẽ bằng 1 khi chúng ta đã xác định x4 như y + 5, ngụ ý mối quan hệ hoàn hảo.

+0

Điều này thật tuyệt vời, cảm ơn! Nhưng tôi đã phải thay đổi sig.formula một chút cho nó để làm việc cho tôi: sig.formula <- as.formula (dán ("y ~", dán (related.x, collapse = "+"))) Không có sự sụp đổ nó chỉ lấy tên biến đầu tiên từ related.x – ElinaJ

+0

Thật vậy, các áp phích khác đã ghi nhận điều này. Tôi đã bao gồm sự cải thiện trong câu trả lời cho sự rõ ràng. –

1

trong

sig.formula < - as.formula (dán ("y ~", relevant.x))

bạn dán chỉ biến đầu tiên của relevant.x những người khác được bỏ qua (thử ví dụ để đảo ngược tình trạng đến> 0,5)

2

đối với những người có vấn đề với lệnh Maxim.K trên

sig.formula <- as.formula(paste("y ~",relevant.x)) 

sử dụng này

sig.formula <- as.formula(paste("y ~",paste(relevant.x, collapse= "+"))) 

mã cuối cùng sẽ như thế nào

toselect.x <- summary(glmText)$coeff[-1,4] < 0.05 # credit to kith 
# select sig. variables 
relevant.x <- names(toselect.x)[toselect.x == TRUE] 
# formula with only sig variables 
sig.formula <- as.formula(paste("y ~",paste(relevant.x, collapse= "+"))) 

này sửa lỗi mà bạn đang phải đối mặt với hái của biến đầu tiên một mình.

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