我每个周期工作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()
结果图是
但我对预测并不满意。有没有办法让预测看起来与之前的价值趋势相似(见图表)?
答案 0 :(得分:8)
您要求很多auto.arima()
仅使用两个月的数据来查找模型。至少通过暗示季节性差异来帮助它。此外,请勿使用predict
。 forecast
功能更好。
为forecast()
为“更好”的原因,请参阅Journal of Statistical Software of July 2008,特别是第4.4节:
forecast()函数是通用的,并且具有适用于各种范围的S3方法 时间序列模型。它计算点预测和预测 时间序列模型的间隔。存在适合的模型的方法 使用ets(),auto.arima(),Arima(),arima(),ar(),HoltWinters()和 StructTS()。
还有一种ts对象的方法。如果是时间序列 对象作为forecast()的第一个参数传递,函数将 基于指数平滑算法生成预测 第2节。
在大多数情况下,存在一个现有的predict()函数 这是为了做同样的事情。不幸的是, 来自predict()函数的结果对象包含不同的 在每种情况下的信息,因此不可能建立通用 结果的函数(如plot()和summary())。所以与其, forecast()充当predict()的包装器,并打包 以通用格式(预测类)获得的信息。我们也 定义默认的predict()方法,该方法在不存在时使用 predict()函数存在,并调用相关的forecast()函数。 因此,predict()方法并行预测()方法,但后者 提供更有用的一致输出。
请尝试以下操作。
fit <- auto.arima(sensor,D=1)
LH.pred <- forecast(fit,h=30)
plot(LH.pred)
grid()