Я пытаюсь предсказать бинарный результат, используя 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
функции и получил те же ошибки.
Какие шаги вы бы предприняли, чтобы точно выяснить, что здесь происходит? Как вы выясните, какие переменные вызывают проблемы?
r
regression
logistic
separation
Dcook
источник
источник
bayesglm
бумаге , они утверждают , что разделение «является общей проблемой, даже если размер выборки велик , а число предикторов мал»bayesglm
попытка избежать разделения путем добавления априора, но с 24 000 строк, априор, вероятно, затоплен вероятностью. Попробуйте уменьшитьprior.scale
, возможно, на большое количество. Также подумайте об увеличении степеней свободы априора, что поможет исключить большие ценности, связанные с разделением.Ответы:
Вы можете легко проверить, идеально ли разделены ваши классы в пространстве дизайна. Это сводится к решению задачи линейного программирования. Реализация этого «теста» на R (не тест в статистическом смысле этого слова) реализована в пакете safeBinaryRegression .
Если выясняется, что разделение действительно является проблемой, и если вы заинтересованы только в простом ванильном использовании glm (например, glm вызывается не функцией более высокого уровня, а вами), то существует реализация R алгоритмов, которые немного модифицирует классический, чтобы сделать его «устойчивым» против разделения. Это реализовано в пакете hlr
источник