Hồi quy logistic: kiểm tra chi-vuông anova so với ý nghĩa của các hệ số (anova () so với tóm tắt () trong R)


35

Tôi có một mô hình GLM logistic với 8 biến. Tôi đã chạy thử nghiệm chi bình phương ở R anova(glm.model,test='Chisq')và 2 trong số các biến hóa ra là dự đoán khi được đặt ở đầu thử nghiệm và không quá nhiều khi được đặt ở phía dưới. Các summary(glm.model)gợi ý rằng hệ số của chúng là không đáng kể (giá trị p cao). Trong trường hợp này có vẻ như các biến không đáng kể.

Tôi muốn hỏi thử nghiệm nào tốt hơn về tầm quan trọng của các biến - ý nghĩa hệ số trong tóm tắt mô hình hoặc thử nghiệm chi bình phương từ đó anova(). Ngoài ra - khi nào thì cái này tốt hơn cái kia?

Tôi đoán đó là một câu hỏi rộng nhưng bất kỳ gợi ý nào về những gì cần xem xét sẽ được đánh giá cao.


4
Điều này tương tự như sự khác biệt giữa loại bình phương loại I và loại III để kiểm tra hệ số trong các mô hình tuyến tính. Nó có thể giúp bạn đọc câu trả lời của tôi ở đây: làm thế nào để giải thích gõ tôi tuần tự ANOVA và MANOVA .
gung - Phục hồi Monica

Câu trả lời:


61

Ngoài câu trả lời của @ gung, tôi sẽ cố gắng đưa ra một ví dụ về những gì anovachức năng thực sự kiểm tra. Tôi hy vọng điều này cho phép bạn quyết định thử nghiệm nào phù hợp với các giả thuyết bạn quan tâm để thử nghiệm.

Giả sử rằng bạn có kết quả và 3 biến dự đoán: x 1 , x 2x 3 . Bây giờ, nếu mô hình hồi quy logistic của bạn sẽ được . Khi bạn chạy , hàm sẽ so sánh các mô hình sau theo thứ tự tuần tự:yx1x2x3my.mod <- glm(y~x1+x2+x3, family="binomial")anova(my.mod, test="Chisq")

  1. glm(y~1, family="binomial") so với glm(y~x1, family="binomial")
  2. glm(y~x1, family="binomial") so với glm(y~x1+x2, family="binomial")
  3. glm(y~x1+x2, family="binomial") so với glm(y~x1+x2+x3, family="binomial")

Vì vậy, nó tuần tự so sánh mô hình nhỏ hơn với mô hình phức tạp hơn tiếp theo bằng cách thêm một biến trong mỗi bước. Mỗi so sánh được thực hiện thông qua kiểm tra tỷ lệ khả năng (kiểm tra LR; xem ví dụ bên dưới). Theo hiểu biết của tôi, những giả thuyết này hiếm khi được quan tâm, nhưng điều này phải được quyết định bởi bạn.

Đây là một ví dụ trong R:

mydata      <- read.csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
mydata$rank <- factor(mydata$rank)

my.mod <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial")
summary(my.mod)

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -3.989979   1.139951  -3.500 0.000465 ***
gre          0.002264   0.001094   2.070 0.038465 *  
gpa          0.804038   0.331819   2.423 0.015388 *  
rank2       -0.675443   0.316490  -2.134 0.032829 *  
rank3       -1.340204   0.345306  -3.881 0.000104 ***
rank4       -1.551464   0.417832  -3.713 0.000205 ***
   ---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1 

# The sequential analysis
anova(my.mod, test="Chisq")

Terms added sequentially (first to last)    

     Df Deviance Resid. Df Resid. Dev  Pr(>Chi)    
NULL                   399     499.98              
gre   1  13.9204       398     486.06 0.0001907 ***
gpa   1   5.7122       397     480.34 0.0168478 *  
rank  3  21.8265       394     458.52 7.088e-05 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

# We can make the comparisons by hand (adding a variable in each step)

  # model only the intercept
mod1 <- glm(admit ~ 1,                data = mydata, family = "binomial") 
  # model with intercept + gre
