時系列のステップの検出


8

私が話している時系列の写真を添付し​​ました。上が元のシリーズ、下が差分のシリーズです。

各データポイントは、ひずみゲージからの5分間の平均読み取り値です。このひずみゲージは機械に設置されます。ノイズの多い領域は、マシンがオンになっている領域に対応しています。クリーンな領域は、マシンがオフになっているときです。赤い丸で囲まれた部分を見ると、読みに異常なステップがあり、自動的に検出したいと思います。

私はこれをどのように行うことができるかについて完全に困惑しています-アイデアはありますか?

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


異常なステップとは何ですか?マシンがオフになっていますか?シリーズの他の部分で同じようなパターンが赤い丸で表示されましたか?プロットで見逃したものはありますか?
vinux

これは難しいようです。私の最初の考え:マルコフ連鎖によって(非表示の)オン/オフ状態をモデル化します。検出したい現象は、マシンがオフのときに差分系列でいくつかの重要な値が発生することです。そのため、マシンがオフになる確率をその都度計算できれば、「オフ確率が高い場合の重要な値」。
Elvis

私は考え直しました。投稿します...
Elvis

回答:


14

比較的静かな間隔でスパイクを探しているようです。「相対」とは、典型的な近くの値と比較することを意味し、系列の平滑化を示唆しています。堅牢それは少数の地元のスパイクによって影響されるべきではないからこそ、滑らかであることが望ましいです。「クワイエット」とは、スムースが小さいという変動を意味します。この場合も、局所変動のロバストな推定が望まれます。最後に、「スパイク」は、局所変動の倍数としての大きな残差になります。

このレシピを実装するには、(a)「近く」がどれだけ近いか、(b)平滑化のレシピ、(c)局所変動を見つけるためのレシピを選択する必要があります。(a)を試す必要があるかもしれないので、簡単に制御できるパラメーターにしましょう。(b)と(c)のすぐに利用できる優れた選択肢は、それぞれLowessIQRです。ここにR実装があります:

library(zoo)                      # For the local (moving window) IQR
f <- function(x, width=7) {       # width = size of moving window in time steps
    w <- width / length(x)
    y <- lowess(x, f=w)           # The smooth
    r <- zoo(x - y$y)             # Its residuals, structured for the next step
    z <- rollapply(r, width, IQR) # The running estimate of variability
    r/z                           # The diagnostic series: residuals scaled by IQRs
}

その使用例として、2つの連続するスパイクが静止期間に追加されるこれらのシミュレートされたデータを考えます(連続する2つのスパイクは、1つの孤立したスパイクよりも検出が難しいはずです)。

> x <- c(rnorm(192, mean=0, sd=1), rnorm(96, mean=0, sd=0.1), rnorm(192, mean=0, sd=1))
> x[240:241] <- c(1,-1) # Add a local spike
> plot(x)

シミュレートされたデータ

これが診断プロットです:

> u <- f(x)
> plot(u)

診断プロット

元のデータのすべてのノイズにもかかわらず、このプロットは中央の(比較的小さい)スパイクを美しく検出します。 大まかな値をスキャンして検出を自動化しf(x)ます(絶対値で約5より大きい:サンプルデータで何が最適に機能するか実験してください)。

> spikes <- u[abs(u) >= 5]
      240       241       273 
 9.274959 -9.586756  6.319956

時間273のスプリアス検出は、ランダムな局所的外れ値でした。 診断の高い値と実行中のIQRの低い値を同時に探すように変更することで、テスト調整して、このような偽の値(ほとんど)を除外できます。ただし、診断には普遍的な(単位のない)スケールと解釈がありますが、「低い」IQRの意味はデータの単位に依存し、経験から決定する必要があります。fr/zz


最後の段落は、ここに示されているものとよく似ていますが、まったく同じではないシミュレーションデータに基づいています。この診断プロットにおいて他の偽の値のサイズが最大約7.5にあり、2本のスパイクが14の周りに値を有するが明らかである
whuber

いい答えです-これは有望に見えます。どうもありがとう。結果は後でご連絡します。
mohamedmoussa 2012年

簡単なフォローアップ-私はあなたと同じようなことをしましたが、各データポイント内(つまり、5分ごと)のデータの標準偏差にアクセスできました。平滑化されたSTDで除算し、かなり良い結果を得ました。
mohamedmoussa 2012年

うわー、逃した!(+1!)
Elvis

3

ここに2セントの提案があります。

意味差分シリーズ。と点与えられた場合、定義します XtΔ>0t

a(Δ,t)=12Δ+1|Xt|.

としましょう。aの値は、オフ/オンゾーンを低い/高い値で特徴付けます。Δ=50a(Δ,t)

異常なステップは、である点 –必要なものを検出するためにを調整し、マシンがオンになったときに誤検知を回避する必要があります。最初にと試してみます。t|Xt|>αa(Δ,t)α,ΔΔ=50α=4

また、あなたはポイントを見ることができますのための(例えば、)、その月のヘルプ微調整(その場合、値は小さくなります)。ta(δ,t)>αa(Δ,t)δΔδ=10Δ=100α


これを実装するためのRコードを書くことは可能ですか?ありがとう!
user9292 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.