Falsche Ausgabe für Kreuzkorrelation in der Zeitreihenplattform?Hallo JMP-Community,
(W10, 64-Bit, JMP Pro 15.2.1)
Ich hoffe herauszufinden, was ich falsch mache oder was ich falsch darüber verstehe, wie JMP die Kreuzkorrelationsberechnungen in der Time Series-Plattform durchführt. Kurz gesagt, wenn ich die Kreuzkorrelation einer Sin(x)- mit einer Cos(x)-Funktion vergleiche, erhalte ich nicht wie erwartet eine Antwort von pi/2 (oder 90 Grad), sondern 79 Grad stattdessen.
Ich versuche, eine vereinfachte Erklärung und Beschreibung zusammenzustellen, was die Ausgabe „Zeitreihe > Kreuzkorrelation“ für einige Kollegen bedeutet. Dazu habe ich eine einfache Tabelle mit 361 Zeilen (Werte 0-360, jede Zeile ist ein Grad oder 0,01745 Bogenmaß) und mehreren anderen Spalten erstellt, die Sin(x), Sin(x-5), Sin( x-45), Cos(x) und eine zufällige Gleichverteilung (siehe beigefügte Tabelle Periodic_series.jmp). Der Zweck besteht darin, die Kreuzkorrelation mithilfe einfacher trigonometrischer Funktionen zu demonstrieren, die Menschen direkter verstehen können als eine komplexe zeitabhängige Funktion, wie der SeriesJ-Datensatz.
Wenn Sie das erste Skript in der Datentabelle ausführen, erhalten Sie ein Diagramm der Triggerfunktionen (zufällige Einheitlichkeit wurde absichtlich weggelassen). Alles sieht so aus, wie es sollte.

Anschließend können Sie das Zeitreihenskript ausführen, wobei Sin(x) die Y-Eingabe und die anderen Funktionen die Spalten der Eingabeliste sind, damit Sie die Kreuzkorrelationsanalyse durchführen können. Indem Sie die Kreuzkorrelationsausgabe in eine Datentabelle umwandeln (siehe Datentabelle „cross-correlation.jmp“), können Sie die Korrelationswerte gegen die Verzögerung grafisch darstellen (führen Sie das erste Skript in dieser Datentabelle aus).

Auf den ersten Blick sieht das so aus, wie es sollte: Die Kreuzkorrelation von Sin(x) mit Sin(x-5) hat ihren Höhepunkt bei -5, Sin(x) mit Sin(x-45) scheint bei -45 zu liegen und für Sin(x) mit Cos(x) nahe 90. Wenn Sie jedoch das Fadenkreuz verwenden, werden Sie feststellen, dass die Kreuzkorrelation zwischen Sin(x) und Cos(x) näher bei 80 liegt.

