การถดถอยโลจิสติก: การทดสอบ anova ไคสแควร์กับความสำคัญของค่าสัมประสิทธิ์ (anova () เทียบกับสรุป () ใน R)


35

ฉันมีโมเดล GLM โลจิสติกส์พร้อมตัวแปร 8 ตัว ฉันรันการทดสอบไคสแควร์ใน R anova(glm.model,test='Chisq')และตัวแปร 2 ตัวกลายเป็นการคาดการณ์เมื่อสั่งที่ด้านบนของการทดสอบและไม่มากเมื่อสั่งที่ด้านล่าง summary(glm.model)แสดงให้เห็นว่าค่าสัมประสิทธิ์ของพวกเขาจะไม่มีนัยสำคัญสูง (p-value) ในกรณีนี้ดูเหมือนว่าตัวแปรจะไม่สำคัญ

ฉันอยากถามว่าการทดสอบความสำคัญของตัวแปรใดดีขึ้น - ค่าสัมประสิทธิ์นัยสำคัญในการสรุปแบบจำลองหรือการทดสอบไคสแควanova()ร์ นอกจากนี้ - เมื่อใดอย่างใดอย่างหนึ่งดีกว่าอีก

ฉันเดาว่ามันเป็นคำถามที่กว้างขวาง แต่พอยน์เตอร์ใด ๆ เกี่ยวกับสิ่งที่ต้องพิจารณาจะได้รับการชื่นชม


4
สิ่งนี้คล้ายคลึงกับความแตกต่างระหว่าง Type I กับผลบวกของ III ของ Squares สำหรับการทดสอบสัมประสิทธิ์ในแบบจำลองเชิงเส้น มันอาจจะช่วยให้คุณสามารถอ่านคำตอบของฉันที่นี่: วิธีการตีความ type I ลำดับ ANOVA และ MANOVA
gung - Reinstate Monica

คำตอบ:


60

นอกจากคำตอบของ @ gung ฉันจะพยายามแสดงตัวอย่างของanovaฟังก์ชั่นการทดสอบจริง ฉันหวังว่านี่จะช่วยให้คุณตัดสินใจได้ว่าการทดสอบใดที่เหมาะสมสำหรับสมมติฐานที่คุณสนใจในการทดสอบ

สมมติว่าคุณมีผลและตัวแปรที่ 3: x 1 , x 2และx 3 ตอนนี้ถ้าแบบการถดถอยโลจิสติกของคุณจะ เมื่อคุณเรียกใช้ฟังก์ชันจะเปรียบเทียบรุ่นต่อไปนี้ตามลำดับ:yx1x2x3my.mod <- glm(y~x1+x2+x3, family="binomial")anova(my.mod, test="Chisq")

  1. glm(y~1, family="binomial") เมื่อเทียบกับ glm(y~x1, family="binomial")
  2. glm(y~x1, family="binomial") เมื่อเทียบกับ glm(y~x1+x2, family="binomial")
  3. glm(y~x1+x2, family="binomial") เมื่อเทียบกับ glm(y~x1+x2+x3, family="binomial")

ดังนั้นจึงเป็นการเปรียบเทียบโมเดลที่มีขนาดเล็กลงกับโมเดลที่มีความซับซ้อนมากขึ้นตามลำดับโดยการเพิ่มหนึ่งตัวแปรในแต่ละขั้นตอน การเปรียบเทียบแต่ละรายการนั้นทำผ่านการทดสอบอัตราส่วนความน่าจะเป็น(การทดสอบ LR; ดูตัวอย่างด้านล่าง) สำหรับความรู้ของฉันสมมติฐานเหล่านี้ไม่ค่อยสนใจ แต่คุณต้องตัดสินใจเอง

นี่คือตัวอย่างใน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)

  • สำหรับสัมประสิทธิ์ของx1: glm(y~x2+x3, family="binomial")กับ glm(y~x1+x2+x3, family="binomial")
  • สำหรับสัมประสิทธิ์ของx2: glm(y~x1+x3, family="binomial")กับglm(y~x1+x2+x3, family="binomial")
  • สำหรับสัมประสิทธิ์ของx3: glm(y~x1+x2, family="binomial")กับglm(y~x1+x2+x3, family="binomial")

ดังนั้นสัมประสิทธิ์แต่ละตัวเทียบกับแบบเต็มที่มีสัมประสิทธิ์ทั้งหมด การทดสอบ Wald เป็นการประมาณของการทดสอบอัตราส่วนความน่าจะเป็น เราสามารถทำการทดสอบอัตราส่วนความน่าจะเป็น (LR test) นี่คือวิธี:

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.088105rank


1
+1 นี่เป็นคำอธิบายที่ดีและครอบคลุม 1 จุดเล็ก ๆ : ผมเชื่อว่าเมื่อtest="Chisq"คุณไม่ได้ใช้ทดสอบอัตราส่วนความน่าจะเป็นคุณจะต้องตั้งค่าtest="LRT"สำหรับการที่เห็น? anova.glm
gung - Reinstate Monica

6
@ gung ขอบคุณสำหรับคำชม test="LRT"และtest="Chisq"มีความหมายเหมือนกัน (มันบอกว่ามันอยู่ในหน้าที่คุณเชื่อมโยง)
COOLSerdash

2
ไม่มีปัญหา แต่ฉันคิดว่ามันเป็นจุดที่ดี test="LRT"ดีกว่าเพราะชัดเจนทันทีว่าเป็นการทดสอบอัตราส่วนความน่าจะเป็น ฉันเปลี่ยนมัน ขอบคุณ
COOLSerdash

4
+1 ฉันประทับใจกับความก้าวหน้าที่รวดเร็วของคุณที่นี่ในเวลาเพียงหนึ่งเดือนและความสามารถของคุณในการให้คำอธิบายที่ชัดเจนและทำงานได้ดี ขอบคุณสำหรับความพยายามของคุณ!
whuber

1
คำตอบที่ดี ฉันขอถามว่า7.088e-05, 0.01419, 00.03684ควรตีความค่า p ( ) อย่างไร?
TheSimpliFire
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.