auto.arima 在 R 包预测中的奇怪行为
Strange behavior of auto.arima in R-package forecast
我正在尝试使用 R 包预测来拟合 arima 模型(使用 Arima 函数)并自动 select 一个合适的模型(使用函数 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 为相同的数据自动 select 一个合适的模型。我固定 d=0 和 D=1 就像在上面的两个模型中一样。此外,我将所有其他参数的最大值设置为 1,没有使用 selection 标准的近似值,也没有使用逐步 selection(请注意,我在这里使用的设置仅用于演示奇怪的行为,不是我真正打算使用的)。我使用 BIC 作为 selection 模型的标准。这是函数调用:
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 select 是上述两个模型中具有较低 BIC 的模型或 Arima 未在上面估计的模型。此外,我本以为当 trace=T 时 auto.arima 生成的输出与 Arima 为上述两个模型计算的 BIC 完全相同。对于第二个模型确实如此,但对于第一个模型则不然。对于第一个模型,Arima 计算的 BIC 是 10405.81,但模型 (1,0,1)(0,1,1) 的 auto.arima 的屏幕输出是 Inf。因此,第二个模型 select 由 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 的源代码,发现该行为是由对根的检查引起的,该根将用于 select 模型的信息标准设置为Inf 如果模型未通过检查。 auto.arima 的帮助中引用的论文证实了(Hyndman,R.J。和 Khandakar,Y.(2008)"Automatic time series forecasting: The forecast package for R",统计软件杂志,26(3),第 11 页) .抱歉这个问题,我应该在在这里提问之前阅读论文!
auto.arima
试图找到受某些约束的最佳模型,避免参数接近非平稳性和不可逆性边界的模型。
您的 tt.1
模型的季节性 MA(1) 参数为 -1,位于不可逆边界上。所以你不想使用那个模型,因为它会导致数值不稳定。季节性差分算子与季节性 MA 算子混淆。
在内部,auto.arima
为任何不满足约束的模型提供 Inf
的 AIC/AICc/BIC 值,以避免被选中。
我正在尝试使用 R 包预测来拟合 arima 模型(使用 Arima 函数)并自动 select 一个合适的模型(使用函数 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 为相同的数据自动 select 一个合适的模型。我固定 d=0 和 D=1 就像在上面的两个模型中一样。此外,我将所有其他参数的最大值设置为 1,没有使用 selection 标准的近似值,也没有使用逐步 selection(请注意,我在这里使用的设置仅用于演示奇怪的行为,不是我真正打算使用的)。我使用 BIC 作为 selection 模型的标准。这是函数调用:
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 select 是上述两个模型中具有较低 BIC 的模型或 Arima 未在上面估计的模型。此外,我本以为当 trace=T 时 auto.arima 生成的输出与 Arima 为上述两个模型计算的 BIC 完全相同。对于第二个模型确实如此,但对于第一个模型则不然。对于第一个模型,Arima 计算的 BIC 是 10405.81,但模型 (1,0,1)(0,1,1) 的 auto.arima 的屏幕输出是 Inf。因此,第二个模型 select 由 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 的源代码,发现该行为是由对根的检查引起的,该根将用于 select 模型的信息标准设置为Inf 如果模型未通过检查。 auto.arima 的帮助中引用的论文证实了(Hyndman,R.J。和 Khandakar,Y.(2008)"Automatic time series forecasting: The forecast package for R",统计软件杂志,26(3),第 11 页) .抱歉这个问题,我应该在在这里提问之前阅读论文!
auto.arima
试图找到受某些约束的最佳模型,避免参数接近非平稳性和不可逆性边界的模型。
您的 tt.1
模型的季节性 MA(1) 参数为 -1,位于不可逆边界上。所以你不想使用那个模型,因为它会导致数值不稳定。季节性差分算子与季节性 MA 算子混淆。
在内部,auto.arima
为任何不满足约束的模型提供 Inf
的 AIC/AICc/BIC 值,以避免被选中。