Как исправить: ошибка в eval(predvars, data, env): объект 'x' не найден


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

Error in eval(predvars, data, env) : object 'x' not found

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

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

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

Предположим, мы подогнали простую модель линейной регрессии в R:

#create data frame
data <- data.frame(x=c(1, 2, 2, 3, 5, 6, 8, 9),
 y=c(7, 8, 8, 6, 9, 8, 12, 14))

#fit linear regression model to data
model <- lm(y ~ x, data=data)

#view summary of model
summary(model)

Call:
lm(formula = y ~ x, data = data)

Residuals:
 Min 1Q Median 3Q Max 
-2.1613 -0.7500 0.5000 0.9355 1.5161 

Coefficients:
 Estimate Std. Error t value Pr(>|t|) 
(Intercept) 5.5161 0.9830 5.611 0.00137 \*\*
x 0.7742 0.1858 4.167 0.00590 \*\*
---
Signif. codes: 0 '\*\*\*' 0.001 '\*\*' 0.01 '\*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.463 on 6 degrees of freedom
Multiple R-squared: 0.7432, Adjusted R-squared: 0.7004 
F-statistic: 17.37 on 1 and 6 DF, p-value: 0.005896

Теперь предположим, что мы пытаемся использовать функцию predict() для предсказания значений отклика для нового фрейма данных:

#define new data frame
new_data <- data.frame(x1=c(4, 5, 7, 8, 9))

#attempt to predict y values for new data frame
predict(model, newdata=new_data)

Error in eval(predvars, data, env) : object 'x' not found

Мы получаем ошибку, потому что фрейм данных, который мы использовали при подгонке модели, имел переменную-предиктор с именем x , но в новом фрейме данных мы назвали переменную-предиктор x1 .

Поскольку эти имена не совпадают, мы получаем ошибку.

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

Чтобы исправить эту ошибку, просто убедитесь, что переменная-предиктор в новом фрейме данных имеет такое же имя.

Итак, мы обязательно назовем предикторную переменную x в новом фрейме данных:

#define new data frame
new_data <- data.frame(x=c(4, 5, 7, 8, 9))

Теперь мы можем использовать функцию predict() для прогнозирования значений ответа для нового фрейма данных:

#predict y values for new data frame
predict(model, newdata=new_data)

 1 2 3 4 5 
 8.612903 9.387097 10.935484 11.709677 12.483871

Мы можем успешно предсказать значения y для нового фрейма данных без каких-либо ошибок, поскольку имена столбцов совпадают.

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

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

Как исправить в R: имена не совпадают с предыдущими именами
Как исправить в R: более длинная длина объекта не кратна более короткой длине объекта
Как исправить в R: контрасты могут применяться только к факторам с 2 или более уровнями

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