Como lidar com: glm.fit: probabilidades ajustadas numericamente 0 ou 1 ocorreram
Uma mensagem de aviso que você pode encontrar no R é:
Warning message: glm.fit: fitted probabilities numerically 0 or 1 occurred
Este aviso ocorre quando você está ajustando um modelo de regressão logística e as probabilidades previstas de uma ou mais observações em seu banco de dados não podem ser distinguidas de 0 ou 1.
Observe que esta é uma mensagem de aviso e não um erro. Mesmo se você receber esse erro, seu modelo de regressão logística ainda será adequado, mas pode ser útil analisar o quadro de dados original para ver se há algum valor discrepante que esteja causando o aparecimento desta mensagem de aviso.
Este tutorial explica como lidar com esta mensagem de aviso na prática.
Como reproduzir o aviso
Suponha que ajustemos um modelo de regressão logística ao seguinte quadro de dados em 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
Nosso modelo de regressão logística ajusta os dados com sucesso, mas recebemos uma mensagem de aviso que ajusta numericamente as probabilidades para 0 ou 1 .
Se usarmos o modelo de regressão logística ajustado para fazer previsões sobre o valor da resposta das observações no banco de dados original, podemos ver que quase todas as probabilidades previstas são indistinguíveis de 0 e 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
Como lidar com o aviso
Existem três maneiras de lidar com esta mensagem de aviso:
(1) Ignore isso.
Em alguns casos, você pode simplesmente ignorar esta mensagem de aviso porque ela não indica necessariamente que há um problema com o modelo de regressão logística. Isso significa simplesmente que uma ou mais observações no quadro de dados previram valores indistinguíveis de 0 ou 1.
(2) Aumentar o tamanho da amostra.
Em outros casos, esta mensagem de aviso aparece ao trabalhar com pequenos blocos de dados para os quais simplesmente não há dados suficientes para fornecer um ajuste confiável do modelo. Para corrigir esse erro, simplesmente aumente o tamanho da amostra das observações inseridas no modelo.
(3) Remova valores discrepantes.
Noutros casos, este erro ocorre quando existem valores discrepantes na base de dados original e apenas um pequeno número de observações têm probabilidades próximas de 0 ou 1. Ao remover estes valores discrepantes, a mensagem de aviso muitas vezes desaparece.
Recursos adicionais
Os tutoriais a seguir explicam como lidar com outros avisos e erros no R:
Como corrigir em R: fórmula de modelo inválida em ExtractVars
Como consertar em R: o argumento não é numérico nem lógico: return na
Como corrigir: randomForest.default(m, y, …): Na/NaN/Inf na chamada de função estrangeira