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

Fourier transform for daily & weekly data

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

 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] 正确

#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/ 但是如何优化 select 傅立叶项的数量。根据论文,我 运行 以下代码:

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

提前致谢。

fc <- forecast(bestfit, xreg=fourier(data_ts, K=7, h=104))

我认为 K 应该是您最适合的 K(在本例中为 i),它可以最小化 AICc,而不是 7。

希望对您有所帮助。

这可能会有所帮助,不确定您是否还需要答案:

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