Wenn Sie tatsächlich das Skript „Lags in der Datentabelle abrufen“ ausführen, werden die Verzögerungen im Protokollfenster ausgedruckt:
„Corr vs. Sin(x-5) Verzögerung in Grad = [-5]“
„Corr vs. Sin(x-45) Verzögerung in Grad = [-40]“
„Corr vs. Cos(x)-Verzögerung in Grad = [79]“
„Corr vs. Rondom Uniform-Verzögerung in Grad = [18]“
Der einzige korrekt berechnete Wert ist die Verzögerung von -5. Eine Verzögerung von Sin(x) um -45 Grad führt zu einer Verzögerung von -40 und nicht wie erwartet von -45. Ebenso beträgt die Verzögerung bei Sin(x) und Cos(x) 79, während ich einen Wert von 90 erwarten würde. Ich habe dies auf verschiedene Arten und mit vielen weiteren Zeilen versucht, um zu sehen, ob es sich um ein Problem mit der „Auflösung“ handelt, aber ich erhalte immer wieder eine Verzögerung von etwa 80.
Entweder liefert die Berechnung nicht die richtige Verzögerung, oder ich übersehe etwas.Ich vermute, dass mir etwas fehlt, bin mir aber nicht sicher, was es ist. Ich habe einige Vorschläge aus anderen Beiträgen befolgt und versucht, in der JMP-Hilfe nachzulesen Hier , aber ich kann keine Details zur Berechnung der Kreuzkorrelation finden, die erklären würden, warum eine trigonometrische Funktion von Sin(x) keine Verzögerung von 90 zu Cos(x) aufweist.
Alle Gedanken/Feedback dazu sind uns sehr willkommen.
Danke!,
DS
Erweiterte statistische ModellierungQualitäts- und VerfahrenstechnikBetreff: Falsche Ausgabe für Kreuzkorrelation in der Zeitreihenplattform?Hallo @peng_liu ,
Vielen Dank für die zusätzlichen Vorschläge. Ich werde den Smoother ausprobieren, um zu sehen, ob dies dabei helfen kann, eine angemessene Zeitverzögerung zu finden. Hoffentlich finde ich etwas Nützliches.
Meine Sorge besteht darin, dass entweder die Daten zeitlich verrauscht sind und die Korrelationen verloren gehen, oder dass, wie Sie erwähnt haben, das Stichproben-/Testschema jegliche Korrelation löscht.
Ich freue mich sehr über Ihr Feedback und Ihren Input.
Danke!,
Diedrich
Betreff: Falsche Ausgabe für Kreuzkorrelation in der Zeitreihenplattform?Einige Gedanken...
Möglicherweise gibt es keine genaue Verzögerung und Ihre Daten sind verrauscht. Beispielsweise ist die effektive Verzögerung innerhalb eines bestimmten Bereichs zufällig. Versuchen Sie, Ihre Reihe mit einem einfachen gleitenden Durchschnitt zu glätten, bevor Sie den CCF berechnen. Sie können den einfachen gleitenden Durchschnitt in der Zeitreihenplattform oder „gleitender Durchschnitt...“ in der Spaltenformel verwenden.
Es ist möglich, dass die korrelierten Signale aufgrund Ihres Abtastschemas übersprungen werden. Dann gibt es in den Daten nicht viel, um die Verzögerung zu finden.
Betreff: Falsche Ausgabe für Kreuzkorrelation in der Zeitreihenplattform?Hallo @peng_liu ,
Vielen Dank für Ihre weiteren Erläuterungen. Ich verstehe jetzt, worum es ging, und es macht Sinn. Ich kann bestätigen, dass ich die richtigen Werte erhalte, wenn ich mehr Zyklen in das Zeitfenster einbeziehe.
Nun zum eigentlichen Rätsel:
Meine Produktionskollegen möchten die Zeitverzögerung zwischen Daten aus ihrem Produktionshistoriensystem (es zeichnet Dinge wie Ofentemperatur, Bandgeschwindigkeiten, Durchflussraten usw. auf) und QC-Messungen am Material ermitteln. Produktionsdaten können in jedem beliebigen Intervall (15 Minuten, 30 Minuten, 4 Stunden usw.) aus dem System exportiert werden. Wir haben einen ziemlich regelmäßigen QC-Testplan alle 4 Stunden. Man geht davon aus, dass die Produktionshistoriendaten mit den QC-Daten korreliert werden können, wenn die richtige Zeitverzögerung gefunden werden kann. Es wird beispielsweise angenommen, dass die Trocknertemperatur in der Produktion mit einem QC-Test korreliert, aber der QC-Test dauert vielleicht 120 Minuten nach Das Material hat den Trockner bereits durchlaufen. Aus Studien im Labormaßstab wissen wir, dass bestimmte Verarbeitungsschritte (Werte wie die Ofentemperatur) mit bestimmten Testergebnissen korrelieren, aber dies in Produktionsdaten herauszufinden erweist sich als schwieriger als im Labor.
Ich habe versucht, die Kreuzkorrelation in der Zeitreihe zu verwenden, um zu sehen, ob irgendeine Art von Verzögerung in den Daten gefunden werden kann. Außerdem habe ich manuell mehrere Verzögerungsspalten erstellt und die multivariate Plattform verwendet, um nach Korrelationen zwischen den verzögerten Spalten und den QC-Daten zu suchen. aber ich sehe nichts. Natürlich könnte es sein, dass dabei jede Korrelation durch Rauschen verwaschen wird, aber die andere Möglichkeit besteht darin, dass weder Zeitreihen noch multivariate Plattformen die richtigen sind, um zu versuchen, die richtige Zeitverzögerung zu bestimmen.
Vielen Dank für das Feedback und die Gedanken/Einträge, es war sehr hilfreich.
Danke!,
DS
Betreff: Falsche Ausgabe für Kreuzkorrelation in der Zeitreihenplattform?Es gibt Probleme im zweiten Datensatz. So sieht Sin(x) in den zweiten Daten aus:

So sehen meine 3601-Zeilen aus:

Das erklärt, warum sich Ihr SinX- und CosX-CCF nicht ändert.
Die Stichprobengröße, die hier zählt, ist hier nicht die Anzahl der Beobachtungen, sondern die Anzahl der Zyklen. In den Originaldaten gibt es nur einen Zyklus. Um den CCF zu berechnen, müssen Reihen verschoben werden, was zu fehlenden Werten in einer Reihe führt, was zu starken Schwankungen der Stichprobenmittelwerte führt. Wenn es viele Zyklen gibt, bleibt der Mittelwert nahe Null, dem wahren Wert.
Wenn man in einer realen Situation nur einen Datenzyklus hat, ist CCF meiner Meinung nach irreführend, aber das ist ein Datenproblem, und es gibt keine Möglichkeit, es zu beheben.
Betreff: Falsche Ausgabe für Kreuzkorrelation in der Zeitreihenplattform?Hallo @peng_liu ,
Danke für die Rückmeldung. Ich hatte mehr Reihen ausprobiert, aber nicht so viele. Obwohl ich verstehe, wie die begrenzte Stichprobengröße die Berechnung beeinflussen könnte, bin ich ein wenig überrascht, dass sie so große Auswirkungen hat. Ich kann mir einen kleinen Unterschied vorstellen, vielleicht 88 oder 89 mit einer kleineren endlichen Menge, aber 12 davon entfernt zu sein scheint ziemlich groß zu sein. Ich schätze, meine Sorge ist, was ist mit realen Situationen, in denen Sie möglicherweise über einen begrenzten Zeitreihendatensatz verfügen?
Übrigens ist mir auch ein Fehler in meiner Deg-Spalte aufgefallen, der das Hinzufügen weiterer Zeilen nicht korrekt berücksichtigte. Die Formel sollte lauten:

