ARIMA、ARMA和AICs?

ARIMA、ARMA和AICs?,r,data-modeling,forecasting,R,Data Modeling,Forecasting,与预测包中的Arima(数据,c(5,1,4))和Arima(差异(数据),c(5,0,4))相同。我可以得到想要的一致性 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));c

与预测包中的
Arima(数据,c(5,1,4))
Arima(差异(数据),c(5,0,4))
相同。我可以得到想要的一致性

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");
}
}
但是,auto.arima背后的算法似乎没有考虑这些数据的最小AIC估计值的持有者;因此,选择ARMA(3,0)代替作用于第一个差分的ARMA(5,4)是次优选择。一个相关的问题是,在考虑一个模型优于另一个模型之前,两个AIC估计值应该有多大的差异与编程几乎没有关系-至少应该考虑/报告最小的AIC持有者,即使9个系数对于100个观测值的预测可能有点太多

我的问题是:

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

2) 为什么作用于数据的
arima(5,1,4)
与作用于数据的第一个差异的
arma(5,4)
不同?哪一个需要报告

3) 如何对AICs输出进行排序,使较小的优先


谢谢。

这里提出了很多问题。我会尽力对每一个问题做出回应

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)
。如果你想考虑这样大的模型(虽然我不推荐它),增加<代码>最大值< /代码>。< /P> 不能在每次迭代时对涉及非线性优化的循环进行矢量化


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

谢谢,Rob。添加max.order=9后,ARIMA(5,1,4)/ARMA(5,4)的AIC为1e+20,无论它是什么意思,因此它仍然选择ARIMA(3,1,0)/ARMA(3,0)作为最佳。auto.ARIMA()在拟合出现问题时返回1e20(即10^20)的AIC。这可能是一个收敛问题,或者参数可能接近平稳性和可逆性的边界。这些信号表明该模型可能存在问题,最好不要使用。一如既往,感谢您对stackoverflow的贡献,Rob!好啊AIC的差异几乎为1。ARMA(3,0)和ARMA(5,4)的图看起来很相似。任何有头脑的人都会选择前者,任何基于AIC的东西都会建议后者。也许是一个类似或更有趣的例子促使Leo Breiman说“自动选择模型的方法应该避免,或者,如果使用是绝对不可避免的,应该仔细检查……”。AIC可能会误导。Arima(diff(data),c(5,0,4))图(Arima.sim(n=630,list(ar=c(0.3999,-0.4881,0.0388,-0.2539,0.5874),ma=c(0.7173,0.7831,0.7173,0.9999)),sd=sqrt(7.436));只有在“越低越好”的意义上使用AIC。2个AIC单位内的模型在其拟合方面与复杂性基本相同。对于AIC中与“几乎1”不同的模型,我不会阅读任何特殊内容。如果我想要“一个”模型,那么我会选择更简单的模型。如果我进入模型平均,我可能会保持这两种模型,并认为它们是两种不同的模型,具有类似的简约程度。毕竟所有的模型都是错的。。。
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");
}
}
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);