Rのtsoutliersパッケージを使用した時系列(LS / AO / TC)の外れ値の検出。方程式形式で外れ値を表す方法


35

コメント: まず、1993年にオープンソースソフトウェア Journal of the American Statistical Associationに発表されたChenとLiuの時系列外れ値検出を実装する新しいtsoutliersパッケージの作成に感謝します。R

このパッケージは、時系列データで5種類の外れ値を繰り返し検出します。

  1. 加算的外れ値(AO)
  2. イノベーションの外れ値(IO)
  3. レベルシフト(LS)
  4. 一時的な変更(TC)
  5. 季節的レベルシフト(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になるときはいつでも、バイナリ変数として簡単に記述できます。)

パッケージマニュアルと記事の一時的な変更の式は次のとおりです。

LB=11δB

δ

  • 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

ここに画像の説明を入力してください


8
このパッケージがお役に立てたことを嬉しく思います、ありがとう!ところで、パッケージの次のリリースでy軸が元のシリーズと調整されたシリーズの両方の範囲をカバーするように、結果をプロットする関数のタイプミスを修正しました。
javlacalle 14年

2
パッケージの最後のバージョンでは、関数tsoutlierstsopackage内の同じ名前の関数との競合を避けるために名前が変更されましたforecast
javlacalle 14年

1
@javlacalle最新のtsoutliersパッケージをダウンロードしましたが、まだtsoではなくtsoutliersが含まれています。パッケージがいつ更新されるかわかりません。機能名が異なることがうれしいです。
予報官14年

更新について少し急ぎました。CRANで更新されるまでには時間がかかります。最新バージョン0.4がCRANからダウンロードできることを確認しました。
javlacalle 14年

@javlacalle tsoutliersをMacにインストールするのは本当に難しいことがわかりました。私は私が使用してコンパイルしようとしない、インストールGSLを醸造clangし、gccそしてどちらも動作します。私はそれは素晴らしいパッケージだと思いますが、インストールは本当に私の心を壊しました。
B.Mr.W.

回答:


19

filterδ=0δ=1

tc <- rep(0, 50)
tc[20] <- 1
tc1 <- filter(tc, filter = 0, method = "recursive")
tc2 <- filter(tc, filter = 0.3, method = "recursive")
tc3 <- filter(tc, filter = 0.7, method = "recursive")
tc4 <- filter(tc, filter = 1, method = "recursive")
par(mfrow = c(2,2))
plot(tc1, main = "TC delta = 0")
plot(tc2, main = "TC delta = 0.3")
plot(tc3, main = "TC delta = 0.7")
plot(tc4, main = "TC delta = 1", type = "s")

一時的な変化

この例では、関数outliers.effectsを使用して、検出された系列に対する検出された外れ値の影響を表すことができます。

# unit impulse
m1 <- ts(outliers.effects(outlier.chicken$outliers, n = length(chicken), weights = FALSE))
tsp(m1) <- tsp(chicken)
# weighted by the estimated coefficients
m2 <- ts(outliers.effects(outlier.chicken$outliers, n = length(chicken), weights = TRUE))
tsp(m2) <- tsp(chicken)

革新的な外れ値であるIOはより特異です。で検討した他のタイプの外れ値とはtsoutliers異なり、IOの効果は選択したモデルとパラメーター推定値に依存します。この事実は、多くの異常値が連続する場合に厄介になる可能性があります。アルゴリズムの最初の反復(一部の外れ値の効果が検出および調整されていない場合)では、ARIMAモデルの推定の品質がIOを正確に定義するのに十分ではない場合があります。さらに、アルゴリズムが進行するにつれて、新しいARIMAモデルが選択される場合があります。したがって、ARIMAモデルを使用して予備段階でIOを検出することは可能ですが、最終的には、そのダイナミックは最終段階で選択された別のARIMAモデルによって定義されます。

、この文書には、その発生の日付が解釈または前提とするのは難しいものです過去、により遠くなるにつれて、いくつかの状況では、IOの影響が増加することが示されています。

IOは季節的な外れ値をキャプチャする可能性があるため、興味深い可能性があります。で考慮される他のタイプの外れ値は、tsoutliers季節パターンをキャプチャできません。それでも、場合によっては、IOの代わりに、可能性のある季節的なレベルシフト、SLSを検索した方がよい場合があります(前述のドキュメントに示されているように)。

IOには魅力的な解釈があります。時々、外乱項に影響を与え、ARIMAモデルのダイナミクスに従って系列内を伝播する加算的な外れ値として理解されます。この意味で、IOは加法的外れ値のようなものであり、両方とも単一の観測に影響しますが、IOは外乱項のインパルスであり、AOはARIMAモデルまたはデータ生成プロセスによって生成された値に直接追加されるインパルスです。外れ値がイノベーションに影響するのか、それとも外乱の期間外にあるのかは、議論の問題かもしれません。

前のリファレンスでは、IOが検出される実際のデータの例を見つけることができます。


詳細な対応ありがとうございます。ほんとうにありがとう。追加の質問はほとんどありません。auto.arimaを使用してp、d、qを特定し、tsメソッドとしてarimaを使用してtsoutliersを使用することに利点はありますか?
予報官14年

1
forecast::auto.arimaとともに使用する主な利点tsoutliersは、すべてが自動化されることです。ただし、代替オプションを使用して自動手順を実行することをお勧めします。たとえば、最初にACFまたはユニットルートテストを見てから、渡されるARIMAモデルを選択できますtsoutliers。提案されたモデルに異常値が見つかった場合、調整されたシリーズの分析を再度繰り返すことができます。これは反復的なプロセスです。自動手順は有用なガイドを提供しますが、必ずしも究極のまたはユニークなソリューションを提供するとは限りません。
javlacalle 14年

1
外れ値を見つける手順は反復的です。安全のため、許容される反復回数に制限が設定されています。警告を確認したら、アルゴリズムを実行して引数maxit.iloopを5〜6に増やし、結果が変わるかどうかを確認してください。警告が大きな値maxit.iloop(たとえば20以上)で返される場合、何かが適切にモデル化されていないことを示している可能性があります。考慮すべき外れ値のタイプからIOを削除することは、場合によっては適切なオプションです。ほとんどの場合、警告は無視できます。suppressWarningsそれらを回避するために使用できます。
javlacalle 14年

2
@mugenこの問題を徹底的に扱っている教科書は知りません。この投稿で説明されているアプローチは介入分析に関連しているため、この問題に関する章のある教科書(計量経済学または時系列)が役立ちます。たとえば、時系列分析。Rのアプリケーションで。詳細については、この問題を扱っている多くのジャーナル記事のいくつかをレビューする必要があります。たとえば、Chen and Liu(1993)とその中の参考文献を参照してください。
javlacalle

2
@ mugen、Tsayの記事もご覧ください。さらに、異常値についての優れた報道があるPankratzによる古典的な本をチェックします。
予報官
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.