mod2 <- glm(admit ~ gre,              data = mydata, family = "binomial") 
  # model with intercept + gre + gpa
mod3 <- glm(admit ~ gre + gpa,        data = mydata, family = "binomial") 
  # model containing all variables (full model)
mod4 <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial") 

anova(mod1, mod2, test="LRT")

Model 1: admit ~ 1
Model 2: admit ~ gre
  Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
1       399     499.98                          
2       398     486.06  1    13.92 0.0001907 ***

anova(mod2, mod3, test="LRT")

Model 1: admit ~ gre
Model 2: admit ~ gre + gpa
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
1       398     486.06                       
2       397     480.34  1   5.7122  0.01685 *

anova(mod3, mod4, test="LRT")

Model 1: admit ~ gre + gpa
Model 2: admit ~ gre + gpa + rank
  Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
1       397     480.34                          
2       394     458.52  3   21.826 7.088e-05 ***

psummary(my.mod)

  • Đối với hệ số x1: glm(y~x2+x3, family="binomial")vs. glm(y~x1+x2+x3, family="binomial")
  • Đối với hệ số x2: glm(y~x1+x3, family="binomial")vs.glm(y~x1+x2+x3, family="binomial")
  • Đối với hệ số x3: glm(y~x1+x2, family="binomial")vs.glm(y~x1+x2+x3, family="binomial")

Vì vậy, mỗi hệ số so với mô hình đầy đủ chứa tất cả các hệ số. Các xét nghiệm Wald là một xấp xỉ của thử nghiệm tỷ lệ khả năng. Chúng tôi cũng có thể làm các bài kiểm tra tỷ lệ khả năng (bài kiểm tra LR). Đây là cách thực hiện:

mod1.2 <- glm(admit ~ gre + gpa,  data = mydata, family = "binomial")
mod2.2 <- glm(admit ~ gre + rank, data = mydata, family = "binomial")
mod3.2 <- glm(admit ~ gpa + rank, data = mydata, family = "binomial")

anova(mod1.2, my.mod, test="LRT") # joint LR test for rank

Model 1: admit ~ gre + gpa
Model 2: admit ~ gre + gpa + rank
  Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
1       397     480.34                          
2       394     458.52  3   21.826 7.088e-05 ***

anova(mod2.2, my.mod, test="LRT") # LR test for gpa

Model 1: admit ~ gre + rank
Model 2: admit ~ gre + gpa + rank
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
1       395     464.53                       
2       394     458.52  1   6.0143  0.01419 *

anova(mod3.2, my.mod, test="LRT") # LR test for gre

Model 1: admit ~ gpa + rank
Model 2: admit ~ gre + gpa + rank
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
1       395     462.88                       
2       394     458.52  1   4.3578  0.03684 *

psummary(my.mod)

rankanova(my.mod, test="Chisq")rankanova(mod1.2, my.mod, test="Chisq")p7.08810-5rank


1
+1, đây là một lời giải thích tốt, toàn diện. 1 điểm nhỏ: Tôi tin rằng khi test="Chisq"bạn không chạy thử nghiệm tỷ lệ khả năng, bạn cần đặt test="LRT"cho điều đó, xem ? Anova.glm .
gung - Phục hồi Monica

6
@gung Cảm ơn lời khen. test="LRT"test="Chisq"đồng nghĩa (nó nói trên trang bạn đã liên kết).
COOLSerdash

2
Không có vấn đề, nhưng tôi nghĩ đó thực sự là một điểm tốt. test="LRT"tốt hơn vì ngay lập tức rõ ràng rằng đó là một thử nghiệm tỷ lệ khả năng. Tôi đã thay đổi nó. Cảm ơn.
COOLSerdash

4
+1 Tôi rất ấn tượng với sự tiến bộ nhanh chóng của bạn ở đây chỉ sau một tháng và khả năng cung cấp một lời giải thích rõ ràng, hiệu quả. Cảm ơn những nỗ lực của bạn!
whuber

1
Câu trả lời chính xác. Tôi có thể hỏi làm thế nào các giá trị p ( 7.088e-05, 0.01419, 00.03684) nên được giải thích?
TheSimpliFire
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.