Як працювати з r попередження: glm.fit: алгоритм не зійшовся


Загальне попередження, яке ви можете зустріти в R:

 glm.fit: algorithm did not converge

Це попередження часто виникає, коли ви намагаєтесь підібрати модель логістичної регресії в R і бачите ідеальне розділення , тобто змінна предиктора здатна ідеально розділити змінну відповіді на 0 і 1.

У наступному прикладі показано, як на практиці впоратися з цим попередженням.

Як відтворити попередження

Припустімо, що ми намагаємося підігнати наступну модель логістичної регресії в R:

 #create data frame
df <- data. frame (x=c(.1, .2, .3, .4, .5, .6, .7, .8, .9, 1, 1, 1.1, 1.3, 1.5, 1.7),
                 y=c(0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1))

#attempt to fit logistic regression model
glm(y~x, data=df, family=" binomial ")

Call: glm(formula = y ~ x, family = "binomial", data = df)

Coefficients:
(Intercept)x  
     -409.1 431.1  

Degrees of Freedom: 14 Total (ie Null); 13 Residual
Null Deviance: 20.19 
Residual Deviance: 2.468e-09 AIC: 4
Warning messages:
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

Зверніть увагу, що ми отримуємо попередження: glm.fit: algorithm did not converge .

Ми отримуємо це повідомлення, тому що змінна предиктора x здатна ідеально розділити змінну відповіді y на 0 і 1.

Зверніть увагу, що для кожного значення x, меншого за 1, y дорівнює 0. А для кожного значення x, що дорівнює або перевищує 1, y дорівнює 1.

У наведеному нижче коді показано сценарій, коли змінна предиктора не може ідеально розділити змінну відповіді на 0 і 1:

 #create data frame
df <- data. frame (x=c(.1, .2, .3, .4, .5, .6, .7, .8, .9, 1, 1, 1.1, 1.3, 1.5, 1.7),
                 y=c(0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1))

#fit logistic regression model
glm(y~x, data=df, family=" binomial ")

Call: glm(formula = y ~ x, family = "binomial", data = df)

Coefficients:
(Intercept) x  
     -2.112 2.886  

Degrees of Freedom: 14 Total (ie Null); 13 Residual
Null Deviance: 20.73 
Residual Deviance: 16.31 AIC: 20.31

Ми не отримуємо жодних попереджень, оскільки змінна предиктора не може ідеально розділити змінну відповіді на 0 і 1.

Як поводитися з попередженням

Якщо ми стикаємося з ідеальним сценарієм розлучення, є два способи впоратися з ним:

Спосіб 1. Використовуйте штрафну регресію.

Одним із варіантів є використання форми штрафної логістичної регресії, такої як логістична регресія ласо або регулярізація еластичної мережі.

Зверніться до пакета glmnet , щоб дізнатися про варіанти реалізації штрафної логістичної регресії в R.

Спосіб 2: Використовуйте змінну предиктора, щоб точно передбачити змінну відповіді.

Якщо ви підозрюєте, що таке ідеальне розділення може існувати в популяції, ви можете просто використати цю змінну предиктора, щоб точно передбачити значення змінної відповіді.

Наприклад, у наведеному вище сценарії ми побачили, що змінна відповіді y завжди дорівнювала 0, коли змінна предиктора x була меншою за 1.

Якщо ми підозрюємо, що цей зв’язок зберігається в загальній сукупності, ми завжди можемо передбачити, що значення y буде 0, коли x менше 1, і не хвилюватися про підгонку штрафної моделі логістичної регресії.

Додаткові ресурси

Наступні посібники надають додаткову інформацію про використання функції glm() у R:

Різниця між glm і lm у R
Як використовувати функцію прогнозування з glm у R
Як обробляти: glm.fit: виникла чисельно скоригована ймовірність 0 або 1

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

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