logo

時系列分析と革新的な外れ値 📂統計的分析

時系列分析と革新的な外れ値

ビルドアップ

2.png

上のグラフでは、2001年9月に非常に大きな外れ値を見つけることができる。しかし、加算的外れ値と違ってその後もずっと影響を及ぼしている。航空機の利用者数は季節性を持って着実に増加していたが、911テロの恐怖が利用者数自体を急激に減らしたと解釈できる。

定義 1

このように分析の全体像自体を変える外れ値をイノベーティブ外れ値innovative Outlierと呼ぶ。

実習

このようなイノベーティブ外れ値は、直感で見つけても良いし、TSAパッケージのdetectIO()関数を使っても良い。使用方法は以下の通りである:

  1. 元のデータでイノベーティブ外れ値を考慮せずに時系列分析を行う。
  2. 返されたモデルそのものをdetectIO()関数に入れると、次のような結果が得られる。 20190825\_194941.png
  3. ラムダの絶対値が最も大きいインデックスを最優先候補とする。上のスクリーンショットでは、69番目だ。
  4. イノベーティブ外れ値を反映させて再分析する。納得いく結果が出るまで繰り返す。

イノベーティブ外れ値を反映させた分析は介入分析を使用するが、数式的にはアプローチが難しい部分が多い。幸いにもコードはそれほど難しくないarima()ioオプションにそのインデックスを直接入れてあげれば良い。例えば、69番目が疑わしい場合はio=c(69)のように追加すれば良い。

22.png

実際にIOを反映させた後は、分析が目に見えて改善される。

コード

以下はRで書かれた例のコードである。

library(TSA)
data("airmiles")
win.graph(6,4)
plot(airmiles, main="미국의 여객기 이용자 수")

out1<-auto.arima(airmiles)
detectIO(out1)
out2<-arima(airmiles,order=c(1,0,1),seasonal=list(order=c(0,1,1),period=12),io=c(69))
win.graph(6,4); par(mfrow=c(1,2))
plot(airmiles,main="IO 미반영",xlim=c(2000,2003),xaxt='n'); lines(fitted(out1),col='red')
plot(airmiles,main="IO 반영",xlim=c(2000,2003),xaxt='n'); lines(fitted(out2),col='red')

  1. Cryer. (2008). Time Series Analysis: With Applications in R(2nd Edition): p257. ↩︎