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