Как справиться: glm.fit: подогнанные вероятности численно 0 или 1 произошли


Одно предупреждающее сообщение, с которым вы можете столкнуться в R:

Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred

Это предупреждение возникает, когда вы подбираете модель логистической регрессии, а прогнозируемые вероятности одного или нескольких наблюдений в вашем фрейме данных неотличимы от 0 или 1.

Стоит отметить, что это предупреждение, а не ошибка. Даже если вы получите эту ошибку, ваша модель логистической регрессии все равно будет соответствовать, но, возможно, стоит проанализировать исходный фрейм данных, чтобы увидеть, есть ли какие-либо выбросы, вызывающие появление этого предупреждающего сообщения.

В этом руководстве рассказывается, как устранить это предупреждающее сообщение на практике.

Как воспроизвести предупреждение

Предположим, мы подгоняем модель логистической регрессии к следующему фрейму данных в R:

#create data frame
df <- data.frame(y = c(0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1),
 x1 = c(3, 3, 4, 4, 3, 2, 5, 8, 9, 9, 9, 8, 9, 9, 9),
 x2 = c(8, 7, 7, 6, 5, 6, 5, 2, 2, 3, 4, 3, 7, 4, 4))

#fit logistic regression model
model <- glm(y ~ x1 + x2, data=df, family=binomial)

#view model summary
summary(model)

Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred 

Call:
glm(formula = y ~ x1 + x2, family = binomial, data = df)

Deviance Residuals: 
 Min 1Q Median 3Q Max 
-1.729e-05 -2.110e-08 2.110e-08 2.110e-08 1.515e-05 

Coefficients:
 Estimate Std. Error z value Pr(>|z|)
(Intercept) -75.205 307338.933 0 1
x1 13.309 28512.818 0 1
x2 -2.793 37342.280 0 1

(Dispersion parameter for binomial family taken to be 1)

 Null deviance: 2.0728e+01 on 14 degrees of freedom
Residual deviance: 5.6951e-10 on 12 degrees of freedom
AIC: 6

Number of Fisher Scoring iterations: 24

Наша модель логистической регрессии успешно соответствует данным, но мы получаем предупреждающее сообщение о том, что произошло сопоставление вероятностей с числовым значением 0 или 1 .

Если мы используем подобранную модель логистической регрессии для прогнозирования значения отклика наблюдений в исходном фрейме данных, мы увидим, что почти все прогнозируемые вероятности неотличимы от 0 и 1:

#use fitted model to predict response values
df$y_pred = predict(model, df, type=" response ")

#view updated data frame
df

 y x1 x2 y_pred
1 0 3 8 2.220446e-16
2 0 3 7 2.220446e-16
3 0 4 7 2.220446e-16
4 0 4 6 2.220446e-16
5 0 3 5 2.220446e-16
6 0 2 6 2.220446e-16
7 0 5 5 1.494599e-10
8 1 8 2 1.000000e+00
9 1 9 2 1.000000e+00
10 1 9 3 1.000000e+00
11 1 9 4 1.000000e+00
12 1 8 3 1.000000e+00
13 1 9 7 1.000000e+00
14 1 9 4 1.000000e+00
15 1 9 4 1.000000e+00

Как справиться с предупреждением

Есть три способа справиться с этим предупреждающим сообщением:

(1) Не обращайте внимания.

В некоторых случаях вы можете просто игнорировать это предупреждающее сообщение, потому что оно не обязательно указывает на то, что с моделью логистической регрессии что-то не так. Это просто означает, что одно или несколько наблюдений во фрейме данных имеют прогнозируемые значения, неотличимые от 0 или 1.

(2) Увеличьте размер выборки.

В других случаях это предупреждающее сообщение появляется, когда вы работаете с небольшими фреймами данных, когда просто недостаточно данных для обеспечения надежной подгонки модели. Чтобы устранить эту ошибку, просто увеличьте размер выборки наблюдений, которые вы вводите в модель.

(3) Удалить выбросы.

В других случаях эта ошибка возникает, когда в исходном фрейме данных есть выбросы и когда лишь небольшое количество наблюдений имеют вероятности, близкие к 0 или 1. При удалении этих выбросов предупреждающее сообщение часто исчезает.

Дополнительные ресурсы

В следующих руководствах объясняется, как обрабатывать другие предупреждения и ошибки в R:

Как исправить в R: неверная формула модели в ExtractVars
Как исправить в R: аргумент не является числовым или логическим: возвращается na
Как исправить: randomForest.default(m, y, …): Na/NaN/Inf в вызове сторонней функции

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.