การถดถอยโลจิสติกใน 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
เดวิดเจแฮร์ริส

2
ความคิดอื่น: bayesglmพยายามหลีกเลี่ยงการแยกโดยการเพิ่มก่อนหน้านี้ แต่ด้วย 24,000 แถวความคิดก่อนหน้าอาจมีแนวโน้มล้นมือ ลองลดprior.scaleขนาดลงเป็นจำนวนมาก นอกจากนี้ให้พิจารณาเพิ่มระดับของเสรีภาพก่อนหน้าซึ่งจะช่วยแยกแยะคุณค่าที่เกี่ยวข้องกับการแยก
เดวิดเจแฮร์ริส

ขอบคุณสำหรับคำแนะนำของเดวิด ฉันไม่คิดว่าการแยกเกิดขึ้นเพราะเมื่อฉันเรียงลำดับตัวแปรอธิบายแต่ละตัวตัวแปรตามไม่ได้จริงหรือเท็จเสมอสำหรับค่าสูงหรือต่ำของตัวแปรอธิบาย ยกเว้นกรณีนี้ถือว่าเป็นการแยก: ตัวแปรตามเป็นจริงสำหรับทุก x7> 32 แต่ x7 เป็นเพียง> 32 ใน 10 กรณี มีวิธีการตรวจสอบการแยกนอกการถดถอยโลจิสติกหรือไม่? หรือดูว่าตัวแปรตัวใดที่ทำให้เกิดการแยก? ฉันลองใช้คำแนะนำ bayesglm ของคุณ (ฉันตั้งค่า before.scale เป็น 1 และ before.df เป็น Inf) และยังคงมีข้อผิดพลาด Hauck Donner
Dcook


"คุณจะทราบได้อย่างไรว่าตัวแปรใดเป็นสาเหตุของปัญหา" การค้นหาแบบไบนารี่เป็นทางเลือกที่ดีอยู่เสมอ คุณมีตัวแปรเพียง 50 ตัวเท่านั้นดังนั้นหากตัวแปรตัวใดตัวหนึ่งแยกจากกันโดยสมบูรณ์การวนซ้ำ 6 ครั้งจะค้นหาผู้กระทำผิด หากเป็นตัวแปรสองตัวการทำซ้ำมากที่สุด 49 + 6 = 55 จะพบว่าเป็นกรณีที่เลวร้ายที่สุด
smci

คำตอบ:


55

ด้วยพื้นที่การออกแบบขนาดใหญ่ ( !) คุณสามารถแยกได้อย่างสมบูรณ์แบบโดยไม่ต้องแยกตัวแปรใด ๆ ฉันจะขอความเห็นที่สองจาก David J. Harris ว่าจะเป็นไปได้R50

คุณสามารถทดสอบว่าคลาสของคุณแยกออกจากกันอย่างสมบูรณ์ในพื้นที่ออกแบบของคุณหรือไม่ สิ่งนี้จะช่วยลดปัญหาการเขียนโปรแกรมเชิงเส้น การดำเนินการวิจัยนี้ 'ทดสอบ' (ไม่ทดสอบในความรู้สึกทางสถิติของคำ) จะดำเนินการใน safeBinaryRegression แพคเกจ

หากปรากฎว่าการแยกเป็นปัญหาแน่นอนและหากคุณสนใจเพียงการใช้วานิลลาธรรมดาของ glm (เช่น glm ไม่ได้ถูกเรียกโดยฟังก์ชันระดับสูง แต่โดยคุณ) นั่นก็คือการใช้ R ของอัลกอริธึมที่ ปรับเปลี่ยนคลาสสิกเล็กน้อยเพื่อให้ 'แข็งแกร่ง' กับการแยก มันถูกนำไปใช้ในแพ็คเกจ hlr


4
คำตอบที่ยอดเยี่ยมและมีประโยชน์มาก! ฉันจะต้องดูแพ็คเกจเหล่านั้น (+1)
Peter Flom - Reinstate Monica

1
FWIW นี่คือคำอธิบายของอัลกอริทึมที่แข็งแกร่งอื่น: win-vector.com/blog/2012/10/rudie-cant-fail-if-majorized
Alex

2
@Alex: ขอบคุณสำหรับลิงค์ หาก glm ไม่ได้มาบรรจบกันเนื่องจากการเริ่มต้นที่ไม่ดีฉันสามารถดูได้ว่าวิธีการนี้จะช่วยได้อย่างไร ในทางกลับกันถ้าปัญหาเกิดจากการแยกกันโดยสมบูรณ์มันไม่ชัดเจนสำหรับฉันว่าความคิด MM จะแก้ปัญหานั้นได้อย่างไร ฉันสงสัยว่าคุณสามารถแสดงความคิดเห็นเกี่ยวกับเรื่องนี้ได้หรือไม่ (ในที่สุดฉันสามารถโพสต์สิ่งนี้เป็นคำถามแยกต่างหาก)
user603

ยอดเยี่ยม (+1)! ฉันก็ต้องดูในแพ็คเกจเหล่านั้นด้วย
jbowman

1
ขอบคุณสำหรับคำตอบ @ user603! ฉันใช้ safeBinaryRegression และการแยกเกิดขึ้นแน่นอนกับตัวแปรหลายอย่าง จากนั้นฉันลองใช้ MEL ในแพ็คเกจ hlr เพื่อสร้างแบบจำลองที่แข็งแกร่งสำหรับการแยกนี้ อย่างไรก็ตามค่าสัมประสิทธิ์มีขนาดใหญ่มาก (อย่างที่ควรจะเป็นเมื่อการแยกเกิดขึ้นใน glm ปกติ) และนี่คือตัวเลข df และ deviance: Degrees of Freedom: 19112 Total (เช่น Null); 19063 Residual Null Deviance: 24990 Deviant Residual: 626000 AIC: 626000 คุณคิดว่าฉันทำอะไรผิดหรือเปล่า?
Dcook
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.