Jak sobie radzić: glm.fit: wystąpiło prawdopodobieństwo skorygowane numerycznie 0 lub 1


Komunikat ostrzegawczy, który możesz napotkać w R, to:

 Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred 

To ostrzeżenie pojawia się, gdy dopasowujesz model regresji logistycznej i przewidywanego prawdopodobieństwa jednej lub większej liczby obserwacji w bazie danych nie można odróżnić od 0 lub 1.

Należy pamiętać, że jest to komunikat ostrzegawczy , a nie błąd. Nawet jeśli pojawi się ten błąd, model regresji logistycznej będzie nadal pasował, ale pomocne może być przeanalizowanie oryginalnej ramki danych w celu sprawdzenia, czy istnieją jakieś wartości odstające powodujące wyświetlenie tego komunikatu ostrzegawczego.

W tym samouczku wyjaśniono, jak w praktyce postępować z tym komunikatem ostrzegawczym.

Jak odtworzyć ostrzeżenie

Załóżmy, że dopasowujemy model regresji logistycznej do następującej ramki danych w 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

Nasz model regresji logistycznej pomyślnie dopasowuje dane, ale pojawia się komunikat ostrzegawczy, który numerycznie dostosowuje prawdopodobieństwa do 0 lub 1 .

Jeśli użyjemy dopasowanego modelu regresji logistycznej do przewidywania wartości odpowiedzi obserwacji w oryginalnej bazie danych, możemy zobaczyć, że prawie wszystkie przewidywane prawdopodobieństwa są nie do odróżnienia od 0 i 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

Jak postępować z ostrzeżeniem

Istnieją trzy sposoby postępowania z tym komunikatem ostrzegawczym:

(1) Zignoruj to.

W niektórych przypadkach można po prostu zignorować ten komunikat ostrzegawczy, ponieważ niekoniecznie oznacza on problem z modelem regresji logistycznej. Oznacza to po prostu, że jedna lub więcej obserwacji w ramce danych ma przewidywane wartości nie do odróżnienia od 0 lub 1.

(2) Zwiększ wielkość próbki.

W innych przypadkach ten komunikat ostrzegawczy pojawia się podczas pracy z małymi blokami danych, dla których po prostu nie ma wystarczającej ilości danych, aby zapewnić niezawodne dopasowanie modelu. Aby skorygować ten błąd, wystarczy zwiększyć wielkość próby obserwacji wprowadzanych do modelu.

(3) Usuń wartości odstające.

W innych przypadkach ten błąd występuje, gdy w oryginalnej bazie danych znajdują się wartości odstające i tylko niewielka liczba obserwacji ma prawdopodobieństwa bliskie 0 lub 1. Po usunięciu tych wartości odstających komunikat ostrzegawczy często znika.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak radzić sobie z innymi ostrzeżeniami i błędami w R:

Jak naprawić w R: Nieprawidłowa formuła szablonu w ExtractVars
Jak naprawić w R: argument nie jest ani numeryczny, ani logiczny: return na
Jak naprawić: randomForest.default(m, y, …): Na/NaN/Inf w wywołaniu funkcji obcej

Dodaj komentarz

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