Як працювати з 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