Come risolvere: errore in lm.fit(x, y, offset = offset, …): na/nan/inf in 'y'


Un errore che potresti riscontrare quando usi R è:

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

Questo errore si verifica quando si tenta di utilizzare la funzione lm() per adattare un modello di regressione lineare in R, ma il predittore o la variabile di risposta contiene valori NaN o Inf .

L’esempio seguente mostra come correggere questo errore nella pratica.

Come riprodurre l’errore

Supponiamo di avere il seguente frame di dati in R che contiene informazioni sui minuti giocati e sui punti segnati da vari giocatori di basket:

 #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

Si noti che il frame di dati contiene valori NaN e Inf .

Supponiamo ora di provare ad adattare un modello di regressione lineare utilizzando “minuti” come variabile predittrice e “punti” come variabile di risposta:

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

Riceviamo un errore perché nel frame di dati sono presenti i valori NaN e Inf .

Come correggere l’errore

Va notato che i valori NA nel frame dati non sono un problema. In effetti, R ignora semplicemente i valori NA quando si adatta al modello di regressione lineare.

Il vero problema è causato dai valori NaN e Inf .

Il modo più semplice per risolvere questo problema è sostituire i valori NaN e Inf con valori NA :

 #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

Possiamo ora adattare il modello di regressione:

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

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

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

Il risultato mostra i coefficienti del modello di regressione.

Tieni presente che non riceviamo alcun errore poiché abbiamo sostituito i valori NaN e Inf nel frame di dati.

Risorse addizionali

I seguenti tutorial spiegano come correggere altri errori comuni in R:

Come risolvere in R: costante di stringa inaspettata
Come risolvere il problema in R: formula modello non valida in ExtractVars
Come risolvere in R: l’argomento non è né numerico né logico: return na

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *