Новые прогнозы в полиномиальной регрессии - PullRequest
1 голос
/ 07 марта 2019

Я получил следующую модель регрессии, и я пытаюсь сделать некоторые прогнозы, но я всегда получаю ошибку:

model1 <- lm(Sepal.Length ~ Petal.Length +  poly(Sepal.Width, 2), data = iris)
predict(model1, model1$model)

Ошибка в poly (Sepal.Width, 2, coefs = list(альфа = c (3.05733333333333,: объект 'Sepal.Width' не найден

Я знаю, что мог бы просто получить доступ к подогнанным значениям для прогнозов. Но скажем, мои новые данные выглядят так:

newdata <- head(model1$model) + 1

Как я могу делать прогнозы для этого нового набора данных, не получая эту ошибку?

1 Ответ

0 голосов
/ 07 марта 2019

Проблема в том, что вы используете слот model из вашего объекта lm, который содержит не исходные данные, а матрицу, в которой полиномиальная часть уже развернута:

head(model1$model)
#   Sepal.Length Petal.Length poly(Sepal.Width, 2).1 poly(Sepal.Width, 2).2
# 1          5.1          1.4            0.083201357           -0.016039377
# 2          4.9          1.4           -0.010776079           -0.053252127
# 3          4.7          1.3            0.026814895           -0.056361540
# 4          4.6          1.5            0.008019408           -0.057805919
# 5          5.0          1.4            0.101996844            0.009397687
# 6          5.4          1.7            0.158383306            0.121697905

Конечно, это не работает, потому что predict хочет иметь столбец Sepal.Width. Вы можете предоставить правильный аргумент данных:

predict(model1, head(iris[, 1:4]) + 1)
#       1        2        3        4        5        6 
# 6.306370 5.845728 5.973836 5.979895 6.406965 6.868732
...