R의 로지스틱 회귀는 완벽한 분리 (Hauck-Donner 현상)를 초래했습니다. 이제 뭐?


56

50 개의 연속 설명 변수를 사용하여 이진 결과를 예측하려고합니다 (대부분의 변수 범위는 ~ ). 내 데이터 세트에는 거의 24,000 개의 행이 있습니다. 내가 실행하면 R에, 내가 얻을 :glm

Warning messages:  
1: glm.fit: algorithm did not converge  
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

완벽한 분리가 발생할 수 있음을 암시하는 다른 응답을 읽었지만 내 데이터에는 그렇지 않다고 확신합니다. . 일부 변수를 제거하면 "수렴하지 않았습니다"오류가 사라질 수 있습니다. 그러나 항상 그런 것은 아닙니다.

bayesglm함수 에서 동일한 변수를 사용하려고 시도했지만 동일한 오류가 발생했습니다.

여기서 무슨 일이 일어나고 있는지 정확히 파악하기 위해 어떤 단계를 수행 하시겠습니까? 어떤 변수가 문제를 일으키는 지 어떻게 알 수 있습니까?


5
왜 분리가 일어나지 않는다고 확신하십니까? 에서 종이 , 그들은 "표본의 크기가 크고 예측의 수가 작은 경우에도 일반적인 문제"분리이라고 주장bayesglm
데이비드 J. 해리스

2
또 다른 생각 : bayesglm이전을 추가하여 분리를 피하려고하지만 24,000 행으로 이전은 아마도 우연히 늪에 빠질 것입니다. 을 prior.scale가능한 많이 많이 줄이십시오. 또한 사전의 자유도를 높이면 분리와 관련된 큰 가치를 배제하는 데 도움이됩니다.
David J. Harris

제안 David에게 감사합니다. 각 설명 변수를 정렬 할 때 설명 변수의 높거나 낮은 값에 대해 종속 변수가 항상 참 또는 거짓이 아니기 때문에 분리가 발생하지 않는다고 생각합니다. 이것이 분리로 간주되지 않는 한 종속 변수는 모든 x7> 32에 대해 true이지만 x7은 10의 경우> 32에 불과합니다. 로지스틱 회귀 이외의 분리를 확인하는 방법이 있습니까? 아니면 어떤 변수가 분리를 일으키는 지 확인합니까? 나는 bayesglm 제안을 시도했지만 (preor.scale을 1로 설정하고 prior.df를 Inf로 설정했습니다) 여전히 Hauck Donner 오류가 발생했습니다.
Dcook


"어떤 변수가 문제를 일으키는 지 어떻게 알 수 있습니까?" 이진 검색은 항상 좋은 대안입니다. 변수는 50 개뿐이므로 하나의 개별 변수로 완벽하게 분리 된 경우 6 개의 반복이 범인을 찾습니다. 변수가 두 개인 경우 최대 49 + 6 = 55 반복이 최악의 경우를 찾습니다.
smci

답변:


55

이러한 넓은 설계 공간 ( !)을 사용하면 변수를 개별적으로 분리하지 않고도 완벽한 분리를 얻을 수 있습니다. 나는 이것이 가능하다고 말하는 David J. Harris의 의견을 두 번째로 말하기를 원합니다.R50

디자인 공간에서 클래스가 완벽하게 분리되어 있는지 쉽게 테스트 할 수 있습니다. 이것은 선형 프로그래밍 문제를 해결하는 것으로 요약됩니다. 이 '테스트'의 R 구현 (통계적 의미에서 테스트가 아님)은 safeBinaryRegression 패키지에 구현되어 있습니다.

분리가 실제로 문제인 것으로 판명되고 glm의 일반 바닐라 사용에만 관심이있는 경우 (예 : glm은 상위 레벨 기능이 아니라 사용자가 호출 함) 알고리즘의 R 구현이 있습니다. 고전적인 것을 약간 수정하여 분리에 대해 '견고하게'만듭니다. 그것은 hlr 패키지로 구현 됩니다


4
매우 시원하고 유용한 답변! 나는 그 패키지들을 조사해야 할 것이다. (+1)
Peter Flom-Monica Monica 복원

1
FWIW 여기에 또 다른 강력한 알고리즘에 대한 설명이 있습니다. win-vector.com/blog/2012/10/rudie-cant-fail-if-majorized
Alex

2
@ 알렉스 : 링크 주셔서 감사합니다. 잘못된 시작으로 인해 glm이 수렴하지 않으면이 방법이 어떻게 도움이되는지 볼 수 있습니다. 반면에, 완벽한 분리로 인해 문제가 발생하면 MM 아이디어가 어떻게이를 해결할 수 있는지 명확하지 않습니다. 나는 당신이 이것에 대해 의견을 말할 수 있는지 궁금합니다. (나는 이것을 별도의 질문으로 게시 할 수 있습니다).
user603

우수 (+1)! 나도 그 패키지들을 조사해야 할 것이다.
jbowman

1
답변 @ user603에 감사드립니다! safeBinaryRegression을 사용했으며 실제로 여러 변수로 분리가 발생했습니다. 그런 다음 hlr 패키지에서 MEL을 사용하여이 분리에 강력한 모델을 작성했습니다. 그러나 계수는 거대하고 (정상 glm에서 분리가 발생할 때와 같이) df 및 이탈 수는 다음과 같습니다. 자유도 : 19112 총계 (예 : Null); 19063 잔차 널 편차 : 24990 잔차 편차 : 626000 AIC : 626000 내가 뭔가 잘못했다고 생각하십니까?
Dcook
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.