3
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)

为什么作用于数据一阶差分的 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");
}
}

与预测包中的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);

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

我的 R 问题是:

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

2)为什么arima(5,1,4)作用于数据不同于arma(5,4)作用于数据的一阶差分?哪一个要举报?

3)如何对 AIC 输出进行排序,以便较小的优先?

谢谢。

4

1 回答 1

8

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

Arima()只是一个包装器arima(),所以它会给出相同的模型。

arima() 通过使用扩散先验来处理具有差异的模型。这与在拟合模型之前仅对数据进行差分不同。arima(x,order=c(p,1,q))因此,您将得到与和略有不同的结果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=5, 所以你arima(5,1,4)不会被考虑。max.order如果您想考虑这么大的模型,请增加(尽管我不推荐它)。

您不能在每次迭代中对涉及非线性优化的循环进行矢量化。

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

于 2009-11-03T04:31:42.103 回答