Hoe om te gaan met r waarschuwing: glm.fit: algoritme is niet geconvergeerd
Een veel voorkomende waarschuwing die u in R kunt tegenkomen is:
glm.fit: algorithm did not converge
Deze waarschuwing komt vaak voor wanneer u probeert een logistisch regressiemodel in R te passen en een perfecte scheiding ziet, dat wil zeggen dat een voorspellende variabele de responsvariabele perfect kan scheiden in 0 en in 1.
Het volgende voorbeeld laat zien hoe u in de praktijk met deze waarschuwing omgaat.
Hoe de waarschuwing te reproduceren
Stel dat we proberen het volgende logistische regressiemodel in R te passen:
#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
Merk op dat we het waarschuwingsbericht ontvangen: glm.fit: algoritme convergeerde niet .
We ontvangen dit bericht omdat de voorspellende variabele x de responsvariabele y perfect kan scheiden in 0 en 1.
Merk op dat voor elke x-waarde kleiner dan 1, y gelijk is aan 0. En voor elke x-waarde gelijk aan of groter dan 1, is y gelijk aan 1.
De volgende code toont een scenario waarin de voorspellende variabele de responsvariabele niet perfect kan scheiden in 0s en 1s:
#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
We ontvangen geen waarschuwingsberichten omdat de voorspellende variabele de responsvariabele niet perfect kan scheiden in 0 en 1.
Hoe om te gaan met de waarschuwing
Als we een scenario van perfecte scheiding tegenkomen, zijn er twee manieren om hiermee om te gaan:
Methode 1: Gebruik bestrafte regressie.
Eén optie is het gebruik van een vorm van bestrafte logistieke regressie, zoals lasso-logistische regressie of elastische net-regularisatie.
Raadpleeg het glmnet- pakket voor opties voor het implementeren van bestrafte logistische regressie in R.
Methode 2: Gebruik de voorspellende variabele om de responsvariabele perfect te voorspellen.
Als u vermoedt dat deze perfecte scheiding in de populatie bestaat, kunt u eenvoudigweg deze voorspellende variabele gebruiken om de waarde van de responsvariabele perfect te voorspellen.
In het bovenstaande scenario zagen we bijvoorbeeld dat de responsvariabele y altijd gelijk was aan 0 als de voorspellende variabele x kleiner was dan 1.
Als we vermoeden dat deze relatie geldt voor de totale populatie, kunnen we altijd voorspellen dat de waarde van y 0 zal zijn als x kleiner is dan 1, en hoeven we ons geen zorgen te maken over het toepassen van een bestraft logistisch regressiemodel.
Aanvullende bronnen
De volgende tutorials bieden aanvullende informatie over het gebruik van de glm() -functie in R:
Het verschil tussen glm en lm in R
Hoe de voorspellingsfunctie met glm in R te gebruiken
Hoe te handelen: glm.fit: numeriek aangepaste kansen 0 of 1 zijn opgetreden