Como corrigir em r: indefinido devido a singularidades


Uma mensagem de erro que você pode encontrar em R é:

 Coefficients: (1 not defined because of singularities) 

Esta mensagem de erro ocorre quando você ajusta um modelo usando a função glm() em R e duas ou mais de suas variáveis preditoras têm uma relação linear exata entre si – conhecida como multicolinearidade perfeita .

Para corrigir esse erro, você pode usar a função cor() para identificar variáveis em seu conjunto de dados que possuem correlação perfeita entre si e simplesmente remover uma dessas variáveis do modelo de regressão.

Este tutorial explica como lidar com essa mensagem de erro na prática.

Como reproduzir o erro

Suponha que ajustemos um modelo de regressão logística ao seguinte quadro de dados em R:

 #define data
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(6, 6, 8, 8, 6, 4, 10, 16, 18, 18, 18, 16, 18, 18, 18),
                 x3 = c(4, 7, 7, 3, 8, 9, 9, 8, 7, 8, 9, 4, 9, 10, 13))

#fit logistic regression model
model <- glm(y~x1+x2+x3, data=df, family=binomial)

#view model summary
summary(model)

Call:
glm(formula = y ~ x1 + x2 + x3, family = binomial, data = df)

Deviance Residuals: 
       Min 1Q Median 3Q Max  
-1.372e-05 -2.110e-08 2.110e-08 2.110e-08 1.575e-05  

Coefficients: (1 not defined because of singularities)
              Estimate Std. Error z value Pr(>|z|)
(Intercept) -75.496 176487.031 0.000 1
x1 14.546 24314.459 0.001 1
x2 NA NA NA NA
x3 -2.258 20119.863 0.000 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2.0728e+01 on 14 degrees of freedom
Residual deviance: 5.1523e-10 on 12 degrees of freedom
AIC: 6

Number of Fisher Scoring iterations: 24

Observe que pouco antes da saída do coeficiente, recebemos a mensagem:

 Coefficients: (1 not defined because of singularities)

Isto indica que duas ou mais variáveis preditoras no modelo têm uma relação linear perfeita e, portanto, nem todos os coeficientes de regressão no modelo podem ser estimados.

Por exemplo, observe que nenhuma estimativa de coeficiente pode ser feita para a variável preditora x 2 .

Como lidar com o erro

Para identificar quais variáveis preditoras estão causando esse erro, podemos usar a função cor() para produzir uma matriz de correlação e examinar quais variáveis têm uma correlação de exatamente 1 entre si:

 #create correlation matrix
cor(df)

           y x1 x2 x3
y 1.0000000 0.9675325 0.9675325 0.3610320
x1 0.9675325 1.0000000 1.0000000 0.3872889
x2 0.9675325 1.0000000 1.0000000 0.3872889
x3 0.3610320 0.3872889 0.3872889 1.0000000

A partir da matriz de correlação, podemos ver que as variáveis x 1 e x 2 estão perfeitamente correlacionadas.

Para resolver este erro, podemos simplesmente remover uma destas duas variáveis do modelo, pois na verdade elas não fornecem informações únicas ou independentes no modelo de regressão.

Por exemplo, suponha que removemos x 2 e ajustamos o seguinte modelo de regressão logística:

 #fit logistic regression model
model <- glm(y~x1+x3, data=df, family=binomial)

#view model summary
summary(model)

Call:
glm(formula = y ~ x1 + x3, family = binomial, data = df)

Deviance Residuals: 
       Min 1Q Median 3Q Max  
-1.372e-05 -2.110e-08 2.110e-08 2.110e-08 1.575e-05  

Coefficients:
              Estimate Std. Error z value Pr(>|z|)
(Intercept) -75.496 176487.031 0.000 1
x1 14.546 24314.459 0.001 1
x3 -2.258 20119.863 0.000 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2.0728e+01 on 14 degrees of freedom
Residual deviance: 5.1523e-10 on 12 degrees of freedom
AIC: 6

Number of Fisher Scoring iterations: 24

Observe que desta vez não recebemos uma mensagem de erro “indefinido devido a singularidades”.

Nota : Não importa se removemos x 1 ou x 2 . O modelo final conterá a mesma estimativa de coeficiente para a variável que você decidir manter e a qualidade geral de ajuste do modelo será a mesma.

Recursos adicionais

Os tutoriais a seguir explicam como lidar com outros erros em 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

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *