Hoe te handelen: glm.fit: numeriek aangepaste kansen 0 of 1 zijn opgetreden


Een waarschuwingsbericht dat u in R kunt tegenkomen is:

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

Deze waarschuwing verschijnt wanneer u een logistisch regressiemodel aanpast en de voorspelde waarschijnlijkheid van een of meer waarnemingen in uw database niet van 0 of 1 kan worden onderscheiden.

Houd er rekening mee dat dit een waarschuwingsbericht is en geen fout. Zelfs als u deze fout ontvangt, zal uw logistische regressiemodel nog steeds passen, maar het kan nuttig zijn om het oorspronkelijke dataframe te analyseren om te zien of er uitschieters zijn die ervoor zorgen dat dit waarschuwingsbericht verschijnt.

In deze tutorial wordt uitgelegd hoe u in de praktijk met deze waarschuwingsmelding omgaat.

Hoe de waarschuwing te reproduceren

Stel dat we een logistisch regressiemodel passen in het volgende dataframe in 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

Ons logistieke regressiemodel past de gegevens succesvol aan, maar we ontvangen een waarschuwingsbericht dat de kansen numeriek aanpast aan 0 of 1 .

Als we het gepaste logistische regressiemodel gebruiken om voorspellingen te doen over de responswaarde van waarnemingen in de oorspronkelijke database, kunnen we zien dat bijna alle voorspelde kansen niet te onderscheiden zijn van 0 en 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

Hoe om te gaan met de waarschuwing

Er zijn drie manieren om met dit waarschuwingsbericht om te gaan:

(1) Negeer het.

In sommige gevallen kunt u dit waarschuwingsbericht eenvoudigweg negeren, omdat dit niet noodzakelijkerwijs aangeeft dat er een probleem is met het logistische regressiemodel. Dit betekent eenvoudigweg dat een of meer waarnemingen in het dataframe waarden hebben voorspeld die niet te onderscheiden zijn van 0 of 1.

(2) Vergroot de steekproefomvang.

In andere gevallen verschijnt dit waarschuwingsbericht wanneer u werkt met kleine gegevensblokken waarvoor er eenvoudigweg niet genoeg gegevens zijn om een betrouwbare modelfit te bieden. Om deze fout te corrigeren, vergroot u eenvoudigweg de steekproefomvang van de waarnemingen die u in het model invoert.

(3) Verwijder uitschieters.

In andere gevallen treedt deze fout op als er uitschieters in de oorspronkelijke database voorkomen en slechts een klein aantal waarnemingen een waarschijnlijkheid dichtbij 0 of 1 heeft. Door deze uitschieters te verwijderen verdwijnt de waarschuwing vaak.

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u met andere waarschuwingen en fouten in R omgaat:

Oplossing in R: ongeldige sjabloonformule in ExtractVars
Hoe op te lossen in R: argument is noch numeriek noch logisch: return na
Oplossing: randomForest.default(m, y, …): Na/NaN/Inf in externe functieaanroep

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert