Comment réparer : erreur dans lm.fit(x, y, offset = offset, …) : na/nan/inf dans ‘y’
Une erreur que vous pouvez rencontrer lors de l’utilisation de R est :
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
NA/NaN/Inf in 'y'
Cette erreur se produit lorsque vous tentez d’utiliser la fonction lm() pour ajuster un modèle de régression linéaire dans R, mais que le prédicteur ou la variable de réponse contient des valeurs NaN ou Inf .
L’exemple suivant montre comment corriger cette erreur dans la pratique.
Comment reproduire l’erreur
Supposons que nous ayons le bloc de données suivant dans R qui contient des informations sur les minutes jouées et les points marqués par divers joueurs de basket-ball :
#create data frame with some NA, NaN, Inf values
df <- data.frame(minutes=c(4, NA, 28, 12, 30, 21, 14),
points=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 Inf
5 30 43
6 21 25
7 14 17
Notez que le bloc de données contient des valeurs NaN et Inf .
Supposons maintenant que nous essayions d’ajuster un modèle de régression linéaire en utilisant « minutes » comme variable prédictive et « points » comme variable de réponse :
#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'
Nous recevons une erreur car des valeurs NaN et Inf sont présentes dans la trame de données.
Comment réparer l’erreur
Il convient de noter que les valeurs NA dans la trame de données ne posent pas de problème. En fait, R ignore simplement les valeurs NA lors de l’ajustement du modèle de régression linéaire.
Le vrai problème est causé par les valeurs NaN et Inf .
Le moyen le plus simple de résoudre ce problème consiste à remplacer les valeurs NaN et Inf par des valeurs 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
Nous pouvons maintenant adapter le modèle de régression :
#fit regression model
lm(points ~ minutes, data=df)
Call:
lm(formula = points ~ minutes, data = df)
Coefficients:
(Intercept) minutes
5.062 1.048
Le résultat montre les coefficients du modèle de régression.
Notez que nous ne recevons aucune erreur puisque nous avons remplacé les valeurs NaN et Inf dans le bloc de données.
Ressources additionnelles
Les didacticiels suivants expliquent comment corriger d’autres erreurs courantes dans R :
Comment réparer dans R : constante de chaîne inattendue
Comment réparer dans R : formule de modèle invalide dans ExtractVars
Comment réparer dans R : l’argument n’est ni numérique ni logique : renvoyer na