我正在每天时间序列上拟合ARIMA模型。从2010年2月1日到2011年7月30日每天收集数据,这些数据与报纸的销售有关。由于可以发现每周的销售模式(星期一至星期五的每日平均销售份数通常相同,然后在星期六和星期日增加),因此我试图捕捉这种“季节性”。给定销售数据“数据”,我按如下方式创建时间序列:
salests<-ts(data,start=c(2010,1),frequency=365)
然后使用auto.arima(。)函数通过AIC准则选择最佳的ARIMA模型。结果始终是非季节性的ARIMA模型,但是如果我尝试使用以下语法作为示例的SARIMA模型,例如:
sarima1<-arima(salests, order = c(2,1,2), seasonal = list(order = c(1, 0, 1), period = 7))
我可以获得更好的结果。ts命令/ arima规范中是否有任何错误?每周模式非常强大,因此我不希望在捕获它时遇到太多困难。任何帮助将非常有用。谢谢朱莉娅·德皮里(Giulia Deppieri)
更新:
我已经改变了一些论点。更准确地说,当我设置时,该过程选择ARIMA(4,1,3)作为最佳模型D=7
,但AIC和其他拟合指数和预测良好的方法根本没有改善。我猜是由于季节性和周期性之间的混淆导致一些错误。
使用Auto.arima调用并获得输出:
modArima<-auto.arima(salests,D=7,max.P = 5, max.Q = 5)
ARIMA(2,1,2) with drift : 1e+20
ARIMA(0,1,0) with drift : 5265.543
ARIMA(1,1,0) with drift : 5182.772
ARIMA(0,1,1) with drift : 1e+20
ARIMA(2,1,0) with drift : 5137.279
ARIMA(2,1,1) with drift : 1e+20
ARIMA(3,1,1) with drift : 1e+20
ARIMA(2,1,0) : 5135.382
ARIMA(1,1,0) : 5180.817
ARIMA(3,1,0) : 5117.714
ARIMA(3,1,1) : 1e+20
ARIMA(4,1,1) : 5045.236
ARIMA(4,1,1) with drift : 5040.53
ARIMA(5,1,1) with drift : 1e+20
ARIMA(4,1,0) with drift : 5112.614
ARIMA(4,1,2) with drift : 4953.417
ARIMA(5,1,3) with drift : 1e+20
ARIMA(4,1,2) : 4960.516
ARIMA(3,1,2) with drift : 1e+20
ARIMA(5,1,2) with drift : 1e+20
ARIMA(4,1,3) with drift : 4868.669
ARIMA(5,1,4) with drift : 1e+20
ARIMA(4,1,3) : 4870.92
ARIMA(3,1,3) with drift : 1e+20
ARIMA(4,1,4) with drift : 4874.095
Best model: ARIMA(4,1,3) with drift
所以我假设arima函数应该用作:
bestOrder <- cbind(modArima$arma[1],modArima$arma[5],modArima$arma[2])
sarima1<-arima(salests, order = c(4,1,3))
没有季节性成分参数和时段规范。数据和探索性分析表明,可以近似地考虑每周的相同每周模式,唯一例外的是2010年8月(当销售额持续增长时)。不幸的是,我根本没有时间序列建模方面的专业知识,实际上,我正在尝试这种方法,以便找到我尝试适合这些问题数据的其他参数和非参数模型的替代解决方案。我也有许多因数值变量,但是它们在解释响应变量时显示出低效的能力:毫无疑问,最难建模的部分是时间分量。而且,构造代表月份和工作日的虚拟变量并不是一个可靠的解决方案。