Jak naprawić w r: niezdefiniowany z powodu osobliwości


Komunikat o błędzie, który możesz napotkać w R, to:

 Coefficients: (1 not defined because of singularities) 

Ten komunikat o błędzie pojawia się, gdy dopasujesz model za pomocą funkcji glm() w R i co najmniej dwie zmienne predykcyjne mają ze sobą dokładnie liniową zależność – nazywaną doskonałą współliniowością .

Aby naprawić ten błąd, możesz użyć funkcji cor() w celu zidentyfikowania zmiennych w zbiorze danych, które mają ze sobą doskonałą korelację, i po prostu usunąć jedną z tych zmiennych z modelu regresji.

W tym samouczku wyjaśniono, jak w praktyce postępować z tym komunikatem o błędzie.

Jak odtworzyć błąd

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

Zauważ, że tuż przed wyjściem współczynnika otrzymujemy komunikat:

 Coefficients: (1 not defined because of singularities)

Oznacza to, że dwie lub więcej zmiennych predykcyjnych w modelu ma idealną zależność liniową i dlatego nie można oszacować wszystkich współczynników regresji w modelu.

Na przykład należy zauważyć, że nie można dokonać estymacji współczynników dla zmiennej predykcyjnej x 2 .

Jak sobie poradzić z błędem

Aby zidentyfikować, które zmienne predykcyjne powodują ten błąd, możemy użyć funkcji cor() w celu utworzenia macierzy korelacji i sprawdzenia, które zmienne mają ze sobą korelację dokładnie 1 :

 #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

Z macierzy korelacji widzimy, że zmienne x 1 i x 2 są doskonale skorelowane.

Aby rozwiązać ten błąd, możemy po prostu usunąć jedną z tych dwóch zmiennych z modelu, ponieważ w rzeczywistości nie dostarczają one unikalnych ani niezależnych informacji w modelu regresji.

Załóżmy na przykład, że usuwamy x 2 i dopasowujemy następujący model regresji logistycznej:

 #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

Należy pamiętać, że tym razem nie otrzymujemy komunikatu o błędzie „niezdefiniowany z powodu osobliwości”.

Uwaga : Nie ma znaczenia, czy usuniemy x 1 czy x 2 . Ostateczny model będzie zawierał ten sam oszacowany współczynnik dla zmiennej, którą zdecydujesz się zachować, a ogólna dobroć dopasowania modelu będzie taka sama.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak radzić sobie z innymi 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 *