auto.arima()是否识别出模型?


13

我一直在尝试学习和应用ARIMA模型。我一直在阅读Pankratz撰写的关于ARIMA的精彩文章- 使用单变量Box-Jenkins模型进行预测:概念和案例。在本文中,作者在选择ARIMA模型时特别强调了简约原则。

我开始使用R预测中的auto.arima()函数。这是我所做的,我模拟了ARIMA,然后应用。以下是两个示例。正如您在两个示例中看到的那样,清楚地确定了许多人认为不简约的模型。尤其是在示例2中,在该示例中标识ARIMA(3,0,3)的时间实际上是ARIMA(1,0,1)就足够了,而且是简约的。auto.arima()auto.arima()auto.arima()

以下是我的问题。我将不胜感激任何建议。

  1. 是否有关于何时使用/修改通过自动算法识别的模型的指南auto.arima()
  2. 仅使用AIC(我认为auto.arima()使用)来识别模型是否有任何困难?
  3. 可以建立一个简约的自动算法吗?

顺便说一下,我auto.arima()只是作为一个例子。这将适用于任何自动算法。

以下是示例1:

set.seed(182)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

auto.arima(y)

qa <- arima(y,order=c(1,0,1))
qa

以下是的结果auto.arima()。请注意,所有系数都不重要。即值<2。t

ARIMA(1,0,2) with non-zero mean 

Coefficients:
         ar1     ma1      ma2  intercept
      0.5395  0.2109  -0.3385    19.9850
s.e.  0.4062  0.4160   0.3049     0.0878

sigma^2 estimated as 1.076:  log likelihood=-728.14
AIC=1466.28   AICc=1466.41   BIC=1487.36

以下是arima()使用ARIMA(1,0,1)顺序常规运行的结果

Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.2398  0.6478    20.0323
s.e.  0.0531  0.0376     0.1002

sigma^2 estimated as 1.071:  log likelihood=-727.1
AIC=1462.2   AICc=1462.28   BIC=1479.06

范例2:

set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

auto.arima(y)

qa <- arima(y,order=c(1,0,1))
qa

以下是来自的结果auto.arima()

ARIMA(3,0,3) with non-zero mean 

Coefficients:
         ar1      ar2     ar3     ma1     ma2     ma3  intercept
      0.7541  -1.0606  0.2072  0.1391  0.5912  0.5491    20.0326
s.e.  0.0811   0.0666  0.0647  0.0725  0.0598  0.0636     0.0939

sigma^2 estimated as 1.027:  log likelihood=-716.84
AIC=1449.67   AICc=1449.97   BIC=1483.39

以下是arima()按ARIMA(1,0,1)顺序正常运行的结果

Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.2398  0.6478    20.0323
s.e.  0.0531  0.0376     0.1002

sigma^2 estimated as 1.071:  log likelihood=-727.1
AIC=1462.2   AICc=1462.28   BIC=1479.06

您似乎在这里遇到了一些麻烦,因为AIC程序可能会误认为最简单的模型。另外,AIC标准以无脉冲/无电平转换/无季节性脉冲/无本地时间趋势/参数恒定/误差方差恒定为前提。
IrishStat 2013年

AIC和BIC与猜测模型的误差方差成正比。由于我已经提出了一些问题,而这里提到的可逆性问题,根据我的经验,这种方法很简单。构造迭代模型的智能识别系统无可替代,它可以得出结论,当没有多余的参数剩余且残差中没有明显的信息/结构时。总而言之,自动模型识别是一个迭代过程,而不是像所有统计分析一样都是一步一步的过程。
IrishStat 2013年

@Irishstat应该将ma系数的符号解释为-0.1391 -0.5912 -0.5491吗?
预报员

根据Pankratz文字..是的!。您可以检查多项式的根,以查看它们是否满足可逆性要求。
IrishStat 2013年

因此上述auto.arima不可逆,即-0.1391-0.5912-0.5491 <1,因此模型很好。
预报员

Answers:


17

