Rの時系列「クラスタリング」


38

時系列データのセットがあります。各シリーズは同じ期間をカバーしますが、各時系列の実際の日付がすべて正確に「揃っている」わけではありません。

つまり、時系列が2Dマトリックスに読み込まれる場合、次のようになります。

date     T1   T2   T3 .... TN
1/1/01   100  59   42      N/A
2/1/01   120  29   N/A     42.5
3/1/01   110  N/A  12      36.82
4/1/01   N/A  59   40      61.82
5/1/01    05  99   42      23.68
...
31/12/01  100  59   42     N/A

etc 

時系列{T1、T2、... TN}を「家族」に分離するRスクリプトを記述します。ここで、家族とは、「共感して移動する傾向がある」一連のシリーズとして定義されます。

「クラスタリング」の部分では、一種の距離測定を選択/定義する必要があります。私は時系列を扱っているため、これをどのように行えばよいのかよくわかりません。1つの間隔で同情的に移動する可能性のある一連のシリーズは、後続の間隔ではそうなりません。

ここにいるよりもはるかに経験豊富で賢い人がいると確信しているので、距離測定に使用するアルゴリズム/ヒューリスティックに関する提案、アイデア、および時系列のクラスタリングでそれを使用する方法に関するアイデアに感謝します。

私の推測では、これを行うための確固たる統計的方法は確立されていないので、統計学者のように考えて、人々がこの問題にどのようにアプローチ/解決するのか非常に興味があります。


1
この質問への回答にも興味があるかもしれません。stats.stackexchange.com/ q / 2777/1036
Andy W


1
Dirichletプロセスに基づく統計的方法があります。これは、すべてのサンプルで時点が同じではないデータセットに対して機能します。
ダリオ

回答:


24

時系列データベースのデータストリーミングおよびマイニングにおける一般的なアプローチは、系列を記号表現に変換し、ユークリッド距離などの類似性メトリックを使用して系列をクラスター化することです。最も一般的な表現は、SAX(Keogh&Lin)または新しいiSAX(Shieh&Keogh)です。

上記のページには、距離メトリックとクラスタリングへの参照も含まれています。Keoghと​​乗組員は再現性のある研究に取り組んでおり、コードのリリースを受け入れています。だからあなたはそれらを電子メールで送信して尋ねることができます。ただし、MATLAB / C ++で動作する傾向があると思います。

JavaおよびR実装を作成するための最近の努力がありました。

それがどのくらいの距離にあるのかはわかりません-モチーフの発見に向けられていますが、どれだけ手に入れたかに応じて、ニーズに合わせて何かをまとめるために必要なビットが必要です(iSAXと距離メトリック:この部分はクラスタリングとモチーフ発見に共通しているため)。


1
これは、適切で扱いやすい開始点のように見えます。リンクをありがとう。
モーフィアス

4
なんてこった、SAXページは今まで見た中で一番uいWebページだと思う!
naught101

18

「同情して動こうとする」という別の言い方は、「統合」です。

共和分を計算する2つの標準的な方法があります:Engle-Granger法とJohansen手順。これらは、「Rを使用した統合および同時統合時系列の分析」(Pfaff 2008)および関連するR urcaパッケージで説明されています。Rでこれらの方法を追求する場合は、この本を強くお勧めします。

また、多変量時系列に関するこの質問ご覧になることをお勧めします。特に、U。ChicagoのRuey Tsayのコースには、必要なすべてのRコードが含まれています。


私は数年前に共和解に出くわしていました-しかし、それは私には非常に複雑に見えました(私はそれを理解していませんでした!)。理論的ではない(つまり、より実用的な)解決策があることを望んでいました
...-モーフィアス

3
Engle-Grangerメソッドは特に複雑ではありません。2つのシリーズ間の回帰の残差を取得し、単位根があるかどうかを判断するだけです。これは確かに実用的です。幅広い問題に定期的に使用されています。そうは言っても、あなたの質問に対する答えには統計的な知識が必要だと思います(たとえば、定常性、独立性などを理解する必要があります)
シェーン

これを行うには、すべてのペアワイズシリーズを共統合についてテストするよりも良い方法があります(シリーズを一緒にクラスタ化するという同じ理想を念頭に置いていますか?)また、この提案はシリーズ自体が統合されているという事実に依存しませんか?発症時に?
アンディW

@アンディ:もっと良い方法があると確信しています。それについて聞くことを楽しみにしています。これは非常に基本的なアプローチです。
シェーン

1
>私は他に何も提案することはできませんが、共和分は実際には非常に壊れやすく(「パラメトリックな仮定」は野生のシリーズになります)、手元のタスクには不向きです:各ステップで、階層的クラスタリングを行うことで、せいぜい2つを統合しますシリーズを1つに(共統合平均)。
user603

4

時系列のクラスタリングは、人口動態学者、特に発生と崩壊の傾向を理解するために昆虫を研究する人たちによってかなり一般的に行われます。ジプシー・ガ、トウヒ・ボドワーム、マウンテン・パイン・ビートル、カラマツ・バドモスの研究を探します。

実際のクラスタリングでは、距離メトリックを自由に選択できます。各メトリックには、クラスタリングされるデータの種類(Kaufmann and Rousseeuw 1990)に関連する独自の長所と弱点があります。データ内のグループの検索クラスター分析の概要は、開始するのに適した場所です。クラスタリング方法は、時系列を使用していることを「気」にせず、同じ時点で測定された値のみを見ることに注意してください。2つの時系列が存続期間にわたって十分に同期していない場合、それらはクラスター化されません(おそらく、そうすべきではありません)。

問題が発生するのは、時系列をクラスター化した後に使用するクラスター(ファミリ)の数を決定することです。有益なクラスターのカットオフを選択するさまざまな方法がありますが、ここでは文献はそれほど良くありません。


1
クリス、定期的なクラスタリングはそれを削減しません。各をそれぞれの次元として配置する(つまり、N * T次元になる)ことにより、シリーズが過去の過去と高度に相関していることを確認するかすべての次元を一緒に処理するか、シリーズ内の相関が高い場合)、常に単一のクラスターになります。また、ほとんどのクラスタリング手法は、高度に相関する変数には適していません/推奨されています(球形クラスターには多少の曲げの仮定があります)。y1,t
user603

1
@ user603「あなたは、各y1、tをそれ自身の次元として置くことにより、シリーズがそれ自身の過去と高度に相関していることを認める必要がある(すなわち、N * T次元になる)」を説明してもらえますか?
B_Miner

2

ここで同様の質問に対する私の答えを見てください。簡単に言えば、データの高速フーリエ変換を実行し、入力データが実数値である場合は冗長な周波数を破棄し、高速フーリエ変換の各要素の実部と虚部を分離し、RのMclustパッケージを使用してモデルを実行します-各時系列の各要素の実数部と虚数部に基づくクラスタリング。このパッケージは、クラスターの数とその密度に関する最適化を自動化します。


0

パッケージclustDDistを使用することもできます。このパッケージは、リーダーメソッドと階層的なクラスタリングメソッドを異なるエラー測定で実行します。

http://r-forge.r-project.org/projects/clustddist/

2乗ユークリッド距離は、1つの急峻な高ピークを持つ分布のパターンに有利であるため、 が測定さ れることがあります。

d4(x,y)=(xy)2y
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.