Как исправить: ошибка в 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),
                 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

Обратите внимание, что кадр данных содержит значения 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: аргумент не является ни числовым, ни логическим: return na

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *