Kiểm tra tỷ lệ khả năng trong R


25

Giả sử tôi sẽ thực hiện một hồi quy logistic đơn biến trên một số biến độc lập, như sau:

mod.a <- glm(x ~ a, data=z, family=binominal("logistic"))
mod.b <- glm(x ~ b, data=z, family=binominal("logistic"))

Tôi đã thực hiện một so sánh mô hình (kiểm tra tỷ lệ khả năng) để xem liệu mô hình có tốt hơn mô hình null bằng lệnh này không

1-pchisq(mod.a$null.deviance-mod.a$deviance, mod.a$df.null-mod.a$df.residual)

Sau đó, tôi đã xây dựng một mô hình khác với tất cả các biến trong đó

mod.c <- glm(x ~ a+b, data=z, family=binomial("logistic"))

Để xem biến có ý nghĩa thống kê trong mô hình đa biến hay không, tôi đã sử dụng lrtestlệnh từepicalc

lrtest(mod.c,mod.a) ### see if variable b is statistically significant after adjustment of a
lrtest(mod.c,mod.b) ### see if variable a is statistically significant after adjustment of b

Tôi tự hỏi nếu pchisqphương pháp và lrtestphương pháp là tương đương để làm kiểm tra loglikabilities? Như tôi không biết làm thế nào để sử dụng lrtestcho mô hình logistic univate.


@Gavin cảm ơn vì đã nhắc nhở tôi, khi so sánh với stackoverflow, tôi cần dành nhiều thời gian hơn để "tiêu hóa" câu trả lời trước khi quyết định xem câu trả lời có phù hợp hay không, dù sao, cảm ơn một lần nữa.
yêu

Tôi không khuyên bạn nên sử dụng waldtest từ lmtest. Sử dụng gói aod để thử nghiệm mô hình. Nó đơn giản hơn nhiều. cran.r-project.org/web/packages/aod/aod.pdf
Ông Nobody

epicalcđã bị xóa ( nguồn ). Một sự thay thế có thể là lmtest.
Martin Thoma

Câu trả lời:


21

Về cơ bản, có, miễn là bạn sử dụng sự khác biệt chính xác về khả năng đăng nhập:

> library(epicalc)
> model0 <- glm(case ~ induced + spontaneous, family=binomial, data=infert)
> model1 <- glm(case ~ induced, family=binomial, data=infert)
> lrtest (model0, model1)
Likelihood ratio test for MLE method 
Chi-squared 1 d.f. =  36.48675 , P value =  0 
> model1$deviance-model0$deviance
[1] 36.48675

không phải là độ lệch cho mô hình null giống nhau trong cả hai trường hợp. Số lượng df là số lượng tham số khác nhau giữa hai mô hình lồng nhau, ở đây df = 1. BTW, bạn có thể xem mã nguồn lrtest()bằng cách chỉ cần gõ

> lrtest

tại dấu nhắc R.


cảm ơn, và tôi chỉ thấy rằng tôi có thể sử dụng glm (output ~ NULL, data = z, family = binomial ("logistic")) để tạo mô hình NULL và vì vậy tôi có thể sử dụng lrtest sau đó. FYI, cảm ơn một lần nữa
yêu của tôi

2
@lokheart anova(model1, model0)cũng sẽ làm việc.
chl

5
@lokheart glm(output ~ 1, data=z, family=binomial("logistic"))sẽ là một mô hình null tự nhiên hơn, nói rằng điều đó outputđược giải thích bằng một thuật ngữ không đổi (chặn) / Việc chặn được ngụ ý trong tất cả các mô hình của bạn, vì vậy bạn đang kiểm tra hiệu quả của asau khi tính toán cho việc chặn.
Phục hồi Monica - G. Simpson

Hoặc bạn có thể thực hiện "thủ công": giá trị p của bài kiểm tra LR = 1-pchisq (deviance, dof)
Umka

22

Một thay thế là lmtestgói, có một lrtest()chức năng chấp nhận một mô hình duy nhất. Dưới đây là ví dụ từ ?lrtesttrong lmtestgói, dành cho LM nhưng có các phương thức hoạt động với GLM:

> require(lmtest)
Loading required package: lmtest
Loading required package: zoo
> ## with data from Greene (1993):
> ## load data and compute lags
> data("USDistLag")
> usdl <- na.contiguous(cbind(USDistLag, lag(USDistLag, k = -1)))
> colnames(usdl) <- c("con", "gnp", "con1", "gnp1")
> fm1 <- lm(con ~ gnp + gnp1, data = usdl)
> fm2 <- lm(con ~ gnp + con1 + gnp1, data = usdl)
> ## various equivalent specifications of the LR test
>
> ## Compare two nested models
> lrtest(fm2, fm1)
Likelihood ratio test

Model 1: con ~ gnp + con1 + gnp1
Model 2: con ~ gnp + gnp1
  #Df  LogLik Df  Chisq Pr(>Chisq)    
1   5 -56.069                         
2   4 -65.871 -1 19.605  9.524e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 
>
> ## with just one model provided, compare this model to a null one
> lrtest(fm2)
Likelihood ratio test

Model 1: con ~ gnp + con1 + gnp1
Model 2: con ~ 1
  #Df   LogLik Df  Chisq Pr(>Chisq)    
1   5  -56.069                         
2   2 -119.091 -3 126.04  < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

+1 Rất tốt để biết (và dường như tôi đã quên gói đó).
chl

2
@GavinSimpson Điều này có vẻ ngớ ngẩn, nhưng bạn sẽ diễn giải kết quả 'lrtest (fm2, fm1) như thế nào? Mô hình 2 khác biệt đáng kể so với mô hình 1 và do đó việc bổ sung biến con1 có hữu ích? Hoặc lrtest (fm2) đang nói rằng mô hình 2 khác biệt đáng kể so với mô hình 1? Nhưng mô hình nào tốt hơn?
Kerry

5
@Kerry fm1có khả năng đăng nhập thấp hơn và do đó phù hợp kém hơn fm2. LRT đang nói với chúng tôi rằng mức độ mà chúng tôi tạo ra fm1một mô hình kém hơn fm2là lớn bất ngờ nếu các điều khoản khác nhau giữa các mô hình là hữu ích (giải thích phản hồi). lrtest(fm2)không so sánh với fm1tất cả, mô hình fm2được so sánh với trong trường hợp đó nếu, như đã nêu trong đầu ra, điều này : con ~ 1. Mô hình đó, mô hình null, nói rằng yếu tố dự đoán tốt nhất conlà giá trị trung bình mẫu của con(thuật ngữ chặn / hằng số).
Phục hồi Monica - G. Simpson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.