Jak obsługiwać r ostrzeżenie: glm.fit: algorytm nie jest zbieżny


Typowym ostrzeżeniem, które możesz napotkać w R, jest:

 glm.fit: algorithm did not converge

To ostrzeżenie często pojawia się, gdy próbujesz dopasować model regresji logistycznej w R i widzisz idealną separację , to znaczy zmienna predykcyjna jest w stanie doskonale rozdzielić zmienną odpowiedzi na 0 i 1.

Poniższy przykład pokazuje, jak w praktyce postępować z tym ostrzeżeniem.

Jak odtworzyć ostrzeżenie

Załóżmy, że próbujemy dopasować następujący model regresji logistycznej w 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 

Zauważ, że pojawia się komunikat ostrzegawczy: glm.fit: algorytm nie zbiegł się .

Otrzymujemy tę wiadomość, ponieważ zmienna predykcyjna x jest w stanie doskonale rozdzielić zmienną odpowiedzi y na 0 i 1.

Zauważ, że dla każdej wartości x mniejszej niż 1 y jest równe 0. A dla każdej wartości x równej lub większej niż 1 y jest równe 1.

Poniższy kod przedstawia scenariusz, w którym zmienna predykcyjna nie jest w stanie idealnie rozdzielić zmiennej odpowiedzi na 0 i 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

Nie otrzymujemy żadnych komunikatów ostrzegawczych, ponieważ zmienna predykcyjna nie jest w stanie idealnie rozdzielić zmiennej odpowiedzi na 0 i 1.

Jak postępować z ostrzeżeniem

Jeśli mamy do czynienia ze scenariuszem idealnej separacji, można sobie z nią poradzić na dwa sposoby:

Metoda 1: Użyj ukaranej regresji.

Jedną z opcji jest zastosowanie formy penalnej regresji logistycznej, takiej jak regresja logistyczna lasso lub elastyczna regularyzacja sieci.

Opcje implementacji ukaranej regresji logistycznej w R. znajdują się w pakiecie glmnet .

Metoda 2: Użyj zmiennej predykcyjnej, aby doskonale przewidzieć zmienną odpowiedzi.

Jeśli podejrzewasz, że w populacji może istnieć idealna separacja, możesz po prostu użyć tej zmiennej predykcyjnej, aby idealnie przewidzieć wartość zmiennej odpowiedzi.

Na przykład w powyższym scenariuszu widzieliśmy, że zmienna odpowiedzi y była zawsze równa 0, gdy zmienna predykcyjna x była mniejsza niż 1.

Jeśli podejrzewamy, że ta zależność zachodzi w całej populacji, zawsze możemy przewidzieć, że wartość y będzie wynosić 0, gdy x jest mniejsze niż 1, i nie martwić się o dopasowanie ukaranego modelu regresji logistycznej.

Dodatkowe zasoby

Poniższe tutoriale dostarczają dodatkowych informacji na temat używania funkcji glm() w R:

Różnica między glm i lm w R
Jak korzystać z funkcji przewidywania z glm w R
Jak sobie radzić z: glm.fit: wystąpiło prawdopodobieństwo skorygowane numerycznie 0 lub 1

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *