Ich habe eine Reihe von Zeitreihendaten. Jede Serie deckt den gleichen Zeitraum ab, obwohl die tatsächlichen Daten in jeder Zeitreihe möglicherweise nicht alle genau aufeinander abgestimmt sind.
Das heißt, wenn die Zeitreihe in eine 2D-Matrix eingelesen würde, würde dies ungefähr so aussehen:
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
Ich möchte ein R-Skript schreiben, das die Zeitreihen {T1, T2, ... TN} in 'Familien' unterteilt, wobei eine Familie als eine Reihe von Reihen definiert wird, die "dazu neigen, sich in Sympathie zu bewegen".
Für den 'Clustering'-Teil muss ich eine Art Distanzmaß auswählen / definieren. Ich bin mir nicht ganz sicher, wie ich vorgehen soll, da ich es mit Zeitreihen zu tun habe und ein Paar von Reihen, die sich in einem Intervall mit Sympathie bewegen, dies möglicherweise in einem nachfolgenden Intervall nicht tut.
Ich bin mir sicher, dass es hier weitaus mehr erfahrene / klügere Leute gibt als ich. Daher wäre ich dankbar für Vorschläge, Ideen, welchen Algorithmus / welche Heuristik Sie für die Entfernungsmessung verwenden sollten und wie Sie diese beim Clustering der Zeitreihen verwenden können.
Ich vermute, dass es hierfür KEINE etablierte robuste statistische Methode gibt, daher würde ich mich sehr interessieren, wie die Leute dieses Problem angehen / lösen - wenn sie wie ein Statistiker denken.
quelle
Antworten:
Beim Daten-Streaming und Mining von Zeitreihendatenbanken besteht ein gängiger Ansatz darin, die Reihe in eine symbolische Darstellung umzuwandeln und dann eine Ähnlichkeitsmetrik wie die euklidische Entfernung zu verwenden, um die Reihe zu gruppieren. Die beliebtesten Darstellungen sind SAX (Keogh & Lin) oder der neuere iSAX (Shieh & Keogh):
Die obigen Seiten enthalten auch Verweise auf Entfernungsmetriken und Clustering. Keogh und seine Crew beschäftigen sich mit reproduzierbaren Recherchen und sind sehr empfänglich für die Veröffentlichung ihres Codes. Sie könnten sie also per E-Mail kontaktieren und fragen. Ich glaube, dass sie dazu neigen, in MATLAB / C ++ zu arbeiten.
Kürzlich wurde versucht, eine Java- und R-Implementierung zu erstellen:
Ich weiß nicht, wie weit es ist - es ist auf die Motivfindung ausgerichtet, aber je nachdem, wie weit sie gekommen sind, sollte es die erforderlichen Teile enthalten, die Sie benötigen, um etwas für Ihre Bedürfnisse zusammenzustellen (iSAX- und Entfernungsmetriken: da dieser Teil für Clustering und Motivfindung typisch ist).
quelle
Eine andere Art zu sagen, "neige dazu, sich in Sympathie zu bewegen", ist "integriert".
Es gibt zwei Standardmethoden zur Berechnung der Kointegration : die Engle-Granger-Methode und das Johansen-Verfahren. Diese werden in "Analyse integrierter und kointegrierter Zeitreihen mit R" (Pfaff 2008) und dem dazugehörigen R urca-Paket behandelt . Ich kann das Buch nur empfehlen, wenn Sie diese Methoden in R verfolgen möchten.
Ich empfehle Ihnen auch, sich diese Frage zu multivariaten Zeitreihen und insbesondere zu Ruey Tsays Kurs an der Universität von Chicago anzusehen, der den gesamten erforderlichen R-Code enthält.
quelle
Clustering-Zeitreihen werden relativ häufig von Populationsdynamikern durchgeführt, insbesondere von solchen, die Insekten untersuchen, um Trends in Bezug auf Ausbruch und Kollaps zu verstehen. Arbeiten an Zigeunermotte, Fichtenknospe, Latschenkäfer und Lärchenknospe.
Für das eigentliche Clustering können Sie eine beliebige Distanzmetrik auswählen. Jede hat wahrscheinlich ihre eigenen Stärken und Schwächen im Verhältnis zur Art der Daten, die geclustert werden, Kaufmann und Rousseeuw 1990. Suchen von Gruppen in Daten. Eine Einführung in der Clusteranalyse ist ein guter Anfang. Denken Sie daran, dass es der Clustering-Methode nicht wichtig ist, dass Sie eine Zeitreihe verwenden, sondern nur die zum gleichen Zeitpunkt gemessenen Werte. Wenn Ihre beiden Zeitreihen über ihre Lebensdauer nicht synchron genug sind, werden sie nicht (und sollten es vielleicht auch nicht) zu einem Cluster.
Wenn Sie Probleme haben, müssen Sie die Anzahl der zu verwendenden Cluster (Familien) bestimmen, nachdem Sie die Zeitreihen geclustert haben. Es gibt verschiedene Möglichkeiten, einen Ausschnitt aus informativen Clustern auszuwählen, aber hier ist die Literatur nicht so gut.
quelle
Siehe meine Antwort auf eine ähnliche Frage hier . Kurz gesagt, machen Sie eine schnelle Fouriertransformation der Daten, verwerfen Sie redundante Frequenzen, wenn Ihre Eingabedaten reelle Werte hatten, trennen Sie den Real- und Imaginärteil für jedes Element der schnellen Fouriertransformation und verwenden Sie das Mclust-Paket in R, um die Modellierung durchzuführen. basiertes Clustering auf den Real- und Imaginärteilen jedes Elements jeder Zeitreihe. Das Paket automatisiert die Optimierung über die Anzahl der Cluster und deren Dichte.
quelle
Sie können auch das Paket clustDDist verwenden, das die Leader-Methode und die hierarchische Clustering-Methode mit verschiedenen Fehlermaßnahmen ausführt:
http://r-forge.r-project.org/projects/clustddist/
quelle