R 多项式回归中的新预测

R 多项式回归中的新预测,r,regression,prediction,poly,R,Regression,Prediction,Poly,我得到了以下回归模型,我正在尝试做一些预测,但我总是得到一个错误: model1 <- lm(Sepal.Length ~ Petal.Length + poly(Sepal.Width, 2), data = iris) predict(model1, model1$model) model1问题在于使用lm对象中的model插槽,该插槽不包含原始数据,而是矩阵,其中多项式部分已展开: head(model1$model) # Sepal.Length Petal.Length

我得到了以下回归模型,我正在尝试做一些预测,但我总是得到一个错误:

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

model1问题在于使用
lm
对象中的
model
插槽,该插槽不包含原始数据,而是矩阵,其中多项式部分已展开:

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

问题是您使用了
lm
对象中的
model
插槽,该插槽不包含原始数据,而是矩阵,其中多项式部分已经展开:

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

阅读文档:
帮助(“predict.lm”)
newdata
必须与传递到
lm
data
具有相同的列名。这里显然不是这样。请阅读文档:
help(“predict.lm”)
newdata
必须与传递到
lm
data
具有相同的列名。这里显然不是这样。是的,我知道,但让我们假设我没有可用的实际数据集。我只是以iris为例我想我不太明白你的问题。您希望为哪个数据集获取预测?如果它是原始版本,请使用
fitted(.)
,如果它是您自己可以提供的任何其他版本。@user11143533您正在寻找
cbind(1,as.matrix(model1$model)[,-1])%*%coef(model1)
?这将为您提供拟合值,并可用于使用新矩阵进行预测。是的,我知道,但假设我没有可用的实际数据集。我只是以iris为例我想我不太明白你的问题。您希望为哪个数据集获取预测?如果它是原始版本,请使用
fitted(.)
,如果它是您自己可以提供的任何其他版本。@user11143533您正在寻找
cbind(1,as.matrix(model1$model)[,-1])%*%coef(model1)
?这将为您提供拟合值,并可适用于使用新矩阵进行预测。