Как справиться: 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 в вызове сторонней функции