Hoe op te lossen in r: ongedefinieerd vanwege singulariteiten


Een foutmelding die je tegen kunt komen in R is:

 Coefficients: (1 not defined because of singularities) 

Deze foutmelding treedt op wanneer u een model fitt met behulp van de glm()- functie in R en twee of meer van uw voorspellende variabelen een exacte lineaire relatie met elkaar hebben – ook wel perfecte multicollineariteit genoemd.

Om deze fout op te lossen, kunt u de functie cor() gebruiken om variabelen in uw dataset te identificeren die een perfecte correlatie met elkaar hebben en eenvoudigweg een van deze variabelen uit het regressiemodel verwijderen.

In deze tutorial wordt uitgelegd hoe u in de praktijk met deze foutmelding om kunt gaan.

Hoe de fout te reproduceren

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

Merk op dat we vlak vóór de uitvoer van de coëfficiënten het bericht ontvangen:

 Coefficients: (1 not defined because of singularities)

Dit geeft aan dat twee of meer voorspellende variabelen in het model een perfecte lineaire relatie hebben en dat daarom niet alle regressiecoëfficiënten in het model kunnen worden geschat.

Merk bijvoorbeeld op dat er geen schattingen van de coëfficiënten kunnen worden gemaakt voor de voorspellende variabele x 2 .

Hoe de fout moet worden afgehandeld

Om te identificeren welke voorspellende variabelen deze fout veroorzaken, kunnen we de functie cor() gebruiken om een correlatiematrix te produceren en te onderzoeken welke variabelen een correlatie van precies 1 met elkaar hebben:

 #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

Uit de correlatiematrix kunnen we zien dat de variabelen x 1 en x 2 perfect gecorreleerd zijn.

Om deze fout op te lossen, kunnen we eenvoudigweg een van deze twee variabelen uit het model verwijderen, omdat ze in het regressiemodel niet daadwerkelijk unieke of onafhankelijke informatie bieden.

Stel dat we x 2 verwijderen en passen in het volgende logistische regressiemodel:

 #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

Houd er rekening mee dat we deze keer geen foutmelding ‚ongedefinieerd vanwege singulariteiten‘ ontvangen.

Opmerking : het maakt niet uit of we x 1 of x 2 verwijderen. Het uiteindelijke model zal dezelfde coëfficiëntschatting bevatten voor de variabele die u besluit te behouden, en de algemene goedheid van het model zal hetzelfde zijn.

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u met andere 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