Одна ошибка, с которой вы можете столкнуться при использовании 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