0

我每个周期工作 30 天(每月),因此在我的历史数据集中大约有 2 个周期。

R脚本是,

library(forecast)
value <- c(117.2 , 224.2 , 258.0 , 292.1 , 400.1 , 509.9 , 626.8 , 722.9 , 826.1 , 883.6,916.6, 1032.1, 1151.2, 1273.4 ,1391.8, 1499.2, 1532.5 ,1565.9 ,1690.9, 1813.6,1961.4 ,2102.8 ,2208.2, 2256.8, 2290.8 ,2413.7, 2569.4 ,2730.3, 2882.9 ,2977.5, 117.2 , 224.2 , 258.0 , 292.1 , 400.1 , 509.9 , 626.8 , 722.9 , 826.1 , 883.6,916.6, 1032.1, 1151.2, 1273.4 ,1391.8, 1499.2, 1532.5 ,1565.9 ,1690.9, 1813.6,1961.4 ,2102.8 ,2208.2, 2256.8, 2290.8 ,2413.7, 2569.4 ,2730.3, 2882.9 ,2977.5)

sensor<-ts(value,frequency=30)#daily data of month,here only 2 month's data
fit <- auto.arima(sensor)
LH.pred<-predict(fit,n.ahead=30)
plot(sensor,ylim=c(0,4000),xlim=c(0,5),type="o", lwd="1")
lines(LH.pred$pred,col="red",type="o",lwd="1")
grid()

结果图是 预测图

但我对这个预测并不满意。有什么方法可以使预测看起来与之前的价值趋势相似(见图)?

4

1 回答 1

8

您要求很多人auto.arima()仅使用两个月的数据来找到模型。至少通过建议季节性差异来帮助它。此外,不要使用predict. forecast功能要好很多。

forecast()关于“更好”的原因,请参阅Journal of Statistical Software of July 2008,特别是第 4.4 节:

predict() 函数是通用的,具有适用于各种时间序列模型的 S3 方法。它根据时间序列模型计算点预测和预测区间。存在使用 ets()、auto.arima()、Arima()、arima()、ar()、HoltWinters() 和 StructTS() 拟合模型的方法。

还有一个 ts 对象的方法。如果将时间序列对象作为第一个参数传递给 forecast(),该函数将根据第 2 节的指数平滑算法生成预测。

在大多数情况下,有一个现有的 predict() 函数旨在做同样的事情。不幸的是,predict() 函数的结果对象在每种情况下都包含不同的信息,因此不可能为结果构建通用函数(例如 plot() 和 summary())。因此,相反,forecast() 充当 predict() 的包装器,并以通用格式(预测类)包装获得的信息。我们还定义了一个默认的 predict() 方法,该方法在不存在现有 predict() 函数时使用,并调用相关的 forecast() 函数。因此,predict() 方法与 predict() 方法并行,但后者提供了更可用的一致输出。

试试下面的。

fit <- auto.arima(sensor,D=1)
LH.pred <- forecast(fit,h=30)
plot(LH.pred)
grid()

在此处输入图像描述

于 2013-01-15T05:06:15.830 回答