로지스틱 회귀 분석 : anova chi-square test vs. 계수의 유의성 (anova () vs summary () in R)


35

변수가 8 개인 로지스틱 GLM 모델이 있습니다. 나는 R에서 카이 제곱 테스트를 실행 anova(glm.model,test='Chisq')했으며 변수 중 2 개는 테스트 맨 위에 주문할 때 예측 적이며 맨 아래에 주문할 때는 그렇게 많지 않습니다. 이는 summary(glm.model)계수가 중요하지 않다는 것을 암시합니다 (높은 p- 값). 이 경우 변수가 중요하지 않은 것 같습니다.

모델 요약 또는에서 카이 제곱 테스트에서 계수의 의미 - 나는 변수의 중요성의 더 나은 테스트 인 물어보고 싶었다 anova(). 또한-어느 쪽이 다른 쪽보다 더 낫습니까?

나는 그것이 광범위한 질문이라고 생각하지만 고려해야 할 사항에 대한 조언은 감사 할 것입니다.


4
이것은 선형 모델에서 계수를 테스트하기 위해 타입 I과 타입 III 제곱의 차이와 유사합니다. 여기에서 내 대답을 읽는 데 도움이 될 수 있습니다 : 유형 I 순차적 ANOVA 및 MANOVA 해석 방법 .
gung-Monica Monica 복원

답변:


60

@gung의 답변 외에도 anova함수가 실제로 테스트 하는 예를 제공하려고합니다 . 이를 통해 테스트에 관심있는 가설에 적합한 테스트결정할 수 있기를 바랍니다 .

결과 및 3 개의 예측 변수 ( , 및 가 있다고 가정합니다 . 이제 로지스틱 회귀 모델은 다음과 같습니다 . 를 실행 하면 함수는 다음 모델을 순차적으로 비교합니다.x 1 x 2 x 3yx1x2x3my.mod <- glm(y~x1+x2+x3, family="binomial")anova(my.mod, test="Chisq")

  1. glm(y~1, family="binomial") vs. glm(y~x1, family="binomial")
  2. glm(y~x1, family="binomial") vs. glm(y~x1+x2, family="binomial")
  3. glm(y~x1+x2, family="binomial") vs. 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 ***

의 출력 -values이 있습니다 월드 테스트 다음과 같은 가설을 검증 (주 그들이있는 거 교환하고 중요하지 않습니다 테스트의 순서 )psummary(my.mod)

  • 계수 x1: glm(y~x2+x3, family="binomial")vs. glm(y~x1+x2+x3, family="binomial")
  • 계수 x2: glm(y~x1+x3, family="binomial")vs.glm(y~x1+x2+x3, family="binomial")
  • 계수 x3: glm(y~x1+x2, family="binomial")vs.glm(y~x1+x2+x3, family="binomial")

따라서 모든 계수를 포함하는 전체 모형에 대한 각 계수. Wald 검정은 우도 비 검정의 근사치입니다. 우도 비 테스트 (LR 테스트)를 수행 할 수도 있습니다. 방법은 다음과 같습니다.

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 *

우도 비 검정 의 은 위 의 Wald 검정에 의해 얻어진 것과 매우 유사합니다 .psummary(my.mod)

참고를위한 세 번째 모델의 비교 rank의은 anova(my.mod, test="Chisq")에 대한 비교 동일한 rank아래의 예 ( anova(mod1.2, my.mod, test="Chisq")). 매번 값은 . 매번 모델이없는 모델 과 모델이 포함 된 모델 간의 비교 입니다.7.088 10 5p7.088105rank


1
+1, 이것은 포괄적이고 좋은 설명입니다. 1 작은 포인트 : test="Chisq"가능성 비율 테스트를 실행하지 않을 때는 설정해야한다고 생각 합니다. ? anova.glm을test="LRT" 참조하십시오 .
gung-모니 티 복원

6
@gung 칭찬에 감사드립니다. test="LRT"그리고 test="Chisq"동의어입니다 (연결 한 페이지에 표시됨).
COOLSerdash

2
문제는 없지만 실제로 좋은 지적이라고 생각합니다. test="LRT"가능성 비율 검정임을 즉시 알 수 있으므로 더 좋습니다. 나는 그것을 바꿨다. 감사.
COOLSerdash

4
+1 한 달 만에 귀하의 빠른 발전과 잘 작동하고 명확한 설명을 제공 할 수있는 능력에 깊은 인상을 받았습니다. 당신의 노력에 감사드립니다!
whuber

1
좋은 대답입니다. p- 값 ( 7.088e-05, 0.01419, 00.03684)을 어떻게 해석해야하는지 물어볼 수 있습니까?
TheSimpliFire
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.