Почему я получаю предупреждения «алгоритм не сходится» и «подогнаны проб численно 0 или 1» с помощью glm? - PullRequest
33 голосов
/ 22 декабря 2011

Так что это очень простой вопрос, просто не могу понять это.

Я запускаю logit с помощью функции glm, но продолжаю получать предупреждающие сообщения, относящиеся к независимой переменной. Они хранятся как факторы, и я изменил их на числовые, но не повезло. Я также закодировал их в 0/1, но это тоже не сработало.

Пожалуйста, помогите!

> mod2 <- glm(winorlose1 ~ bid1, family="binomial")
Warning messages:
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

Я тоже пробовал в Zelig, но похожая ошибка:

> mod2 = zelig(factor(winorlose1) ~ bid1, data=dat, model="logit")
How to cite this model in Zelig:
Kosuke Imai, Gary King, and Oliva Lau. 2008. "logit: Logistic Regression for Dichotomous Dependent Variables" in Kosuke Imai, Gary King, and Olivia Lau, "Zelig: Everyone's Statistical Software," http://gking.harvard.edu/zelig
Warning messages:
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

EDIT:

> str(dat)
'data.frame':   3493 obs. of  3 variables:
 $ winorlose1: int  2 2 2 2 2 2 2 2 2 2 ...
 $ bid1      : int  700 300 700 300 500 300 300 700 300 300 ...
 $ home      : int  1 0 1 0 0 0 0 1 0 0 ...
 - attr(*, "na.action")=Class 'omit'  Named int [1:63021] 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 ...
  .. ..- attr(*, "names")= chr [1:63021] "3494" "3495" "3496" "3497" ...

Ответы [ 3 ]

36 голосов
/ 22 декабря 2011

Если вы посмотрите на ?glm (или даже выполните поиск в Google для вашего второго предупреждающего сообщения), вы можете наткнуться на это из документации:

Для фона с предупреждающими сообщениями о «установлены»вероятности в числовом виде 0 или 1 имели место »для биномиальных GLM, см. Venables & Ripley (2002, pp. 197–8).

Теперь, не у всех есть эта книга.Но если предположить, что для меня это кошерно, вот соответствующий отрывок:

Существует одно довольно распространенное обстоятельство, при котором могут возникать как проблемы сходимости, так и феномен Хаука-Доннера.Это когда подобранные вероятности чрезвычайно близки к нулю или единице.Рассмотрим проблему медицинской диагностики с тысячами случаев и около 50 двоичных объясняющих переменных (которые могут возникнуть в результате кодирования меньшего количества категориальных переменных);один из этих показателей редко соответствует действительности, но всегда указывает на наличие заболевания.Тогда подобранные вероятности случаев с этим индикатором должны быть равны единице, чего можно достичь, только взяв β i = ∞.Результатом из glm будут предупреждения и предполагаемый коэффициент около +/- 10. В статистической литературе об этом достаточно широко обсуждается, как правило, утверждается, что не существует оценок максимального правдоподобия;см. Sautner and Duffy (1989, p. 234).

Один из авторов этой книги прокомментировал более подробно здесь .Итак, урок здесь заключается в том, чтобы внимательно посмотреть на один из уровней вашего предиктора.(И гугл предупреждающее сообщение!)

0 голосов
/ 03 января 2019

Это, вероятно, связано с полным разделением, то есть одна группа полностью состоит из 0 или 1.

Есть несколько вариантов решения этой проблемы:

(a) Использовать штрафной метод вероятности Ферта, реализованный в пакетах logistf или brglm в R. При этом используется метод, предложенный в Firth (1993), «Уменьшение смещения оценки максимального правдоподобия », Биометрика , 80 , 1 .; который удаляет смещение первого порядка из оценок максимального правдоподобия.

(b) Используя несмещенные срединные оценки в точной условной логистической регрессии. Пакет elrm или logistiX в R может сделать это.

(c) Использовать LASSO или упругую чистую регуляризованную логистическую регрессию, например используя пакет glmnet в R.

(d) Go Байесовский, ср. статья Гельман и др. (2008), "Слабоинформативное предварительное распределение по умолчанию для логистических и других регрессионных моделей", Ann. Appl. Стат. , 2 , 4 и функция bayesglm в пакете рукоятки.

(e) Использовать скрытую модель логистической регрессии, как описано в Rousseeuw & Christmann (2003), «Устойчивость к разделению и выбросам в логистической регрессии», Вычислительная статистика и анализ данных , 43 , 3 и реализовано в пакете R hlr .

Вы должны сначала перекодировать ваш фактор как фактор, используя dat$bid1 = as.factor(dat$bid1))

Решения этой проблемы также обсуждаются здесь:

https://stats.stackexchange.com/questions/11109/how-to-deal-with-perfect-separation-in-logistic-regression

https://stats.stackexchange.com/questions/45803/logistic-regression-in-r-resulted-in-perfect-separation-hauck-donner-phenomenon

https://stats.stackexchange.com/questions/239928/is-there-any-intuitive-explanation-of-why-logistic-regression-will-not-work-for

https://stats.stackexchange.com/questions/5354/logistic-regression-model-does-not-converge?rq=1

0 голосов
/ 20 декабря 2018

Если вы правильно указали формулу GLM и соответствующие входные данные (т. Е. Матрицу проектирования, функцию связи и т. Д.).Алгоритм glm может не сходиться из-за недостаточного количества итераций, используемых в алгоритме итеративно повторно взвешенных наименьших квадратов (IRLS).Измените maxit = 25 (по умолчанию) на maxit = 100 в R.

...