这里有几个问题。首先,不要假设模拟的ARIMA确实符合您指定的顺序;您要从指定的模型中抽取样本,并且由于随机性,所抽取的特定样本的最佳拟合模型可能不是从中抽取模拟的模型。

我之所以这么说是因为第二个或更重要的问题:auto.arima()函数可以使用条件平方和,通过更有效的拟合算法来估计模型,从而避免长序列或复杂的季节性模型的计算时间过长。使用此估计过程时,auto.arima() 近似模型的信息标准(因为尚未计算出模型的对数似然性)。如果用户未指示应使用哪种方法使用简单的启发式方法确定条件平方和估计是否处于活动状态。

approximation(length(x)>100 | frequency(x)>12)approximationTRUE n=100n=500 approximationauto.arima()approximation = TRUEarima()

对于您的示例1,我们应该有

> auto.arima(y, approximation = FALSE)
Series: y 
ARIMA(0,0,1) with non-zero mean 

Coefficients:
         ma1  intercept
      0.7166    19.9844
s.e.  0.0301     0.0797

sigma^2 estimated as 1.079:  log likelihood=-728.94
AIC=1463.87   AICc=1463.92   BIC=1476.52
> qa
Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.0565  0.6890    19.9846
s.e.  0.0626  0.0456     0.0830

sigma^2 estimated as 1.078:  log likelihood=-728.53
AIC=1465.06   AICc=1465.14   BIC=1481.92

因此auto.arima(),选择了比真实模型更为简约的模型。选择ARIMA(0,0,1)。但这是基于信息标准,现在它们已经符合要求。尽管AIC和AICc的差异很小,但所选模型的AIC,AICc和BIC较低。至少现在的选择与基于信息标准选择模型的规范是一致的。

我认为选择MA(1)的原因与我提到的第一个问题有关;也就是说,从指定的ARIMA(p,d,q)抽取的样本的最佳拟合模型可能与真实模型的阶次不同。这是由于随机采样。选择更长的系列或更长的刻录时间可能有助于增加选择真实模型的机会,但不要过于依赖它。

无论如何,这里的道义是,当某些问题看上去很明显时,例如您的问题,请阅读相关的手册页或文档,以确保您了解软件的工作原理。


感谢您的详细回复。我确实在第二个示例中使用了您的方法:set.seed(453)y <-arima.sim(n = 500,list(ar = 0.2,ma = 0.6),mean = 10)auto.arima(y,approximation = FALSE),这就是我得到的结果,它显然过度拟合了数据-ARIMA(2,0,4)具有非零的平均系数:ar1 ar2 ma1 ma2 ma3 ma3 ma4截距0.5369 -0.9627 0.3681 0.6799 0.7065 0.1701 20.0329 se 0.0278 0.0499 0.0533 0.0630 0.0793 0.0574 0.0927 sigma ^ 2估计为1.024:对数可能性= -716.17 AIC = 1448.33 AICc = 1448.63 BIC = 1482.05
预测者

我还没有读过所谓的“无常性”这一章。第二种情况下的auto.arima是否违反了模型诊断中的“可逆性”规则?我可能已经离开,如果我错了,可以请您更正吗?
天气预报员

1
@forecaster假设您不知道真相,您所拥有的只是样品。在这种情况下,AIC等正在做您要他们做的事情。就像我在上面说的那样,模拟的序列可能不是您所要求的,或者可能无法从您获取的小样本中成功识别出真实的序列。统计数据在这里或其他地方没有暗示您可以得到一个唯一的TRUE模型。作为统计学家,如果您认为该系列是过拟合的(例如从先验知识中得出),请对搜索词的顺序进行限制。或使用BIC作为停止标准。
恢复莫妮卡-G.辛普森

我不太清楚什么是可逆性才能回答这个问题。也许在这里提出一个问题?
恢复莫妮卡-G.辛普森

@forecaster(原因,我说的是BIC,这是对复杂性的额外惩罚。在这种情况下,ARIMA(1,0,1)的BIC比确定的模型要低auto.arima(),因此,如果只有这两个候选模型,更简单的模型将被选中...)
恢复莫妮卡

