Логістична регресія в R призвела до ідеального розділення (феномен Хока-Доннера). А тепер що?


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папері , вони стверджують , що поділ «є спільною проблемою, навіть якщо розмір вибірки великий , а число предикторов малий»
David J. Harris

2
Інша думка: bayesglmнамагається уникнути розлуки, додаючи попереднє, але, маючи 24000 рядків, пріоритет, ймовірно, потрапляє в забрудненість. Спробуйте зменшити prior.scale, можливо, на велику кількість. Також розглянути можливість підвищення рівня пріоритетності пріоритету, що допоможе виключити великі значення, пов'язані з розділенням.
Девід Дж. Гарріс

Дякую за пропозиції, Девід. Я не думаю, що розділення відбувається, тому що коли я сортую кожну із пояснювальних змінних, залежна змінна не завжди відповідає дійсності чи помилковості для високих або низьких значень пояснювальних змінних. Якщо це не вважається розділенням: залежна змінна вірна для всіх x7> 32, але x7 є лише> 32 у 10 випадках. Чи є спосіб перевірити відокремленість поза логістичною регресією? Або подивіться, яка змінна викликає поділ? Я спробував ваші пропозиції bayesglm (я встановив prior.scale на 1 і prior.df на Inf), і все-таки отримав помилки Хока Доннера.
Dcook


"Як ви зрозумієте, які змінні викликають проблеми?" Двійковий пошук - це завжди хороший результат. У вас є лише 50 змінних, тож якщо вона ідеально розділена однією індивідуальною змінною, 6 ітерацій знайдуть винуватця. Якщо це дві змінні, її знайдеться не більше 49 + 6 = 55 ітерацій, в гіршому випадку.
smci

Відповіді:


55

Завдяки такому великому дизайнерському простору ( !) Можна отримати ідеальне розділення без відокремлення в будь-якій зі змінних, взятих окремо. Я б навіть другий коментар Девіда Дж. Гарріса, кажучи, що це, ймовірно.R50

Ви можете легко перевірити, чи ідеально розділені ваші класи у вашому дизайнерському просторі. Це зводиться до вирішення задачі лінійного програмування. Реалізація цього 'тесту' (не тест у статистичному розумінні цього терміна) реалізована в пакеті SafeBinaryRegression .

Якщо виявиться, що розділення насправді є проблемою, і якщо вас цікавить лише звичайне використання ванілі glm (наприклад, glm викликається не функцією вищого рівня, а вами), то є R реалізація алгоритмів, які трохи модифікує класичний, щоб зробити його "міцним" проти розлуки. Він реалізований у пакеті hlr


4
Дуже класна і корисна відповідь! Мені доведеться заглянути в ці пакунки. (+1)
Пітер Флом - Відновіть Моніку

1
FWIW ось опис іншого надійного алгоритму: win-vector.com/blog/2012/10/rudie-cant-fail-if-majorized
Алекс

2
@ Алекс: дякую за посилання. Якщо glm не зближується через погані старти, то я можу побачити, як цей метод допоможе у цьому. З іншого боку, якщо проблема викликана ідеальним розділенням, мені не зрозуміло, як ідея ММ вирішить це. Мені було цікаво, чи можете ви прокоментувати це (я можу в кінцевому підсумку опублікувати це як окреме запитання).
user603

Відмінно (+1)! Мені теж доведеться заглянути в ці пакунки.
jbowman

1
Дякуємо за відповідь @ user603! Я використовував safeBinaryRegression і розділення справді відбувалося з кількома змінними. Потім я спробував використовувати MEL в пакеті hlr, щоб створити надійну модель для цього поділу. Однак коефіцієнти величезні (як це було б, коли поділ відбувається в нормальному glm) і ось цифри df та відхилень: Ступеня свободи: 19112 Всього (тобто Null); 19063 Залишковий нульовий відхилення: 24990 Залишковий відхилення: 626000 AIC: 626000 Ви думаєте, я зробив щось не так?
Dcook
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.