Як виправити: помилка в 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

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *