Логистическая регрессия в 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попытка избежать разделения путем добавления априора, но с 24 000 строк, априор, вероятно, затоплен вероятностью. Попробуйте уменьшить prior.scale, возможно, на большое количество. Также подумайте об увеличении степеней свободы априора, что поможет исключить большие ценности, связанные с разделением.
Дэвид Дж. Харрис

Спасибо за предложения, Дэвид. Я не думаю, что происходит разделение, потому что, когда я сортирую каждую из объясняющих переменных, зависимая переменная не всегда является истинной или ложной для высоких или низких значений объясняющих переменных. Если это не считается разделением: зависимая переменная истинна для всех x7> 32, но x7 составляет только> 32 в 10 случаях. Есть ли способ проверить разделение вне логистической регрессии? Или посмотреть, какая переменная вызывает разделение? Я попробовал ваши предложения bayesglm (я установил значение prior.scale в 1, а prior.df в Inf) и все еще получал ошибки Хаука Доннера.
Dcook


"Как вы выясните, какие переменные вызывают проблемы?" Бинарный поиск всегда хороший запасной вариант. У вас есть только 50 переменных, поэтому, если они идеально разделены одной отдельной переменной, 6 итераций найдут виновника. Если это две переменные, то самое большее 49 + 6 = 55 итераций найдут его в худшем случае.
SMCI

Ответы:


55

R50

Вы можете легко проверить, идеально ли разделены ваши классы в пространстве дизайна. Это сводится к решению задачи линейного программирования. Реализация этого «теста» на R (не тест в статистическом смысле этого слова) реализована в пакете safeBinaryRegression .

Если выясняется, что разделение действительно является проблемой, и если вы заинтересованы только в простом ванильном использовании glm (например, glm вызывается не функцией более высокого уровня, а вами), то существует реализация R алгоритмов, которые немного модифицирует классический, чтобы сделать его «устойчивым» против разделения. Это реализовано в пакете hlr


4
Очень крутой и полезный ответ! Мне придется посмотреть на эти пакеты. (+1)
Питер Флом - Восстановить Монику

1
FWIW вот описание другого надежного алгоритма: win-vector.com/blog/2012/10/rudie-cant-fail-if-majorized
Alex

2
@ Алекс: спасибо за ссылку. Если glm не сходится из-за плохих запусков, тогда я вижу, как этот метод поможет с этим. С другой стороны, если проблема вызвана идеальным разделением, мне не ясно, как идея ММ решит эту проблему. Мне было интересно, можете ли вы прокомментировать это (я могу в конечном итоге опубликовать это как отдельный вопрос).
user603 13.12.12

Отлично (+1)! Мне тоже придется посмотреть на эти пакеты.
jbowman

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