時系列分析と革新的な外れ値
ビルドアップ
上のグラフでは、2001年9月に非常に大きな外れ値を見つけることができる。しかし、加算的外れ値と違ってその後もずっと影響を及ぼしている。航空機の利用者数は季節性を持って着実に増加していたが、911テロの恐怖が利用者数自体を急激に減らしたと解釈できる。
定義 1
このように分析の全体像自体を変える外れ値をイノベーティブ外れ値innovative Outlierと呼ぶ。
実習
このようなイノベーティブ外れ値は、直感で見つけても良いし、TSA
パッケージのdetectIO()
関数を使っても良い。使用方法は以下の通りである:
- 元のデータでイノベーティブ外れ値を考慮せずに時系列分析を行う。
- 返されたモデルそのものを
detectIO()
関数に入れると、次のような結果が得られる。 - ラムダの絶対値が最も大きいインデックスを最優先候補とする。上のスクリーンショットでは、69番目だ。
- イノベーティブ外れ値を反映させて再分析する。納得いく結果が出るまで繰り返す。
イノベーティブ外れ値を反映させた分析は介入分析を使用するが、数式的にはアプローチが難しい部分が多い。幸いにもコードはそれほど難しくない。arima()
のio
オプションにそのインデックスを直接入れてあげれば良い。例えば、69番目が疑わしい場合はio=c(69)
のように追加すれば良い。
実際に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')
Cryer. (2008). Time Series Analysis: With Applications in R(2nd Edition): p257. ↩︎