ARIMA、ARMAとのAIC?
-
12-09-2019 - |
質問
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のARMA(3,0)(5,4)の次善の選択は最初の相違点に作用します。最小のAICホルダーは、少なくとも9つの係数が少しあまりであっても、報告/考慮されるべきである - 関連する質問は1つが他のwuthプログラミングを行うために少しを持っているよりも、一つのモデルより良いと考える前に2つのAICの推定値が異なっていなければなりませんどのくらいです100回の観測から予測のため。
マイRの質問があります:
1)の二重ループのベクトル化バージョンを、それが高速ですので、?
2)なぜデータに作用するarima(5,1,4)
は、データの最初の相違点に作用するarma(5,4)
に違うのですか?報告すべきです?
3)どのように私はのAICの出力をソートしますか?
感謝します。
解決
ここに提起質問や問題がたくさんあります。私はそれらのそれぞれに対応しようとするでしょう。
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()
は、p + qの最大値を指定する引数max.order
を有しています。デフォルトでは、max.order=5
は、ので、あなたのarima(5,1,4)
は考えられません。あなたは(私はそれをお勧めしませんが)、このような大規模なモデルを検討したい場合はmax.order
を増やします。
あなたは各繰り返しで非線形最適化を含むループをベクトル化することはできません。
あなたの出力をソートしたい場合は、、あなたはdata.frameに保存して、関連する列をソートする必要があります。それが行くと何も装着し、最新のモデルを除いて保存されていないように、コードは、現在だけで結果を出してくれる。