每日和每日的傅里叶变换每周数据

时间:2018-01-17 17:34:16

标签: r time-series fft

我有每日数据(虚拟数据如下):

 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”的最佳数量。此外,是否有更好的替代方案来处理数据中的季节性。

提前致谢。

2 个答案:

答案 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值。