使用ARIMA对一个月的每日数据进行时间序列预测

时间:2013-01-15 04:43:23

标签: r time-series forecasting

我每个周期工作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()

结果图是 prediction graph

但我对预测并不满意。有没有办法让预测看起来与之前的价值趋势相似(见图表)?

1 个答案:

答案 0 :(得分:8)

您要求很多auto.arima()仅使用两个月的数据来查找模型。至少通过暗示季节性差异来帮助它。此外,请勿使用predictforecast功能更好。

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

enter image description here