根据以下值创建多项式线性模型:
y <- c(0.040, 0.073, 0.87)
x <- c(10.0, 15.0, 20.0)
poly.lm <- lm(y~poly(x,2))
当我尝试从生成的x序列中预测多个值时,我似乎无法从predict()
函数中获得正确的预测数。事实上,我得到的似乎只是predict(poly.lm)
的默认输出:
new <- seq(0,19,1.0)
predict(poly.lm, x=new)
考虑到20个y
值的序列,我不应该对x
进行20次预测吗?
答案 0 :(得分:2)
如果您希望预测原始lm
调用中未包含的新x值的y值,则需要提供data.frame参数newdata
。此外,data.frame的列名称需要与模型中使用的变量名称匹配。 ?predict
没有解释这一点,但在?predict.lm
中稍微清楚一点。
y <- c(0.040, 0.073, 0.87)
x <- c(10.0, 15.0, 20.0)
poly.lm <- lm(y ~ poly(x, 2))
# As DWin noted, predict() will compute fitted y-values using an lm object alone:
all.equal(predict(poly.lm), poly.lm$fitted)
# [1] TRUE
# To predict y for new x-values, make a data.frame:
new.x <- seq(0, 20, 1.0)
new.df <- data.frame(x=new.x)
new.y <- predict(poly.lm, newdata=new.df)
# Unsolicited visualization.
par(mfrow=c(1, 2))
plot(x, y, pch=16, cex=1.6, xlim=c(0, 20), ylim=c(0, 3))
plot(new.x, new.y, col="skyblue", pch=16, cex=1.6, xlim=c(0, 20), ylim=c(0, 3))
points(x, y, cex=1.6)