【问题标题】:R predict() does not yield correct number of predictionsR predict() 没有产生正确数量的预测
【发布时间】:2013-06-13 19:04:01
【问题描述】:

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

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 个 x 值的序列的情况下,我不应该得到 20 个对 y 的预测吗?

【问题讨论】:

  • predict() 需要一个 data.frame。试试predict(poly.lm, data.frame(x=new))。另见?predict.lm。
  • 添加到上面,x=new 被读取为参数x 函数predict (这里不做任何事情),你正在做的相当于predict(poly.lm),即预测您的样本内数据
  • @bdemarest 是的,成功了。谢谢大家!
  • 另外,如果您想在答案中提出这个问题,我可以将其勾选为已解决。
  • 长度(seq(0,20,1.0)) == 21

标签: r


【解决方案1】:

如果您希望预测未包含在原始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)

【讨论】:

  • 实际上预测函数不需要数据框作为输入。如果缺少 newdata 参数,它将使用模型对象中的原始数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 2022-01-17
  • 2023-04-09
  • 2017-04-30
  • 2015-06-23
相关资源
最近更新 更多