有几个原因:
限制搜索空间限制了所需的计算时间。如果您要对许多时间序列进行建模和预测,这是一个重要因素。
更复杂的 ARIMA 模型很难解释。如果我们想做的只是预测,可解释性在我们的理想品质列表中可能并不高,但我们通常需要向非统计学家用户解释我们的模型。我宁愿不解释甚至第二个差异,更不用说第三个或更高的差异了。
预报员的经验是,大多数时间序列都可以由低阶 ARIMA 模型充分描述。让我们使用 819 非季节性 M3 系列建模auto.arima(,max.p=10,max.q=10,max.d=3)
:
library(Mcomp)
M3.nonseasonal <- M3[sapply(M3,"[[","period")%in%c("YEARLY","OTHER")]
models <- matrix(NA,nrow=length(M3.nonseasonal),ncol=3,
dimnames=list(names(M3.nonseasonal),c("p","d","q")))
pb <- winProgressBar(max=length(M3.nonseasonal))
for ( ii in seq_along(M3.nonseasonal) ) {
setWinProgressBar(pb,ii,paste(ii,"of",length(M3.nonseasonal)))
fit <- auto.arima(M3.nonseasonal[[ii]]$x,max.p=10,max.q=10,max.d=3)
models[ii,] <- fit$arma[c(1,6,2)]
}
close(pb)
sort(table(
paste0( (",apply(models,1,paste0,collapse=","),")")),decreasing=TRUE)
summary(models)
输出:
> sort(table(paste0("(",apply(models,1,paste0,collapse=","),")")),decreasing=TRUE)
(0,1,0) (0,1,1) (0,2,0) (0,2,1) (1,0,0) (1,1,0) (0,0,0) (0,0,1) (2,0,0) (1,2,0)
413 80 65 60 31 29 23 19 15 13
(1,1,1) (1,2,1) (2,1,0) (2,1,2) (0,3,0) (1,1,2) (2,2,1) (0,1,2) (0,2,2) (1,0,1)
6 6 6 6 5 5 5 4 3 3
(1,3,0) (1,0,2) (1,2,2) (2,0,1) (2,1,1) (2,2,2) (3,0,0) (0,3,1) (1,3,1) (2,2,0)
3 2 2 2 2 2 2 1 1 1
(2,3,1) (3,0,1) (3,1,0) (3,2,3)
1 1 1 1
> summary(models)
p d q
Min. :0.0000 Min. :0.0 Min. :0.0000
1st Qu.:0.0000 1st Qu.:1.0 1st Qu.:0.0000
Median :0.0000 Median :1.0 Median :0.0000
Mean :0.2393 Mean :1.1 Mean :0.2906
3rd Qu.:0.0000 3rd Qu.:1.0 3rd Qu.:1.0000
Max. :3.0000 Max. :3.0 Max. :3.0000
在少数情况下,auto.arima()
选择,但我对 3 阶的积分持怀疑态度,既因为它很难解释,又因为它会导致三次趋势,这几乎没有意义。和永远不会超过 3。d=3pq
最后,更复杂的 ARIMA 模型很少更准确。事实上,最简单的 ARIMA(0,0,0) 模型(即白噪声,最佳预测只是历史平均值)通常优于更复杂的 ARIMA 模型。
据我所知,所选择的特定默认值并非源于任何特定研究,任何此类研究当然都存在普遍性问题。如果你真的对包作者如何得出这些数字感兴趣,你可以问他们(也许在这里报告你听到的消息?),但我强烈怀疑答案将是“经验”。