我有每日数据(虚拟数据如下):
Date Value
01/01/2014 610413
02/01/2014 243374
03/01/2014 459427
04/01/2014 243769
05/01/2014 415550
06/01/2014 345504
07/01/2014 583661
08/01/2014 406861
09/01/2014 326838
10/01/2014 389894
数据一直运行到2016年&我想运行一个arima模型&当我检查每日季节性时:
#Check for daily seasonality
ets(Data2)
fit <- tbats(Data2)
seasonal <- !is.null(fit$seasonal)
seasonal
&安培;结果是 时令的 [1] TRUE
#Check for weekly seasonality
timeSeriesObj = ts(Data2,start=c(2014,1,1),frequency=7)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal
&安培;结果是 季节性[1]为真 我需要生成未来3年的预测和考虑到季节性,我希望使用傅立叶术语。但我不太熟悉如何生成傅里叶项。我浏览了论文https://robjhyndman.com/hyndsight/forecasting-weekly-data/ 但如何最佳地选择傅里叶项的数量。根据论文,我运行了以下代码:
bestfit <- list(aicc=Inf)
for(i in 1:25)
{
fit <- auto.arima(data_ts, xreg=fourier(data_ts, K=i), seasonal=FALSE)
if(fit$aicc < bestfit$aicc)
bestfit <- fit
else break;
}
bestfit
fc <- forecast(bestfit, xreg=fourier(data_ts, K=7, h=104))
plot(fc)
但是预测片会引发错误:
forecast.Arima(bestfit,xreg = fourier(data_ts,K = 7,h = 104))出错: 回归数量与拟合模型不匹配 这是因为我无法确定“K”的最佳数量。此外,是否有更好的替代方案来处理数据中的季节性。
提前致谢。
答案 0 :(得分:1)
fc <- forecast(bestfit, xreg=fourier(data_ts, K=7, h=104))
我认为K
应该是你最好的K
(在这种情况下,i
),最大限度地减少AICc,而不是7。
我希望它有所帮助。
答案 1 :(得分:0)
这可能会有所帮助,不确定您是否仍然需要答案:
bestfit <- list(aicc=Inf)
for(i in 1:25)
{
fit <- auto.arima(data_ts, xreg=fourier(data_ts, K=i), seasonal=FALSE)
if(fit$aicc < bestfit$aicc)
bestfit <- fit
else break;
print(i)
}
如果您包含print(i)
,那么最后出现的数字就是您的最佳K值。