So beheben sie: fehler in lm.fit(x, y, offset = offset, …): na/nan/inf in 'y'


Ein Fehler, der bei der Verwendung von R auftreten kann, ist:

 Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...): 
  NA/NaN/Inf in 'y'

Dieser Fehler tritt auf, wenn Sie versuchen, mit der Funktion lm() ein lineares Regressionsmodell in R anzupassen, die Prädiktor- oder Antwortvariable jedoch NaN- oder Inf -Werte enthält.

Das folgende Beispiel zeigt, wie dieser Fehler in der Praxis behoben werden kann.

So reproduzieren Sie den Fehler

Angenommen, wir haben den folgenden Datenrahmen in R, der Informationen über gespielte Minuten und erzielte Punkte verschiedener Basketballspieler enthält:

 #create data frame with some NA, NaN, Inf values
df <- data. frame (minutes=c(4, NA, 28, 12, 30, 21, 14),
                 dots=c(12, NaN, 30, Inf, 43, 25, 17))

#view data frame
df

  minutes points
1 4 12
2 NA NaN
3 28 30
4 12 Lower
5 30 43
6 21 25
7 14 17

Beachten Sie, dass der Datenrahmen NaN- und Inf- Werte enthält.

Nehmen wir nun an, wir versuchen, ein lineares Regressionsmodell anzupassen, indem wir „Minuten“ als Prädiktorvariable und „Punkte“ als Antwortvariable verwenden:

 #attempt to fit regression model
lm(points ~ minutes, data=df)

Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...): 
  NA/NaN/Inf in 'y'

Wir erhalten eine Fehlermeldung, weil im Datenrahmen NaN- und Inf- Werte vorhanden sind.

So beheben Sie den Fehler

Es ist zu beachten, dass NA- Werte im Datenrahmen kein Problem darstellen. Tatsächlich ignoriert R bei der Anpassung des linearen Regressionsmodells einfach NA- Werte.

Das eigentliche Problem wird durch die NaN- und Inf- Werte verursacht.

Der einfachste Weg, dies zu beheben, besteht darin, die NaN- und Inf -Werte durch NA- Werte zu ersetzen:

 #Replace NaN & Inf with NA
df[is. na (df) | df==" Inf "] = NA

#view updated data frame
df

  minutes points
1 4 12
2 NA NA
3 28 30
4 12 NA
5 30 43
6 21 25
7 14 17

Wir können nun das Regressionsmodell anpassen:

 #fit regression model
lm(points ~ minutes, data=df)

Call:
lm(formula = points ~ minutes, data = df)

Coefficients:
(Intercept) minutes  
      5,062 1,048

Das Ergebnis zeigt die Koeffizienten des Regressionsmodells.

Beachten Sie, dass wir keine Fehler erhalten, da wir die NaN- und Inf -Werte im Datenrahmen ersetzt haben.

Zusätzliche Ressourcen

Die folgenden Tutorials erklären, wie Sie andere häufige Fehler in R beheben können:

So beheben Sie in R: unerwartete Zeichenfolgenkonstante
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

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert