Ich mache einige Nachforschungen, stecke aber in der Analysephase fest (hätte meinen Statistikvorträgen mehr Aufmerksamkeit schenken sollen).
Ich habe zwei gleichzeitige Signale gesammelt: die integrierte Durchflussrate für das Volumen und die Änderung der Brustausdehnung. Ich möchte die Signale vergleichen und letztendlich hoffen, die Lautstärke aus dem Brustexpansionssignal abzuleiten. Aber zuerst muss ich meine Daten ausrichten / synchronisieren.
Da die Aufnahme nicht genau zur gleichen Zeit beginnt und die Brustexpansion über einen längeren Zeitraum erfasst wird, muss ich die Daten, die meinen Volumendaten entsprechen, im Brustexpansionsdatensatz finden und ein Maß dafür haben, wie gut sie ausgerichtet sind. Ich bin mir nicht ganz sicher, wie ich vorgehen soll, wenn die beiden Signale nicht genau zur gleichen Zeit oder zwischen Daten mit unterschiedlichen Maßstäben und Auflösungen starten.
Ich habe ein Beispiel der beiden Signale angehängt ( https://docs.google.com/spreadsheet/ccc?key=0As4oZTKp4RZ3dFRKaktYWEhZLXlFbFVKNmllbGVXNHc ). Bitte teilen Sie mir mit, ob ich weitere Informationen bereitstellen kann.
quelle
Antworten:
Bei der Frage wird gefragt, um wie viel Zeitreihen ("Expansion") einem anderen Zeitreihen ("Volume") nacheilen, wenn die Reihen in regelmäßigen, aber unterschiedlichen Intervallen abgetastet werden.
In diesem Fall zeigen beide Serien ein relativ kontinuierliches Verhalten, wie die Abbildungen zeigen werden. Dies impliziert, dass (1) möglicherweise keine oder nur eine geringe anfängliche Glättung erforderlich ist und (2) die Neuabtastung so einfach wie die lineare oder quadratische Interpolation sein kann. Quadratisch kann aufgrund der Glätte etwas besser sein. Nach dem erneuten Abtasten wird die Verzögerung durch Maximieren der Kreuzkorrelation ermittelt , wie im Thread gezeigt. Was ist die beste Schätzung des Versatzes zwischen zwei versetzten abgetasteten Datenreihen? .
Zur Veranschaulichung können wir die in der Frage angegebenen Daten unter Verwendung
R
des Pseudocodes verwenden. Beginnen wir mit der Grundfunktionalität, der Kreuzkorrelation und dem Resampling:Dies ist ein grober Algorithmus: Eine FFT-basierte Berechnung wäre schneller. Aber für diese Daten (mit ungefähr 4000 Werten) ist es gut genug.
Ich habe die Daten als kommagetrennte CSV-Datei heruntergeladen und den Header entfernt. (Der Header verursachte einige Probleme für R, die ich nicht diagnostizieren wollte.)
Hinweis: Bei dieser Lösung wird davon ausgegangen , dass jede Datenreihe in zeitlicher Reihenfolge vorliegt und keine Lücken aufweist. Dies ermöglicht es, Indizes in die Werte als Proxy für die Zeit zu verwenden und diese Indizes durch die zeitlichen Abtastfrequenzen zu skalieren, um sie in Zeiten umzuwandeln.
Es stellt sich heraus, dass eines oder beide dieser Instrumente im Laufe der Zeit etwas abweichen. Es ist gut, solche Trends zu entfernen, bevor Sie fortfahren. Da sich das Lautstärkesignal am Ende verjüngt, sollte es abgeschnitten werden.
Ich nehme die weniger häufigen Serien erneut auf, um das Ergebnis so genau wie möglich zu machen.
Jetzt kann die Kreuzkorrelation berechnet werden - aus Effizienzgründen wird nur ein vernünftiges Zeitfenster durchsucht - und die Zeitverzögerung, in der der Maximalwert gefunden wird, kann identifiziert werden.
Die Ausgabe gibt an, dass die Erweiterung der Lautstärke um 1,85 Sekunden nacheilt. (Wenn die letzten 3,5 Sekunden der Daten nicht abgeschnitten würden, würde die Ausgabe 1,84 Sekunden betragen.)
Es ist eine gute Idee, alles auf verschiedene Arten zu überprüfen, am besten visuell. Erstens die Kreuzkorrelationsfunktion :
Als nächstes registrieren wir die beiden Serien in der Zeit und zeichnen sie zusammen auf den gleichen Achsen .
Es sieht ziemlich gut aus! Mit einem Streudiagramm können wir uns jedoch ein besseres Bild von der Registrierungsqualität machen . Ich ändere die Farben von Zeit zu Zeit, um den Fortschritt zu zeigen.
Wir suchen nach Punkten, die entlang einer Linie vor- und zurückverfolgt werden können: Abweichungen davon spiegeln Nichtlinearitäten in der zeitverzögerten Reaktion der Expansion auf die Lautstärke wider. Obwohl es einige Variationen gibt, sind sie ziemlich klein. Es kann jedoch von physiologischem Interesse sein , wie sich diese Schwankungen im Laufe der Zeit ändern. Das Wunderbare an Statistiken, insbesondere an ihrem explorativen und visuellen Aspekt, ist, wie sie dazu neigen, gute Fragen und Ideen zusammen mit nützlichen Antworten hervorzubringen.
quelle
acf
Funktion von R untersuchen .R
, als ich diese Antwort veröffentlichte und vergaß, eine Definition für diese Funktion anzugeben . Hier ist das Original:normalize <- function(x) { x.max <- max(x); x.min <- min(x); dx <- x.max - x.min; if (dx==0) dx <- 1; (x-x.min) / dx }