在 R 中使用多项式回归预测未来值

Predict Future values using polynomial regression in R

正在尝试使用 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 值的正确方法吗?还是我应该使用其他方法(如预测)?

# 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)

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

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