So beheben sie das problem in r: aufgrund von singularitäten undefiniert
Eine Fehlermeldung, die in R auftreten kann, ist:
Coefficients: (1 not defined because of singularities)
Diese Fehlermeldung tritt auf, wenn Sie ein Modell mit der glm()- Funktion in R anpassen und zwei oder mehr Ihrer Prädiktorvariablen eine exakte lineare Beziehung zueinander haben – bekannt als perfekte Multikollinearität .
Um diesen Fehler zu beheben, können Sie die Funktion cor() verwenden, um Variablen in Ihrem Datensatz zu identifizieren, die eine perfekte Korrelation zueinander aufweisen, und einfach eine dieser Variablen aus dem Regressionsmodell entfernen.
In diesem Tutorial wird erklärt, wie man mit dieser Fehlermeldung in der Praxis umgeht.
So reproduzieren Sie den Fehler
Angenommen, wir passen ein logistisches Regressionsmodell an den folgenden Datenrahmen in R an:
#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
Beachten Sie, dass wir unmittelbar vor der Koeffizientenausgabe die Meldung erhalten:
Coefficients: (1 not defined because of singularities)
Dies weist darauf hin, dass zwei oder mehr Prädiktorvariablen im Modell eine perfekte lineare Beziehung aufweisen und daher nicht alle Regressionskoeffizienten im Modell geschätzt werden können.
Beachten Sie beispielsweise, dass für die Prädiktorvariable x 2 keine Koeffizientenschätzungen vorgenommen werden können.
So gehen Sie mit dem Fehler um
Um herauszufinden, welche Prädiktorvariablen diesen Fehler verursachen, können wir mit der Funktion cor() eine Korrelationsmatrix erstellen und untersuchen, welche Variablen untereinander eine Korrelation von genau 1 haben:
#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
Aus der Korrelationsmatrix können wir erkennen, dass die Variablen x 1 und x 2 perfekt korreliert sind.
Um diesen Fehler zu beheben, können wir einfach eine dieser beiden Variablen aus dem Modell entfernen, da sie im Regressionsmodell tatsächlich keine eindeutigen oder unabhängigen Informationen liefern.
Angenommen, wir entfernen x 2 und passen das folgende logistische Regressionsmodell an:
#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
Beachten Sie, dass wir dieses Mal keine Fehlermeldung „Undefiniert aufgrund von Singularitäten“ erhalten.
Hinweis : Es spielt keine Rolle, ob wir x 1 oder x 2 entfernen. Das endgültige Modell enthält die gleiche Koeffizientenschätzung für die Variable, die Sie beibehalten möchten, und die allgemeine Anpassungsgüte des Modells wird gleich sein.
Zusätzliche Ressourcen
Die folgenden Tutorials erklären, wie mit anderen Fehlern in R umgegangen wird:
So beheben Sie in R: Ungültige Vorlagenformel in ExtractVars
So beheben Sie das Problem in R: Das Argument ist weder numerisch noch logisch: Geben Sie na zurück
So beheben Sie Folgendes: randomForest.default(m, y, …): Na/NaN/Inf im Aufruf einer Fremdfunktion