ARIMA,ARMA和AIC?

and*_*kos 3 r data-modeling forecasting

data <-c(88, 84, 85, 85, 84, 85, 83, 85, 88, 89, 91, 99, 104, 112, 126, 138, 146,151,   150, 148, 147, 149, 143, 132, 131, 139, 147, 150, 148, 145, 140, 134, 131, 131, 129, 126, 126, 132, 137, 140, 142, 150, 159, 167, 170, 171, 172, 172, 174, 175, 172, 172, 174, 174, 169, 165, 156, 142, 131, 121, 112, 104, 102, 99, 99, 95, 88, 84, 84, 87, 89, 88, 85, 86, 89, 91, 91, 94, 101, 110, 121, 135, 145, 149, 156, 165, 171, 175, 177, 182, 193, 204, 208, 210, 215, 222, 228, 226, 222, 220)
Run Code Online (Sandbox Code Playgroud)

为什么ARMA模型对数据的第一个差异起作用,与相应的ARIMA模型不同?

for (p in 0:5)
{
for (q in 0:5)
{
#data.arma = arima(diff(data), order = c(p, 0, q));cat("p =", p, ", q =", q, "AIC =",  data.arma$aic, "\n");
data.arma = arima(data, order = c(p, 1, q));cat("p =", p, ", q =", q, "AIC =", data.arma$aic, "\n");
}
}
Run Code Online (Sandbox Code Playgroud)

同样的,Arima(data,c(5,1,4))并且Arima(diff(data),c(5,0,4))在预测包.我可以得到所需的一致性

auto.arima(diff(data),max.p=5,max.q=5,d=0,approximation=FALSE, stepwise=FALSE, ic ="aic", trace=TRUE);
auto.arima(data,max.p=5,max.q=5,d=1,approximation=FALSE, stepwise=FALSE, ic ="aic", trace=TRUE);
Run Code Online (Sandbox Code Playgroud)

但似乎这些数据的最小AIC估计的持有者尚未被auto.arima背后的算法考虑; 因此ARMA(3,0)的次优选择代替ARMA(5,4)作用于第一个差异.一个相关的问题是,在考虑一个模型比另一个模型更好地进行wuth编程之前,两个AIC估计应该有多少差异 - 尽管最小的AIC持有者应该至少被考虑/报告,即使9个系数可能有点过多从100个观测预测.

我的R问题是:

1)双循环的矢量化版本,所以它更快?

2)为什么arima(5,1,4)对数据的处理不同于对数据arma(5,4)的第一个差异?哪一个要报道?

3)如何对AIC输出进行排序,使较小的输出先出现?

谢谢.

Rob*_*man 8

这里提出了很多问题和问题.我会尽力回应他们每个人.

Arima()只是一个包装arima(),因此它将提供相同的模型.

arima()通过使用漫反射先验来处理具有差分的模型.这与在拟合模型之前区分数据不同.因此,你会得到与arima(x,order=c(p,1,q))and 略有不同的结果arima(diff(x),order=c(p,0,q)).

auto.arima()直接处理差分,并且在拟合时不使用漫反射先验.所以你会从auto.arima(x,d=1,...)和得到相同的结果auto.arima(diff(x),d=0,...)

auto.arima()有一个参数max.order,指定p + q的最大值.默认情况下,max.order=5arima(5,1,4)不会被考虑.增加max.order,如果你要考虑这样的大型模型(虽然我不会推荐它).

在每次迭代时,无法对涉及非线性优化的循环进行矢量化.

如果要对输出进行排序,则需要将其保存到data.frame,然后对相关列进行排序.代码当前只是吐出结果,除了最新的模型之外什么都没有保存.