每周数据的预测时间序列

时间:2017-06-07 06:11:38

标签: r time-series

我正在尝试在我自己的数据集中使用下面网页中的R blogger中提供的脚本。

https://www.r-bloggers.com/forecasting-weekly-data/

我已将数据转换为时间序列,然后修改了脚本,但收到错误“错误... ...更多(x,K,长度(x)+(1:h)):   K必须不大于句号/ 2“ 我分享了我创建的脚本,任何人都可以帮我解决这个错误。

DataFVM <- read.csv("AM1.csv", header=TRUE,na.strings=c("NULL",""))

Data <- subset(DataFVM,select=c(ID,Backlog))
Data <- Data[(Data$ID %in% c('905')),]
backlog <- as.vector(Data$Backlog)
backlog <- as.ts(backlog)

bestfit <- list(aicc=Inf)
for(i in 1:25)
{
  fit <- auto.arima(backlog, xreg=fourier(backlog, K=i), seasonal=FALSE)
  if(fit$aicc < bestfit$aicc)
    bestfit <- fit
  else break;
}
fc <- forecast(bestfit, xreg=fourierf(backlog, K=1, h=104))

以下是我正在使用的数据集

ID  Backlog
905 0.99
905 0.96
905 0.98
905 0.87
905 0.95
905 0.91
905 0.96
905 0.92
905 0.9
905 0.91
905 0.96
905 0.95
905 0.87
905 0.99
905 0.95
905 0.99
905 0.93
905 0.94
905 0.96
905 0.98
905 0.71
905 0.84
905 0.86
905 0.92
905 0.91
905 1
905 0.96
905 0.92
905 0.96
905 0.92
905 0.83
905 0.93
905 0.97
905 0.67
905 0.89
905 0.92
905 0.95
905 0.94
905 0.95
905 1
905 0.98
905 0.94
905 0.88

1 个答案:

答案 0 :(得分:1)

原因似乎是傅里叶函数希望您的时间序列数据具有与之相关的频率。因此,如果您认为您的数据的季节性为52,那么请更改以下行:

#backlog <- as.ts(backlog)
backlog <- as.ts(backlog,frequency=52)

现在,傅立叶了解到52岁。所以你可以迭代“我”。在1到25之间的任何地方&gt; 25会产生你现在收到的同样错误:K必须不大于句号/ 2.

我快速找到了一个代表数据的模型。下面是部分自相关的图,显示了在5,13和20处的显着滞后。

Partial Autocorrelation

在查看几个SARIMAX模型之后,我确定了以下等式,其中验证数据集中的MSE最小:

[0,0,0] [0,0,1] 13

季节性MA:第13号命令, X =识别2个显着下降的虚拟向量, 我加了一个常数

以下是滚动1期预测的表现:

Validation Data Results

希望这有帮助,祝你好运!