Как исправить: ошибка в 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 или более уровнями