如何使用tsoutliers软件包和auto.arima解释和进行预测


9

我有1993年至2015年的月度数据,并希望对这些数据进行预测。我使用tsoutliers包检测异常值,但是我不知道如何继续使用我的数据集进行预测。

这是我的代码:

product.outlier<-tso(product,types=c("AO","LS","TC"))
plot(product.outlier)

这是我从tsoutliers包的输出

ARIMA(0,1,0)(0,0,1)[12]                    

Coefficients:
        sma1    LS46    LS51    LS61    TC133   LS181   AO183   AO184   LS185   TC186    TC193    TC200
      0.1700  0.4316  0.6166  0.5793  -0.5127  0.5422  0.5138  0.9264  3.0762  0.5688  -0.4775  -0.4386
s.e.  0.0768  0.1109  0.1105  0.1106   0.1021  0.1120  0.1119  0.1567  0.1918  0.1037   0.1033   0.1040
       LS207    AO237    TC248    AO260    AO266
      0.4228  -0.3815  -0.4082  -0.4830  -0.5183
s.e.  0.1129   0.0782   0.1030   0.0801   0.0805

sigma^2 estimated as 0.01258:  log likelihood=205.91
AIC=-375.83   AICc=-373.08   BIC=-311.19

 Outliers:
    type ind    time coefhat  tstat
1    LS  46 1996:10  0.4316  3.891
2    LS  51 1997:03  0.6166  5.579
3    LS  61 1998:01  0.5793  5.236
4    TC 133 2004:01 -0.5127 -5.019
5    LS 181 2008:01  0.5422  4.841 
6    AO 183 2008:03  0.5138  4.592
7    AO 184 2008:04  0.9264  5.911
8    LS 185 2008:05  3.0762 16.038
9    TC 186 2008:06  0.5688  5.483
10   TC 193 2009:01 -0.4775 -4.624
11   TC 200 2009:08 -0.4386 -4.217
12   LS 207 2010:03  0.4228  3.746
13   AO 237 2012:09 -0.3815 -4.877
14   TC 248 2013:08 -0.4082 -3.965
15   AO 260 2014:08 -0.4830 -6.027
16   AO 266 2015:02 -0.5183 -6.442

这是我的情节

我也有这些警告消息。

Warning messages:
1: In locate.outliers.iloop(resid = resid, pars = pars, cval = cval,  :
  stopped when maxit was reached
2: In locate.outliers.iloop(resid = resid, pars = pars, cval = cval,  :
  stopped when maxit was reached
3: In locate.outliers.oloop(y = y, fit = fit, types = types, cval = cval,  :
  stopped when maxit was reached
4: In arima(x, order = c(1, d, 0), xreg = xreg) :
  possible convergence problem: optim gave code = 1
5: In auto.arima(x = c(5.77, 5.79, 5.79, 5.79, 5.79, 5.79, 5.78, 5.78,  :
  Unable to fit final model using maximum likelihood. AIC value approximated

疑问:

  1. 如果我没看错,tsoutliers软件包将删除它检测到的离群值,并通过使用去除了离群值的数据集,为我们提供最适合该数据集的最佳Arima模型,对吗?
  2. 由于消除了电平偏移等,调整系列数据集被大量下移。这不是说如果对调整后的序列进行预测,则预测的输出将非常不准确,因为最近的数据已经超过12,而调整后的数据将其移至7-8左右。
  3. 警告消息4和5是什么意思?这是否意味着无法使用调整后的序列执行auto.arima?
  4. ARIMA(0,1,0)(0,0,1)[12]中的[12]是什么意思?只是我的数据集频率/周期性,我将其设置为每月一次吗?这是否也意味着我的数据系列也是季节性的?
  5. 如何检测数据集中的季节性?从时间序列图的可视化中,我看不到任何明显的趋势,如果使用分解函数,它将假设存在季节性趋势?那么,我是否只相信tsoutliers告诉我的,即存在季节性趋势,因为MA阶数为1?
  6. 确定这些异常值后,如何继续对这些数据进行预测?
  7. 如何将这些离群值纳入其他预测模型-指数平滑,ARIMA,结构模型,随机游走,θ?我肯定不能消除异常值,因为存在电平偏移,如果仅获取调整后的序列数据,值将太小,那我该怎么办?

我是否需要在auto.arima中将这些离群值添加为回归值以进行预测?那如何运作呢?

Answers:


5

这些评论过长,因此是“ ANSWER”

  1. 您错了,它没有进行调整,然后识别了ARIMA(就像AUTOBOX一样)。它假定没有干预调整,然后急忙确定可能受到未处理异常影响的ARIMA模型。通常,在确定ARIMA结构之前,需要针对用户指定的因果序列和/或未指定的确定性结构(异常值/水平移动,季节性脉冲,本地时间趋势)进行调整。请参见此诊断错误的示例,该示例会导致不必要地区别原始序列的错误,而自然的真实/正确状态不需要任何区别。非平稳性并不一定意味着需要区别,而是经常会暗示贬义,即针对水平/均值变化的调整

  2. 总是根据原始序列进行正确的预测,因此,考虑到历史,应该可以相信该预测。

  3. 我不知道,因为我没有积极使用此程序。我向您推荐它是因为您要求提供基于r的免费解决方案,而不是因为ARIMA建模是一个迭代(多阶段)自检过程,因此我认为它是好还是足够。

  4. 该模型表明,它认为数据具有一个ma(12)季节性分量,但这可能只是反映了对季节性脉冲的需求。

  5. 季节性趋势的概念充其量是模糊的。

  6. 我的答案太明显了,面子太白了


1
恩非常@ricardo
IrishStat

4

包“ tsoutliers”实现了Chen和Liu(1993) [1]中描述的过程。本文档中还提供了软件包和过程的说明

简要地说,该过程包括两个主要阶段:

  1. 在选定的ARIMA模型上检测异常值。
  2. 选择和/或重新拟合ARIMA模型,包括在上一步中检测到的异常值,并删除在新拟合中不重要的那些异常值。

然后针对检测到的离群值调整序列,并重复阶段(1)和(2),直到不再检测到离群值或达到最大迭代次数为止。


第一阶段(异常值的检测)也是一个迭代过程。在每次迭代结束时,针对在此阶段检测到的异常值,调整ARIMA模型的残差。重复该过程,直到没有发现异常值为止,或者直到达到最大迭代次数(默认为4个迭代)为止。您收到的前三个警告与此内部循环有关,即,该阶段在四次迭代后退出。

您可以通过maxit.iloopfunction中的参数来增加此最大迭代次数tso。建议不要在第一阶段设置大量的迭代,而让过程继续进行到第二阶段,在第二阶段重新安装或选择ARIMA模型。


警告4和5与分别针对函数stats::arima和拟合ARIMA模型并选择模型的过程有关forecast:auto.arima。使似然函数最大化的算法并不总是收敛于解。您可以在本文本文中找到与这些问题有关的一些详细信息。


[1] Chung Chen和Lon-Mu Liu(1993)“时间序列中模型参数和异常值的联合估计”,《美国统计协会杂志》 ,88(421),第284-297页。DOI:10.1080 / 01621459.1993.10594321


运行tso()需要多少时间?
Anoop Toffy

@AnoopToffy取决于数据的长度,周期性等。对于每年,每月,每季度的数据,大约120个观测值的样本大小以及ARIMA模型可以合理捕获的动态,该算法最多将在大约10秒(通常少得多)。
javlacalle
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.