Hoe op te lossen: fout in lm.fit(x, y, offset = offset, …): na/nan/inf in 'y'


Een fout die u kunt tegenkomen bij het gebruik van R is:

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

Deze fout treedt op wanneer u probeert de functie lm() te gebruiken om een lineair regressiemodel in R te fitten, maar de voorspeller of responsvariabele NaN- of Inf- waarden bevat.

Het volgende voorbeeld laat zien hoe u deze fout in de praktijk kunt corrigeren.

Hoe de fout te reproduceren

Stel dat we het volgende dataframe in R hebben dat informatie bevat over gespeelde minuten en gescoorde punten door verschillende basketbalspelers:

 #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

Merk op dat het dataframe NaN- en Inf- waarden bevat.

Stel nu dat we proberen een lineair regressiemodel in te passen met ‘minuten’ als voorspellende variabele en ‘punten’ als responsvariabele:

 #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'

We ontvangen een foutmelding omdat er NaN- en Inf- waarden aanwezig zijn in het dataframe.

Hoe u de fout kunt oplossen

Opgemerkt moet worden dat NA- waarden in het dataframe geen probleem vormen. In feite negeert R eenvoudigweg NA- waarden bij het aanpassen van het lineaire regressiemodel.

Het echte probleem wordt veroorzaakt door de NaN- en Inf- waarden.

De eenvoudigste manier om dit op te lossen is door de NaN- en Inf- waarden te vervangen door NA- waarden:

 #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

We kunnen het regressiemodel nu aanpassen:

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

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

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

Het resultaat toont de coëfficiënten van het regressiemodel.

Houd er rekening mee dat we geen fouten ontvangen sinds we de NaN- en Inf- waarden in het dataframe hebben vervangen.

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende fouten in R kunt oplossen:

Hoe op te lossen in R: onverwachte tekenreeksconstante
Oplossing in R: ongeldige sjabloonformule in ExtractVars
Hoe op te lossen in R: argument is noch numeriek noch logisch: return na

Einen Kommentar hinzufügen

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