2

非常感谢@ Gavin,@ Irishstat和@Rob回答了我的问题。显然,如果我需要诸如auto.arima之类的自动算法的简约模型,则应该使用BIC信息准则而不是AIC,尤其是在看完这篇文章 和@Gavin 的文章之后。

我也非常同意@Irishstat的观点,即基于IC标准选择模型存在局限性,因为它不会选择更好的模型来拟合具有异常值和水平移动的数据。在我看来,离群值+水平移动+凌乱的数据=真实的文字业务数据,其他都是教科书数据集。我认为,任何不考虑离群值+水平移动的自动模型都应谨慎使用。

进入代码-auto.arima有一个在AIC或BIC之间选择的选项。参见下面的代码,这些代码已根据上述问题进行了修改。

非常感谢Cross-validated社区。我每天都会学习新颖有趣的事物。

###############
set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

## Adequetly describes the unknown data
fit.aic <- auto.arima(y,ic = c("aic"))
fit.aic

## Selects the model that is parsimonious
fit.bic <- auto.arima(y,ic = c("bic"))
fit.bic

BIC IC选择MA(2)模型。

> fit.bic
Series: y 
ARIMA(0,0,2) with non-zero mean 

Coefficients:
         ma1     ma2  intercept
      0.9256  0.2335    20.0326
s.e.  0.0453  0.0444     0.0992

sigma^2 estimated as 1.059:  log likelihood=-724.19
AIC=1456.39   AICc=1456.47   BIC=1473.24

1

我将500个值输入到AUTOBOX(我曾帮助开发的一款商业软件)中,并在此处输入图片说明根据Chow Test的参数恒定性收到了以下建议。研究时间序列时犯的一个非常基本的错误是,假设数据由具有恒定参数的特定模型驱动。AUTOBOX在时间段246检测到一个断点,该断点可能反映了尚未“预热”的模拟。模拟数据时,优良作法是删除第一个“ n”个值,然后研究其余的“ n”个值。我将数据分为两部分; 前245个,其余255个。这是两个在此处输入图片说明非常不同的acf图在此处输入图片说明

返回分析:这是针对最后246个值确定的模型,在此处输入图片说明此处在此处输入图片说明具有以下统计数据在此处输入图片说明。实际/适合和预测在此处在此处输入图片说明,剩余图在此处在此处输入图片说明。残差的ACF表明足够在此处输入图片说明。请注意,识别出的5个脉冲的影响很小,可以轻易忽略(在这种情况下!)。总而言之,这里吸取的教训是,有时我们的数据太多了,我们需要考虑随时间变化的系数。在这种情况下,我们正在确定参数的变化(显然)对结果模型/参数没有重大影响,但它指出了时间序列分析中通常需要改进的过程。我对auto.arima的经验表明,由于它明确地不处理/纠正高斯违规,因此它倾向于过分依赖历史值而不是从数据中提取结构,从而过度建模。在这种情况下,由于它是严格控制的模拟而没有高斯违规,因此它起作用了,但我通常会怀疑这种带限和单步的ARIMA模型识别方法。信任但要验证 !


0

 exp(AICminAICi)/2

如果是这样,它将帮助用户查看这些相对概率以及的AIC(?)auto.arima( ... trace=TRUE )。例如,在此问题中 给出的卵数据

                                # relprob = exp( (AICmin - AIC) / 2 ) * 100
 ARIMA(0,1,0) with drift : 784.5    100
 ARIMA(0,1,1) with drift : 784.8     86
 ARIMA(1,1,0) with drift : 784.9     82
 ARIMA(0,1,0)            : 792.4      2
 ARIMA(2,1,2) with drift : Inf    0
 ARIMA(1,1,1) with drift : Inf    0

1
这是答案还是问题?
蒂姆

@Tim,我如此暂定,因为我不知道这些相对概率是“真实的”还是至少是常见的。
丹尼斯,2015年
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.