Как исправить: ошибка в lm.fit(x, y, offset = offset, …): na/nan/inf в 'y'


Одна ошибка, с которой вы можете столкнуться при использовании R:

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

Эта ошибка возникает, когда вы пытаетесь использовать функцию lm() для подбора модели линейной регрессии в R, но предиктор или переменная ответа содержат значения NaN или Inf .

В следующем примере показано, как исправить эту ошибку на практике.

Как воспроизвести ошибку

Предположим, у нас есть следующий фрейм данных в R, который содержит информацию о сыгранных минутах и очках, набранных различными баскетболистами:

#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

Обратите внимание, что фрейм данных содержит некоторые значения NaN и Inf .

Теперь предположим, что мы пытаемся подобрать модель линейной регрессии, используя «минуты» в качестве переменной-предиктора и «точки» в качестве переменной отклика:

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

Мы получаем ошибку, потому что во фрейме данных присутствуют значения NaN и Inf .

Как исправить ошибку

Стоит отметить, что значения NA во фрейме данных не являются проблемой. Фактически, R просто игнорирует значения NA при подборе модели линейной регрессии.

Настоящая проблема вызвана значениями NaN и Inf .

Самый простой способ решить эту проблему — заменить значения NaN и Inf значениями 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

Теперь мы можем подогнать регрессионную модель:

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

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

Coefficients:
(Intercept) minutes 
 5.062 1.048 

Выходные данные показывают коэффициенты регрессионной модели.

Обратите внимание, что мы не получаем никаких ошибок, так как мы заменили значения NaN и Inf во фрейме данных.

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в R:

Как исправить в R: непредвиденная строковая константа
Как исправить в R: неверная формула модели в ExtractVars
Как исправить в R: аргумент не является числовым или логическим: возвращается na

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.