R predict()不会产生正确数量的预测

时间:2013-06-13 19:04:02

标签: r

根据以下值创建多项式线性模型:

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次预测吗?

1 个答案:

答案 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)

enter image description here