Auf diese Weise reichen die Graddaten immer von -180 bis 180 (mit dem kleinen Unterschied auf der einen oder anderen Seite aufgrund der Inkrementgröße).
Beispiel: Bei einem realen, begrenzten Datensatz verfügen Sie möglicherweise über ein Gerät, das nur für einen Zeitraum von fünfzehn Minuten jede Sekunde Daten sammelt. Das sind nur 900 Datenpunkte. In dieser Situation würde man schlussfolgern, dass die beiden Signale eine Verzögerung von 78 haben, obwohl sie in Wirklichkeit 90 beträgt. Die Schlussfolgerung, dass die Signalverzögerung 78 beträgt, wäre falsch und könnte möglicherweise dazu führen, dass jemand eine falsche Analyse der Daten durchführt. Egal was
In diesem speziellen Fall wir wissen Wie groß ist die tatsächliche Verzögerung a priori, aber in realen Situationen ist das nicht immer bekannt. Ich kann mir Datensätze vorstellen, bei denen das gleiche Ereignis an verschiedenen Orten gemessen wird und die Signalverzögerung bestimmt werden muss, aber der Datensatz ist eher begrenzt. Basierend auf der scheinbaren Funktionsweise der Kreuzkorrelationsfunktion könnte dies zu einer falschen Schlussfolgerung führen.
Gibt es eine Möglichkeit, dies zu kompensieren oder die Berechnung so zu gestalten, dass sie den begrenzten Datensatz berücksichtigt? Könnten Sie eine andere Funktionsspalte haben, die Sie austauschen und eine Simulation des Verzögerungsbetrags durchführen können, um ein gewisses Konfidenzintervall für die Verzögerung zu erhalten? Was wäre das denn für eine Funktionssäule?
Wenn ich die Auswertung mit der richtigen Formel erneut durchführe, um eine beliebige Anzahl von Zeilen zu berücksichtigen, erhalte ich immer noch nicht die richtige Antwort – selbst wenn ich von einem Verzögerungswert in einen Gradwert zurückkonvertiere. Bei 3601 Zeilen (Werte von 0 bis 3600) erhalte ich beispielsweise die folgenden Verzögerungsdiagramme:

Und wenn ich das Skript „Get lags“ ausführe – aber jetzt auf die Spalte schaue, in der die Verzögerung wieder in Grad umgewandelt wird (die Formel unten basiert auf den 3601 Zeilen in der Originaltabelle), erhalte ich:

„Corr vs. Sin(x-5) Verzögerung in Grad = [-4,89863926687031]“
„Corr vs. Sin(x-5) Verzögerung in Verzögerung = [-49]“
„Corr vs. Sin(x-45) Verzögerung in Grad = [-40,2888086642599]“
„Corr vs. Sin(x-45) Verzögerung in Verzögerung = [-403]“
„Corr vs. Cos(x) Verzögerung in Grad = [78,4782004998612]“
„Corr vs. Cos(x) Verzögerung in Verzögerung = [785]“
Unten sehen Sie eine Darstellung von Sin(x) mit Cos(x), die um 900 und 785 Zeilen verzögert ist. Wie man sehen kann, hat 785 nicht den korrekten Verzögerungswert, der in Zeile 900 (rote Kurve) auftritt.

Ich erhalte also immer noch nicht die richtigen Werte. Neue Datentabellen sind beigefügt. Ich habe immer noch den Verdacht, dass ich etwas nicht richtig mache – vielleicht irgendwo eine falsche Formel? Ich kann nicht herausfinden, warum ich nicht die richtigen Werte erhalte.
Danke für die Hilfe!,
DS
Betreff: Falsche Ausgabe für Kreuzkorrelation in der Zeitreihenplattform?Ich glaube, das liegt an der endlichen Stichprobengröße. Für aufeinanderfolgende Punkte im CCF unterscheiden sich die Stichprobengrößen um 1. Ich habe 3600 weitere Zeilen hinzugefügt, den Plot erneut erstellt und die Spitze liegt näher bei 90, außerdem liegt die Amplitude bei der Spitze ebenfalls näher bei 1.
