Як обробляти: 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: аргумент не є ні числовим, ні логічним: return na
Як виправити: randomForest.default(m, y, …): Na/NaN/Inf у зовнішньому виклику функції

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *