카운트 회귀에 대한 진단 플롯


88

결과가 카운트 변수 인 회귀에 대한 가장 유용한 정보는 무엇입니까?

특히 포아송 및 음 이항 모델뿐만 아니라 제로 팽창 및 허들 대응에 관심이 있습니다. 내가 찾은 대부분의 소스는 단순히 이러한 플롯이 어떻게 보이는지에 대한 설명없이 잔차 대 적합치 값을 플로팅합니다.

지혜와 참고 문헌은 크게 감사합니다. 관련이 있는지 묻는 이유에 대한 뒷이야기는 내 다른 질문 입니다.

관련 토론 :

답변:


101

다음은 내가 일반적으로 좋아하는 것입니다 (예를 들어 학교에서 결석 한 학생의 날에 과도하게 분산되어 있고 매우 쉽게 모델링되지 않은 키네 데이터를 사용합니다 MASS).

  1. 패키지에서 지원하는 관측 된 주파수와 적합 된 주파수 ( 친숙한 장 2 참조)를 그림으로 표시 하여 원래 카운트 데이터테스트하고 그래프로 작성 하십시오 . 예를 들어 with 및 :vcdRgoodfitrootogram

    library(MASS)
    library(vcd)
    data(quine) 
    fit <- goodfit(quine$Days) 
    summary(fit) 
    rootogram(fit)
    

    또는 어떤 카운트 데이터 모델이 기본인지를 식별하는 데 도움이되는 Ord 플롯 을 사용합니다 (예 : 경사가 양수이고 절편이 양수이면 음 이항 분포를 나타냅니다).

    Ord_plot(quine$Days)

    또는 "XXXXXXness"도표를 사용 하여 XXXXX가 선택 분포입니다 (Poissoness 도표 (Poisson과 대립하여 말하기도 함 type="nbinom")).

    distplot(quine$Days, type="poisson")
  2. 일반적인 적합도 측정 (예 : 우도 비율 통계 대 null 모델 등)을 검사합니다.

    mod1 <- glm(Days~Age+Sex, data=quine, family="poisson")
    summary(mod1)
    anova(mod1, test="Chisq")
    
  3. 공식적인 테스트 통계 를 보거나 과소 산포 를 확인하십시오 residual deviance/df(예 : 이 답변 참조 ). 여기에 과대 산포가 분명히 있습니다.

    library(AER)
    deviance(mod1)/mod1$df.residual
    dispersiontest(mod1)
    
  4. 확인 영향력을 활용 점 으로, 예를 들어, influencePlot에서 car패키지로 제공된다. 물론 Poisson이 나쁜 모델이기 때문에 많은 점이 영향력이 높습니다.

    library(car)
    influencePlot(mod1)
    
  5. 카운트 데이터 모델과 제로 팽창 / 허들 대응 물을 피팅하여 제로 인플레이션 을 확인 하고 비교합니다 (일반적으로 AIC). 여기서 0으로 팽창 된 모델은 단순한 포아송보다 더 적합 할 것입니다.

    library(pscl)
    mod2 <- zeroinfl(Days~Age+Sex, data=quine, dist="poisson")
    AIC(mod1, mod2)
    
  6. y 축의 잔차 (원시, 편차 또는 스케일)를 x 축의 (로그) 예측 값 (또는 선형 예측 변수)에 플로팅합니다. 여기서 우리는 매우 큰 잔차와 정상으로부터의 이탈 잔차가 실질적으로 벗어난 것을 볼 수 있습니다 (Poisson에 대해 말하기; 편집 : @FlorianHartig의 대답은 이러한 잔차의 정규성이 예상되지 않음을 의미하므로 결정적인 단서가 아닙니다).

    res <- residuals(mod1, type="deviance")
    plot(log(predict(mod1)), res)
    abline(h=0, lty=2)
    qqnorm(res)
    qqline(res)
    
  7. 관심이 있다면, 정렬 된 절대 잔차 대 예상 정규 값 Atkinson (1981) 을 플로팅하여 잔차의 정규 확률 절반 을 플로팅 합니다. 특별한 기능은 시뮬레이션 된 / 부트 스트랩 된 신뢰 구간 (표시되지 않음)으로 참조 '라인'및 엔벨로프를 시뮬레이션하는 것입니다.

    library(faraway)
    halfnorm(residuals(mod1))
    
  8. 카운트 데이터의 로그 선형 모델에 대한 진단 플롯 (친절도 서의 7.2 및 7.7 장 참조). 플롯은 예측 된 값과 관측 된 값을 아마도 일부 간격 추정치와 비교했을 것입니다 (나이 그룹에 대해서만 수행했습니다. 여기서 F3 그룹에서 과대 산포로 인해 추정치와 상당히 멀리 떨어져 있음을 다시 알 수 있습니다. 점 예측 하나의 표준 오류) :±

    plot(Days~Age, data=quine) 
    prs  <- predict(mod1, type="response", se.fit=TRUE)
    pris <- data.frame("pest"=prs[[1]], "lwr"=prs[[1]]-prs[[2]], "upr"=prs[[1]]+prs[[2]])
    points(pris$pest ~ quine$Age, col="red")
    points(pris$lwr  ~ quine$Age, col="pink", pch=19)
    points(pris$upr  ~ quine$Age, col="pink", pch=19)
    

이를 통해 분석에 대한 유용한 정보를 대부분 얻을 수 있으며 대부분의 단계는 모든 표준 카운트 데이터 분포 (예 : Poisson, Negative Binomial, COM Poisson, Power Laws)에 적용됩니다.


6
대단한 답변! 포아송 시뮬레이션 데이터로 이러한 진단을 수행하여 음모가 어떻게 보이는지 내 눈을 훈련시키는 것이 도움이되었습니다.
하프 패스

