r - R 包预测中 auto.arima 的奇怪行为

标签 r time-series forecasting

我正在尝试使用 R 包预测来拟合 arima 模型(使用 Arima 功能)并自动选择合适的模型(使用 auto.arima 功能)。我首先用 Arima 函数估计了两种可能的模型:

tt.1 <- Arima(x, order=c(1,0,1), seasonal=list(order=c(0,1,1)), 
              include.drift=F)
tt.2 <- Arima(x, order=c(1,0,1), seasonal=list(order=c(0,1,0)),
              include.drift=F)

然后,我使用 auto.arima 函数为相同的数据自动选择合适的模型。我固定 d=0 和 D=1 就像在上面的两个模型中一样。此外,我将所有其他参数的最大值设置为 1,没有使用选择标准的近似值,也没有使用逐步选择(请注意,我在这里使用的设置仅用于演示奇怪的行为,而不是我真正想要的用)。我使用 BIC 作为选择模型的标准。这是函数调用:
tt.auto <- auto.arima(x, ic="bic", approximation=F, seasonal=T, stepwise=F, 
                  max.p=1, max.q=1, max.P=1, max.Q=1, d=0, D=1, start.p=1, 
                  start.q=1, start.P=1, start.Q=1, trace=T, 
                  allowdrift=F)

现在,我本来希望 auto.arima 从上面的两个模型中选择 BIC 较低的模型,或者是 Arima 没有在上面估计的模型。此外,我希望 auto.arima 在 trace=T 时生成的输出与 Arima 为上述两个模型计算的 BIC 完全相同。对于第二个模型确实如此,但对于第一个模型则不然。对于第一个模型,Arima 计算的 BIC 为 10405.81,但模型 (1,0,1)(0,1,1) 的 auto.arima 屏幕输出为 Inf。因此,auto.arima 选择了第二个模型,尽管在比较 Arima 估计的两个模型时,第一个模型的 BIC 较低。有没有人知道为什么在第一个模型的情况下,Arima 计算的 BIC 与 auto.arima 计算的 BIC 不对应?

这是 auto.arima 的屏幕输出:
 ARIMA(0,0,0)(0,1,0)[96]                    : 11744.63
 ARIMA(0,0,0)(0,1,1)[96]                    : Inf
 ARIMA(0,0,0)(1,1,0)[96]                    : Inf
 ARIMA(0,0,0)(1,1,1)[96]                    : Inf
 ARIMA(0,0,1)(0,1,0)[96]                    : 11404.67
 ARIMA(0,0,1)(0,1,1)[96]                    : Inf
 ARIMA(0,0,1)(1,1,0)[96]                    : Inf
 ARIMA(0,0,1)(1,1,1)[96]                    : Inf
 ARIMA(1,0,0)(0,1,0)[96]                    : 11120.72
 ARIMA(1,0,0)(0,1,1)[96]                    : Inf
 ARIMA(1,0,0)(1,1,0)[96]                    : Inf
 ARIMA(1,0,0)(1,1,1)[96]                    : Inf
 ARIMA(1,0,1)(0,1,0)[96]                    : 10984.75
 ARIMA(1,0,1)(0,1,1)[96]                    : Inf
 ARIMA(1,0,1)(1,1,0)[96]                    : Inf
 ARIMA(1,0,1)(1,1,1)[96]                    : Inf

以下是 Arima 计算的模型摘要:
> summary(tt.1)
Series: x 
ARIMA(1,0,1)(0,1,1)[96]                    

Coefficients:
         ar1      ma1     sma1
      0.9273  -0.5620  -1.0000
s.e.  0.0146   0.0309   0.0349

sigma^2 estimated as 867.7:  log likelihood=-5188.98
AIC=10385.96   AICc=10386   BIC=10405.81

Training set error measures:
                  ME     RMSE      MAE       MPE     MAPE      MASE        ACF1
Training set 0.205128 28.16286 11.14871 -7.171098 18.42883 0.3612059 -0.03466711
> summary(tt.2)
Series: x 
ARIMA(1,0,1)(0,1,0)[96]                    

Coefficients:
         ar1      ma1
      0.9148  -0.4967
s.e.  0.0155   0.0320

sigma^2 estimated as 1892:  log likelihood=-5481.93
AIC=10969.86   AICc=10969.89   BIC=10984.75

Training set error measures:
                ME     RMSE      MAE       MPE     MAPE    MASE        ACF1
Training set 0.1942746 41.61086 15.38138 -8.836059 24.55919 0.49834 -0.02253845

注意:我不允许提供数据。但如果需要,我很乐意提供更多输出或运行修改后的函数调用。

编辑:我现在查看了 auto.arima 的源代码,发现该行为是由对根的检查引起的,如果模型未通过检查,则将用于选择模型的信息标准设置为 Inf。 auto.arima 帮助中引用的论文证实了 (Hyndman, RJ 和 Khandakar, Y. (2008) “自动时间序列预测:R 的预测包”,统计软件杂志,26(3),第 11 页) .很抱歉这个问题,我应该在在这里提问之前先阅读论文!

最佳答案

auto.arima试图找到受某些约束的最佳模型,避免参数接近非平稳和不可逆边界的模型。

您的 tt.1模型的季节性 MA(1) 参数为 -1,位于不可逆边界上。所以你不想使用那个模型,因为它会导致数值不稳定。季节性差异算子与季节性 MA 算子混淆。

内部,auto.arima给出 Inf 的 AIC/AICc/BIC 值任何不满足约束的模型,以避免被选中。

关于r - R 包预测中 auto.arima 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37529876/

相关文章:

r - 在 v1.8.3 之前,在 R {data.table} 中使用 `:=` 时如何抑制输出?

r - 创建 ggplot2 中点的大小和颜色的渐变,超出现有值

r - 如何检查全局环境中是否存在对象,然后将其从函数中删除?

r - 在 R 中开始每日时间序列

向量上的 R 重复数学方程式

hbase - 为什么 OpenTSDB 选择 HBase 进行时序数据存储?

python - 为什么 ARIMA 拟合正确但生成平坦的预测?

r - 在 R 中使用 Fable 进行时间序列预测;确定混合模型的最佳模型组合

r - 使用来自预测的准确度()测量 VAR 准确度

r - 在R中从png切换到pdf时如何保持比例