Если у вас есть переменная, которая отлично разделяет нули и единицы в целевой переменной, R выдаст следующее предупреждающее сообщение «идеальное или квази идеальное разделение»:
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred
Мы все еще получаем модель, но оценки коэффициента завышены.
Как вы справляетесь с этим на практике?
r
regression
logistic
separation
user333
источник
источник
Ответы:
Решение этой проблемы заключается в использовании формы наказания регрессии. Фактически, это первоначальная причина, по которой были разработаны некоторые из оштрафованных форм регрессии (хотя, как оказалось, они обладают другими интересными свойствами.
Установите и загрузите пакет glmnet в R, и вы в основном готовы к работе. Одним из менее удобных для пользователя аспектов glmnet является то, что вы можете кормить его только матрицами, а не формулами, к которым мы привыкли. Тем не менее, вы можете посмотреть на model.matrix и тому подобное, чтобы построить эту матрицу из data.frame и формулы ...
Теперь, когда вы ожидаете, что это идеальное разделение является не просто побочным продуктом вашей выборки, но может быть правдой в популяции, вы конкретно не хотите с этим справляться: используйте эту разделяющую переменную просто как единственный предиктор для вашего результата, а не используя модель любого вида.
источник
У вас есть несколько вариантов:
Удалить некоторые из смещения.
(а) штрафуя вероятность согласно предложению @ Ника. Пакет logistf в R или
FIRTH
опция в SASPROC LOGISTIC
реализуют метод, предложенный в Firth (1993), «Уменьшение смещения оценок максимального правдоподобия», Biometrika , 80 , 1 .; который удаляет смещение первого порядка из оценок максимального правдоподобия. ( Здесь @Gavin рекомендуетbrglm
пакет, с которым я не знаком, но я полагаю, что он реализует аналогичный подход для неканонических функций связи, например, Probit.)(б) Используя средне несмещенные оценки в точной условной логистической регрессии. Пакет elrm или logistiX в R, или
EXACT
утверждение в SASPROC LOGISTIC
.Исключите случаи, когда происходит предсказание категории или значения, вызывающего разделение. Они вполне могут быть за пределами вашей сферы; или достойны дальнейшего целенаправленного расследования. (Пакет R safeBinaryRegression удобен для их поиска.)
Повторите модель. Как правило, это то, что вы сделали бы заранее, если бы думали об этом, потому что это слишком сложно для вашего размера выборки.
(а) Удалить предиктор из модели. Dicey, по причинам, указанным @Simon: «Вы удаляете предиктор, который лучше всего объясняет ответ».
(б) путем свертывания категорий предикторов / объединения значений предикторов. Только если это имеет смысл.
(c) Повторное выражение предиктора как двух (или более) скрещенных факторов без взаимодействия. Только если это имеет смысл.
Используйте байесовский анализ , как на @ Мануил по предложению . Хотя кажется маловероятным, что вам захочется просто из-за разделения, стоит задуматься о его других достоинствах. Документ, который он рекомендует, - это Gelman et al (2008), « Слабоинформативное предварительное распределение по умолчанию для логистических и других регрессионных моделей», Ann. Appl. Стат. , 2 , 4 : рассматриваемое значение по умолчанию - независимый коэффициент Коши для каждого коэффициента со средним нулем и шкалой ; должен использоваться после стандартизации всех непрерывных предикторов, чтобы иметь среднее значение нуля и стандартное отклонение . Если вы можете выяснить сильно информативные приоры, тем лучше. 152 12
Ничего не делать. (Но рассчитайте доверительные интервалы на основе вероятностей профиля, поскольку оценки стандартной ошибки Вальда будут сильно ошибочными.) Часто пропускаемый вариант. Если цель модели - просто описать то, что вы узнали о взаимосвязях между предикторами и реакцией, нет ничего постыдного в цитировании доверительного интервала для отношения шансов, скажем, 2,3 и выше. (Действительно, может показаться странным приводить доверительные интервалы, основанные на непредвзятых оценках, которые исключают отношения шансов, наилучшим образом поддерживаемые данными.) Проблемы возникают, когда вы пытаетесь предсказать, используя точечные оценки, и предиктор, по которому происходит разделение, затмевает другие.
Используйте скрытую модель логистической регрессии, как описано в Rousseeuw & Christmann (2003), «Устойчивость к разделению и выбросам в логистической регрессии», Вычислительная статистика и анализ данных , 43 , 3, и реализовано в пакете R. hlr . (@ user603 предлагает это. ) Я не читал газету, но они говорят в аннотации «предлагается чуть более общая модель, при которой наблюдаемый отклик сильно связан, но не равен ненаблюдаемому истинному отклику», который предлагает мне было бы не очень хорошей идеей использовать метод, если это не звучит правдоподобно.
«Измените несколько случайно выбранных наблюдений с 1 на 0 или с 0 на 1 среди переменных, демонстрирующих полное разделение»: комментарий RobertF . Это предположение, по-видимому, возникает из-за того, что разделение рассматривается как проблема как таковая, а не как признак нехватки информации в данных, что может привести к тому, что вы предпочтете другие методы для оценки максимального правдоподобия или ограничите выводы теми, которые вы можете сделать с помощью разумная точность - подходы, которые имеют свои достоинства и являются не просто «исправлением» для разделения. (Помимо того , что это является бесспорным ad hoc , большинству неприятно, что аналитики, задающие один и тот же вопрос об одних и тех же данных, делая одни и те же предположения, должны давать разные ответы из-за результата броска монеты или чего-либо еще.)
источник
Это расширение ответов Scortchi и Manoel, но так как вы, кажется, используете RI, я подумал, что я предоставлю некоторый код. :)
Я считаю, что самым простым и простым решением вашей проблемы является использование байесовского анализа с неинформативными предварительными допущениями, предложенными Gelman et al (2008). Как упоминает Scortchi, Гельман рекомендует ставить Коши с медианой 0,0 и шкалой 2,5 для каждого коэффициента (нормализовано, чтобы иметь среднее значение 0,0 и SD 0,5). Это упорядочит коэффициенты и слегка потянет их к нулю. В этом случае это именно то, что вы хотите. Из-за очень широких хвостов Коши по-прежнему учитывает большие коэффициенты (в отличие от нормалей с короткими хвостами) от Гельмана:
Как запустить этот анализ? Используйте
bayesglm
функцию в пакете arm, которая реализует этот анализ!Не очень хорошо работает ... Теперь байесовская версия:
Супер просто, нет?
Рекомендации
Гельман и др. (2008), «Слабо информативное предварительное распределение по умолчанию для логистических и других регрессионных моделей», Ann. Appl. Стат., 2, 4 http://projecteuclid.org/euclid.aoas/1231424214
источник
bayesglm
использует? Если оценка ML эквивалентна байесовской с плоским предшествованием, как неинформативные приоры могут помочь здесь?prior.df
значения по умолчанию1.0
и / или уменьшаяprior.scale
значения по умолчанию2.5
, возможно, начните пытаться:m=bayesglm(match ~. , family = binomial(link = 'logit'), data = df, prior.df=5)
Одним из наиболее полных объяснений проблем «квазиполного разделения», по всей вероятности, является статья Пола Эллисона. Он пишет о программном обеспечении SAS, но проблемы, которые он решает, распространяются на любое программное обеспечение:
Эллисон обсуждает многие из уже упомянутых решений, в том числе удаление проблемных переменных, свертывание категорий, бездействие, использование точной логистической регрессии, байесовскую оценку и оценку максимального правдоподобия с применением штрафных санкций.
http://www2.sas.com/proceedings/forum2008/360-2008.pdf
источник
Для логистических моделей для вывода важно сначала подчеркнуть, что здесь нет ошибок. Значение∞
warning
in R правильно информирует вас о том, что оценка максимального правдоподобия лежит на границе пространства параметров. Отношение шансов сильно наводит на мысль об ассоциации. Единственная проблема заключается в том, что два распространенных метода создания тестов: тест Вальда и тест отношения правдоподобия требуют оценки информации в рамках альтернативной гипотезы.С данными, сгенерированными в соответствии с
Предупреждение сделано:
что очень очевидно отражает зависимость, которая встроена в эти данные.
В R тест Вальда находится с
summary.glm
или сwaldtest
вlmtest
упаковке. Проверка отношения правдоподобия выполняется сanova
илиlrtest
вlmtest
упаковке. В обоих случаях информационная матрица бесконечно ценится, и нет доступных выводов. Скорее всего , R делает производить вывод, но вы не можете доверять. Вывод, который R обычно производит в этих случаях, имеет значения p, очень близкие к единице. Это связано с тем, что потеря точности в операционной на порядки меньше, чем потеря точности в матрице дисперсии и ковариации.Некоторые решения изложены здесь:
Используйте одноступенчатую оценку,
Существует множество теорий, подтверждающих низкое смещение, эффективность и обобщаемость одношаговых оценок. Легко указать одношаговую оценку в R, и результаты, как правило, очень благоприятны для прогнозирования и вывода. И эта модель никогда не будет расходиться, потому что итератор (Ньютон-Рафсон) просто не имеет возможности сделать это!
дает:
Таким образом, вы можете увидеть, что прогнозы отражают направление тренда. И вывод весьма наводит на мысль о тенденциях, которые мы считаем истинными.
выполнить тест оценки,
Счет (или Рао) статистика отличается от отношения вероятности и статистики Wald. Это не требует оценки дисперсии согласно альтернативной гипотезе. Подгоняем модель под нуль:
Дает в качестве меры ассоциации очень сильную статистическую значимость. Обратите внимание на то, что оценщик за один шаг выдает тестовую статистику равную 50,7, а тест оценки здесь производит тестовую статистику pf 45,75.χ2
В обоих случаях вы делаете вывод об ИЛИ бесконечности.
и используйте средние несмещенные оценки для доверительного интервала.
Вы можете получить медианную несмещенную, не единственную 95% -ную ДИ для отношения бесконечных шансов, используя медианную несмещенную оценку. Пакет
epitools
в R может сделать это. И я привожу пример реализации этой оценки здесь: доверительный интервал для выборки Бернуллиисточник
test="Rao"
кanova
функции. (Ну, последние два - заметки, а не придирки.)Будьте осторожны с этим предупреждающим сообщением от R. Посмотрите на это сообщение в блоге Эндрю Гельмана, и вы увидите, что это не всегда проблема идеального разделения, а иногда и ошибка
glm
. Кажется, что, если начальные значения слишком далеки от оценки максимального правдоподобия, это взрывается. Итак, проверьте сначала с другим программным обеспечением, таким как Stata.Если у вас действительно есть эта проблема, вы можете попробовать использовать байесовское моделирование с информативными априорами.
Но на практике я просто избавляюсь от предикторов, вызывающих проблемы, потому что я не знаю, как выбрать информативный априор. Но я думаю, что есть статья Гельмана об использовании информативного априора, когда у вас есть проблема идеального разделения. Просто погугли это. Может быть, вы должны попробовать.
источник
glm2
пакет реализует проверку того, что вероятность фактически увеличивается на каждом шаге оценки, и вдвое уменьшает размер шага, если это не так.safeBinaryRegression
который предназначен для диагностики и устранения таких проблем, используя методы оптимизации, чтобы точно проверить, есть ли разделение или квазисепарация. Попробуй!Я не уверен, что согласен с утверждениями в вашем вопросе.
Я думаю, что предупреждающее сообщение означает, что для некоторого наблюдаемого уровня Х в ваших данных подобранная вероятность численно равна 0 или 1. Другими словами, при разрешении оно отображается как 0 или 1.
Вы можете запустить,
predict(yourmodel,yourdata,type='response')
и вы найдете 0 или / и 1 там как прогнозируемые вероятности.В результате, я думаю, что можно просто использовать результаты.
источник
Я понимаю, что это старый пост, однако я все равно продолжу отвечать на него, поскольку я боролся с ним несколько дней, и он может помочь другим.
Полное разделение происходит, когда выбранные вами переменные, соответствующие модели, могут очень точно различать 0 и 1 или да и нет. Весь наш подход к науке о данных основан на оценке вероятности, но в этом случае он терпит неудачу.
Шаги выпрямления: -
Используйте bayesglm () вместо glm (), если разница между переменными мала
Иногда использование (maxit = ”некоторое числовое значение”) вместе с bayesglm () может помочь
3. Третья и самая важная проверка выбранных переменных для подгонки модели, должна быть переменная, для которой мультиколлинеарность с переменной Y (outout) очень высока, отбросьте эту переменную из вашей модели.
Как и в моем случае, у меня были данные оттока телекоммуникаций, чтобы предсказать отток данных валидации. У меня была переменная в моих тренировочных данных, которая могла очень различать между да и нет. После того, как я уронил его, я смог получить правильную модель. Более того, вы можете использовать пошаговую (подгонку), чтобы сделать вашу модель более точной.
источник