음모가 무엇을하는지에 대해 더 많은 설명을 주었어야합니까?
Momo

2
흥미로운 참고 사항 : NB 분포는 GOF 테스트, 루트 그램, Ord 플롯 및 NB-ness 플롯을 기반으로 시뮬레이션 된 NB 데이터에 거의 적합하지 않은 것으로 나타났습니다. 예외는 거의 대칭적인 높은 "길들이는"NB 데이터 인 것 같습니다-높은 mu, 높은 theta.
하프 패스

1
흠, type = "nbinomial"을 인수로 사용 하시겠습니까? 예를 들어 fm <-glm.nb (일 ~., 데이터 = quine); 더미 <-네 레빈 (fitted (fm), theta = 4.5)이 정상적으로 작동합니다.
모모

@Momo, 고맙습니다. 저는 x = rnegbin (n = 1000, mu = 10, theta = 1)과 같은 일을하고있었습니다. fit = goodfit (x, type = "nbinomial"); 요약 (적합). theta = 4.5를 설정하면 적합도가 향상되지만 여전히 p <0.05이며 루트 그램은 꽤 나빠 보일 수 있습니다. 우리 시뮬레이션의 차이점을 이해합니다. 모두에서 더미의 각 값은 다른 평균 매개 변수 (적합 된 값 (fm)의 값)에서 시뮬레이션되었습니다. 광산에서, 그들은 모두 평균 10
하프 패스

14

표준 진단 플롯을 사용하지만 그 모양이 무엇인지 알고 싶을 때 나는 종이를 좋아합니다.

 Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne,
 D.F and Wickham, H. (2009) Statistical Inference for exploratory
 data analysis and model diagnostics Phil. Trans. R. Soc. A 2009
 367, 4361-4383 doi: 10.1098/rsta.2009.0120

언급 된 접근법 중 하나는 관심 가정이 사실 인 여러 시뮬레이션 데이터 세트를 작성하고 이러한 시뮬레이션 데이터 세트에 대한 진단 플롯을 작성하고 실제 데이터에 대한 진단 플롯을 작성하는 것입니다. 이 모든 플롯을 동시에 화면에 배치하십시오 (실제 데이터를 기반으로 한 임의 배치). 이제 플롯의 모양을 시각적으로 참조 할 수 있으며 실제 데이터에 대한 가정이 유지되는 경우 해당 플롯은 다른 플롯과 동일하게 표시됩니다 (실제 데이터가 어느 것인지 알 수없는 경우 테스트중인 가정은 거의 유사 함) 실제 데이터 플롯이 다른 데이터 플롯과 명확하게 다르게 보이는 경우 적어도 하나의 가정이 유지되지 않음을 의미합니다. vis.testR 용 TeachingDemos 패키지 의 기능은이를 테스트로 구현하는 데 도움이됩니다.


6
레코드에 대한 위의 데이터가있는 예 : mod1 <-glm (Days ~ Age + Sex, data = quine, family = "poisson"); if (interactive ()) {vis.test (residuals (mod1, type = "response"), vt.qqnorm, nrow = 5, ncol = 5, npage = 3)}
하프 패스

13

이것은 오래된 질문이지만, 내 DHARMa R 패키지 (CRAN에서 사용 가능, 여기 참조 )는 @GregSnow에서 제안한 것과 유사한 시뮬레이션 접근법을 기반으로 GLM 및 GLMM에 대해 표준화 된 잔차를 제공 한다는 점을 추가하는 것이 유용하다고 생각했습니다. .

패키지 설명에서 :

DHARMa 패키지는 시뮬레이션 기반 접근법을 사용하여 적합 화 된 일반 선형 혼합 모델에서 쉽게 해석 가능한 스케일링 잔차를 만듭니다. 현재 지원되는 'lme4'( 'lmerMod', 'glmerMod')의 'merMod'클래스, 'glm'( 'MASS'의 'negbin'포함, 준 분배 제외) 및 'lm'모델 클래스가 현재 지원됩니다. 또는 외부에서 생성 된 시뮬레이션 (예 : 'JAGS', 'STAN'또는 'BUGS'와 같은 Bayesian 소프트웨어의 사후 예측 시뮬레이션)도 처리 할 수 ​​있습니다. 결과 잔차는 0과 1 사이의 값으로 표준화되며 선형 회귀의 잔차로 직관적으로 해석 될 수 있습니다. 이 패키지는 또한 전형적인 모델 미세화 문제에 대한 다수의 플롯 및 테스트 기능을 제공합니다.

@Momo-권장 사항 6을 업데이트하고 싶을 수 있습니다. 이탈 잔차의 정규성은 일반적으로 DHARMa 비 ign 트 또는 여기에 설명 된 바와 같이 푸 아송 에서는 예상되지 않습니다 . 및 qqnorm 플롯 직선 상이 seing 일탈 잔차 (또는 다른 표준 잔차) 모두 일반적인 염려에 따라서있다 . DHARMa 패키지는 Poisson 또는 다른 GLM 제품군의 편차를 진단 할 수있는 qq 플롯을 제공합니다. 여기서 이탈 잔차 문제를 설명하는 예제를 만들었습니다 .


4

glm.diag.plotspackage에 호출 되어 bootGLM에 대한 진단 플롯을 생성 하는 기능이 있습니다 . 그것이하는 일 :

선형 예측 변수에 대한 잭나이프 이탈 잔차 플롯, 표준화 된 이탈 잔차의 정규 점수 플롯, 레버리지 / (1 수준)에 대한 대략적인 Cook 통계 플롯, Cook 통계의 사례 플롯을 작성합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.