R: Zeitreihensegmente mit maximaler Kreuzkorrelation zum Input-Segment effizient lokalisieren?

8

Ich habe eine lange numerische Zeitreihendaten von etwa 200.000 Zeilen (nennen wir es Z ).

In einer Schleife unterteile ich x (etwa 30) aufeinanderfolgende Zeilen von Z gleichzeitig und behandle sie als Abfragepunkt q .

Ich möchte innerhalb von Z die y (~ 300) korrelierten Zeitreihensegmente der Länge x (am meisten korreliert mit q ).

Was ist ein effizienter Weg, dies zu erreichen?

    
Mike Furlender 02.02.2012, 05:56
quelle

2 Antworten

5

Der folgende Code findet die 300 Segmente, nach denen Sie suchen und läuft in 8 Sekunden auf meinem nicht zu leistungsstarken Windows-Laptop, also sollte es schnell genug für Ihre Zwecke sein.

Zunächst wird eine 30-mal-199971-Matrix (% ​​co_de%) erstellt, deren Spalten alle der Länge 30 "Zeitreihensegmente" enthalten, die Sie untersuchen möchten. Ein einzelner Aufruf von Zmat , der auf dem Vektor cor() und der Matrix q arbeitet, berechnet dann alle gewünschten Korrelationskoeffizienten. Schließlich wird der resultierende Vektor untersucht, um die 300 Sequenzen mit den höchsten Korrelationskoeffizienten zu identifizieren.

%Vor%     
Josh O'Brien 05.02.2012, 00:49
quelle
3

Die naive Lösung ist in der Tat sehr langsam (mindestens einige Minuten - ich bin nicht geduldig genug):

%Vor%

Sie können die Korrelation von Hand berechnen, von den ersten Momenten und Kommenten, aber es dauert noch einige Minuten.

%Vor%

Sobald Sie die Zeitreihe der Korrelationen haben, Es ist leicht, die Position der Top 300 zu extrahieren.

%Vor%     
Vincent Zoonekynd 02.02.2012 06:37
quelle

Tags und Links