【问题标题】:Predict Future values using polynomial regression in R使用 R 中的多项式回归预测未来值
【发布时间】:2016-11-10 15:34:30
【问题描述】:

正在尝试使用 R 中的多项式回归来预测样本的未来值。样本中的 y 值形成一个波动模式。 例如

x = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
y= 1,2,3,4,5,4,3,2,1,0,1,2,3,4,5,4

但是,当为未来值绘制图表时,生成的 y 值与预期的完全不同。得到的不是波浪模式,而是y 值不断增加的图表。

futurY = 17,18,19,20,21,22

尝试了不同程度的多项式回归,但futurY 的预测结果与预期大不相同

以下是用于获取结果的示例 R 代码

dfram <- data.frame('x'=c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16))
dfram$y <- c(1,2,3,4,5,4,3,2,1,0,1,2,3,4,5,4)
plot(dfram,dfram$y,type="l", lwd=3)
pred <- data.frame('x'=c(17,18,19,20,21,22))
myFit <- lm(y ~ poly(x,5), data=dfram)
newdata <- predict(myFit, pred)
print(newdata)
plot(pred[,1],data.frame(newdata)[,1],type="l",col="red", lwd=3)

这是用于预测未知未来 y 值的正确技术还是应该使用其他技术,如预测?

【问题讨论】:

  • 尝试使用五阶多项式进行预测看起来注定会失败或混淆。您可能想对拟合三角函数进行一些搜索。

标签: r regression prediction forecasting


【解决方案1】:
# Reproducing your data frame
dfram <- data.frame("x" = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16),
                    "y" = c(1,2,3,4,5,4,3,2,1,0,1,2,3,4,5,4))

从您的图表中,我得到了信号的相位和周期。有更好的自动计算方法。

# Phase and period
fase = 1
per = 10

在线性模型函数中,我放置了三角信号方程。

fit <- lm(y ~ I((((trunc((x-fase)/(per/2))%%2)*2)-1) * (x-fase)%%(per/2))
            + I((((trunc((x-fase)/(per/2))%%2)*2)-1) * ((per/2)-((x-fase)%%(per/2))))
          ,data=dfram)

# Predict the old data
p_olddata <- predict(fit,type="response")

# Predict the new data
newdata <- data.frame('x'=c(17,18,19,20,21,22))
p_newdata <- predict(fit,newdata,type="response")

# Ploting Old and new data
plot(x=c(dfram$x,newdata$x),
     y=c(p_olddata,p_newdata),
     col=c(rep("blue",length(p_olddata)),rep("green",length(p_olddata))),
     xlab="x",
     ylab="y")
lines(dfram)

黑线是原始信号,蓝色圆圈是对原始点的预测,绿色圆圈是对新数据的预测。

该图显示了模型的完美拟合,因为数据中没有噪音。在真实的数据集中,您可能会发现它,因此拟合看起来不会那么好。

【讨论】:

  • 慷慨的你花时间!不过,您可以警告 OP,polys 对于插值很好,对于外推(预测)来说很糟糕,是时候转向更好的方法了。
  • 感谢您抽出宝贵时间。这帮助我指出了正确的方向。那么我能否确认多项式回归不能用于此类情况。
  • 谢谢@sisusisu。当您有显示重复周期的信号时,多项式回归可能不是最佳选择。数学级数的三角函数可能就是您要找的。​​span>
猜你喜欢
  • 2019-03-01
  • 2018-10-19
  • 1970-01-01
  • 2014-12-18
  • 2019-01-24
  • 2019-07-29
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多