コメント: まず、1993年にオープンソースソフトウェア Journal of the American Statistical Associationに発表されたChenとLiuの時系列外れ値検出を実装する新しいtsoutliersパッケージの作成者に感謝します。
このパッケージは、時系列データで5種類の外れ値を繰り返し検出します。
- 加算的外れ値(AO)
- イノベーションの外れ値(IO)
- レベルシフト(LS)
- 一時的な変更(TC)
- 季節的レベルシフト(SLS)
さらに素晴らしいのは、このパッケージが予測パッケージからauto.arimaを実装しているため、異常値の検出がシームレスに行われることです。また、このパッケージは、時系列データをよりよく理解するためのすてきなプロットを生成します。
以下は私の質問です。
このパッケージを使用していくつかの例を実行してみましたが、うまくいきました。加算的な外れ値とレベルシフトは直感的です。ただし、一時的な変更の外れ値とイノベーションの外れ値の処理に関して、理解できない2つの質問がありました。
一時的な変更の外れ値の例:
次の例を考えてみましょう。
library(tsoutliers)
library(expsmooth)
library(fma)
outlier.chicken <- tsoutliers::tso(chicken,types = c("AO","LS","TC"),maxit.iloop=10)
outlier.chicken
plot(outlier.chicken)
プログラムは、次の場所でレベルシフトと一時的な変更を正しく検出します。
Outliers:
type ind time coefhat tstat
1 LS 12 1935 37.14 3.153
2 TC 20 1943 36.38 3.350
以下はプロットと私の質問です。
- 方程式の形式で一時的な変更を書き込む方法は?(レベルシフトは、1935 / Obs 12が0になる前と、1935の後と1になるときはいつでも、バイナリ変数として簡単に記述できます。)
パッケージマニュアルと記事の一時的な変更の式は次のとおりです。
- 2番目の質問は、革新的な異常値について
です。実際に革新的な異常値に出会ったことはありません。数値の例や事例は非常に役立ちます。
編集: @ Irishstat、tsoutliers関数は、外れ値を識別し、適切なARIMAモデルを提案するのに優れた仕事をします。Nileデータセットを見ると、以下のauto.arimaのアプリケーションを参照してから、tsoutliersの適用(auto.arimaを含むデフォルト)を参照してください。
auto.arima(Nile)
Series: Nile
ARIMA(1,1,1)
Coefficients:
ar1 ma1
0.2544 -0.8741
s.e. 0.1194 0.0605
sigma^2 estimated as 19769: log likelihood=-630.63
AIC=1267.25 AICc=1267.51 BIC=1275.04
tsoutliers関数を適用した後、LS外れ値と加算的外れ値を識別し、ARIMA次数(0,0,0)を推奨します。
nile.outliers <- tso(Nile,types = c("AO","LS","TC"))
nile.outliers
Series: Nile
ARIMA(0,0,0) with non-zero mean
Coefficients:
intercept LS29 AO43
1097.7500 -242.2289 -399.5211
s.e. 22.6783 26.7793 120.8446
sigma^2 estimated as 14401: log likelihood=-620.65
AIC=1249.29 AICc=1249.71 BIC=1259.71
Outliers:
type ind time coefhat tstat
1 LS 29 1899 -242.2 -9.045
2 AO 43 1913 -399.5 -3.306
tsoutliers
はtso
package内の同じ名前の関数との競合を避けるために名前が変更されましたforecast
。