Guassianischer Prozess zur Datenimputation

7

Ich bin kürzlich bei Gelman et al. Auf Gaußsche Prozesse gestoßen. (2013), und ich versuche, mehr über ihre mögliche Anwendung zur Verwendung bei der Eingabe von Zeitreihendaten zu erfahren. Die interessierenden Daten sind eine einzelne variable Zeitreihe der Herzfrequenz einer Person, die unter Verwendung eines Fotoplethysmogramms (PPG; ein optischer Sensor, der am Ende des Fingers einer Person angebracht ist und Änderungen des Blutvolumens misst) erfasst wird.

Das Problem ist, dass wir bestimmte Datenabschnitte haben, die unordentlich sind. Bestehende Bearbeitungsstrategien für den Umgang mit diesen Artefakten wurden entwickelt, sie wurden jedoch weitgehend auf der Grundlage von Daten optimiert, die von EKG-Sensoren gesammelt wurden. Die langsamwellige Form des PPG macht ihre Anwendung auf unsere erhaltenen Daten manchmal etwas umständlich.

Kurz gesagt, hier ist ein Beispiel für einen isolierten, unordentlichen Abschnitt, der von einem guten Signal der R Shiny App umgeben ist, die ich erstellt habe, um die manuelle Bearbeitung unserer Daten zu verbessern:

Geben Sie hier die Bildbeschreibung ein

Die hellgraue Linie repräsentiert das ursprüngliche Signal (von 2 kH auf 100 Hz heruntergesampelt). Die durchgezogene schwarze Linie mit den roten Punkten ist eine grafische Darstellung der Interbeat-Intervalle (die Zeit in Sekunden zwischen aufeinanderfolgenden Herzschlägen), die über die Zeit aufgetragen wurden. Die Interbeat-Intervalle sind die Hauptvariable bei jeder Analyse dieser Daten.

Zum Beispiel können wir anhand der Interbeat-Intervalle einer Person ihre Herzfrequenzvariabilität beurteilen. Leider neigen die meisten Bearbeitungsstrategien dazu, die Variabilität zu verringern. Darüber hinaus gibt es bestimmte Aufgaben, bei denen es wahrscheinlicher ist, dass diese Artefakte vorhanden sind (aufgrund der Bewegung der Teilnehmer), was bedeutet, dass ich diese unordentlichen Abschnitte nicht einfach zum Entfernen markieren und sie als zufällig fehlend behandeln konnte.

Der Vorteil ist, dass wir viel über die Eigenschaften der Herzfrequenz wissen. Beispielsweise liegen Erwachsene in Ruhe im Allgemeinen zwischen 60 und 100 BPM. Wir wissen auch, dass die Herzfrequenz in Abhängigkeit vom Atmungszyklus variiert, der selbst einen bekannten Bereich wahrscheinlicher Frequenzen in Ruhe aufweist. Schließlich wissen wir, dass es einen Niederfrequenzzyklus gibt, der die Variabilität der Herzfrequenz beeinflusst (vermutlich beeinflusst durch eine Kombination von sympathischen und parasympathischen Einflüssen auf die Herzfrequenz).

Der oben abgebildete relativ kleine Abschnitt mit "schlechten Daten" ist eigentlich nicht mein Hauptanliegen. Ich habe einige ziemlich genaue saisonale Interpolationsansätze entwickelt, die in solchen Einzelfällen gut zu funktionieren scheinen.

Meine Probleme treten mehr auf, wenn ich mich mit Datenabschnitten befasse, die regelmäßig schlechtes Signal mit dem guten vermischt haben:

Geben Sie hier die Bildbeschreibung ein

Wie ich aus Gelman et al. (2013) scheint es möglich zu sein, verschiedene Kovarianzfunktionen für Gaußsche Prozesse zu spezifizieren. Diese Kovarianzfunktionen können anhand der beobachteten Daten und einigermaßen bekannter früherer Verteilungen für Messungen des Herz- und Atemleistungsvolumens von Erwachsenen (oder Kindern) ermittelt werden.

Angenommen, ich habe eine beobachtete Herzfrequenz ( ), könnte ich einen Gaußschen Prozess wie folgt spezifizieren, der von dieser durchschnittlichen Herzfrequenz bestimmt wird (und bitte lassen Sie mich wissen, wenn ich hier nicht rechnen kann, da dies meine ist beim ersten Versuch, diese Modelle anzuwenden):fHR

g1(t)GP(0,k1)

wo

k1(t,t)=σ12exp(2sin2(π(tt)fHRHz)2l12)

Dabei ist meine Abtastrate und mein Zeitindex.Hzt

Basierend auf dem Beispiel von Gelman et al. (2013) sehen in ihrem Text vor, dass es möglich scheint, diese Kovarianzfunktion zu modifizieren, um Variationen über bestimmte Zeiträume zu ermöglichen. Für mich möchte ich Variationen in den Schätzungen von innerhalb des Atemzyklus und innerhalb des oben erwähnten niederfrequenten Herzfrequenzvariabilitätszyklus berücksichtigen.fHR

Um mein erstes Ziel zu erreichen, würde dies nach meinem Verständnis die Angabe eines Gaußschen Prozesses und einer Kovarianzfunktion für die Atemfrequenz ( ) und eines Gaußschen Prozesses , der Merkmale beider Prozesse in die Kovarianzfunktion einbezieht:fR

g2(t)GP(0,k2)

wo

k2(t,t)=σ22exp(2sin2(π(tt)fRHz)2l22)

und...

g3(t)GP(0,k3)

wo

k3(t,t)=σ32exp(2sin2(π(tt)fHRHz)l1,32)exp(2sin2(π(tt)fRHz)2l2,32)

Wenn ich an diesem Punkt anhalten würde, wäre mein Modell ungefähr so:

yt(t)=g1(t)+g2(t)+g3(t)+ϵt

EDITS / UPDATES :

Zunächst ist eine korrektere Spezifikation meiner drei Gaußschen Prozesse:

Beginnend mit dem quadratischen exponentiellen Kovarianzkern:

g1(t)N(0,k1)

k1(t,t)=σ12exp((tt)22l12)

Als nächstes eine Kovarianzfunktion, die ein quasi-periodisches Muster basierend auf der Herzfrequenz des Individuums enthält.

g2(t)N(0,k2)

k2(t,t)=σ22exp(2sin2(π(tt)fHRl22)exp((tt)22l32)

Und schließlich eine Kovarianzfunktion, die die Herzfrequenzvariation als Funktion des Atmungszyklus modelliert:

g3(t)N(0,k3)

k3(t,t)=σ32exp(2sin2(π(tt)fHRl42)exp(2sin2(π(tt)fRl52)

ALTE FRAGEN (mit aktualisierten Antworten in Kursivschrift ):

1) Wenig über guassianische Prozesse zu wissen, scheint dies eine vertretbare Anwendung zu sein? Sie scheinen sehr flexibel zu sein und scheinen eine Reihe wünschenswerter Eigenschaften zu haben, die meine Probleme lösen könnten, so viel echte Variabilität wie möglich in meinen Daten beizubehalten, aber ich bin erst kürzlich auf sie gestoßen und möchte sicherstellen, dass ich nicht enttäuscht werde in dieses Kaninchenloch gehen.

Meine bisherige Antwort auf diese Frage lautet: Nein, dies war kein Kaninchenloch oder zumindest kein unproduktives. Ich bin mit diesen Modellen der Wiederherstellung "wahrer" Werte in einem unordentlichen Signal näher gekommen als mit jedem anderen. Ich wünschte, ich könnte einen Weg finden, um die Laufzeit zu reduzieren, da die Schätzung dieser Modelle rechenintensiv ist. Obwohl ich hier Fortschritte gemacht habe (Randnotiz mit Stan und rstan), habe ich noch einen weiten Weg vor mir.

2) Verstehe und repräsentiere ich die Grundmerkmale der Kovarianzfunktionen richtig, und was noch wichtiger ist, ist mein Versuch, eine Variation von als Funktion von korrekt (dh Funktion )?fHRfRg3(t)

Ich glaube, dass die oben angegebenen Kernel mit meinen primären Modellierungszielen übereinstimmen. Abgesehen davon kann es Möglichkeiten geben, die Komplexität zu reduzieren, die sicherlich zu meinen zu langen Laufzeiten führt. Dies bleibt ein Bereich, den ich aktiv verfolge, wenn ich versuche, meine Modelle zu optimieren, nachdem ich die Grundlagen verstanden habe.

3) Technisch gesehen, wie geht man vor, um Werte für identifizieren ? Und was genau repräsentiert in jeder Kovarianzfunktion? Es scheint auch etwas zu sein, für das ich eine vorherige Verteilung angeben muss, aber ich verstehe nicht ganz, was es in diesem Fall darstellt. Vermutlich eine Art Varianz ...lσ2

Im Moment und mit ziemlicher Sicherheit ein Faktor in meiner Zeit bis zur Konvergenz schätze ich diese Werte aus den Daten. Wenn ich diese Werte entweder korrigieren oder ihre vorherigen Verteilungen stark einschränken könnte, um den von den Modellen abgedeckten Parameterraum (vertretbar) zu verkleinern, würde dies meiner Meinung nach einen großen Beitrag zur Verbesserung der Laufzeit leisten.

4) Ich habe eine zusätzliche Quelle gefunden, die ich über Gaußsche Prozesse durchführe (Rasmussen & Williams, 2006). Gibt es andere empfohlene Ressourcen, die ich prüfen sollte, um diese Modelle besser zu verstehen?

Ich habe eine Reihe zusätzlicher Quellen gefunden, die für meine weitere Verfolgung einer endgültigen Modellierungsstrategie nützlich sind. Siehe unten.

Schnelle Methoden zum Trainieren von Gaußschen Prozessen an großen Datensätzen - Moore et al., 2016

Schnelle Gaußsche Prozessmodelle in Stan - Nate Lemoine

Noch schnellere Gaußsche Prozesse in Stan - Nate Lemoine

Robuste Gaußsche Prozesse in Stan - Michael Betancourt

Hierarchische Gaußsche Prozesse in Stan - Trangucci, 2016


NEUE FRAGEN

  1. Gibt es eine vertretbare Möglichkeit, die Längenskalenparameter im Modell (die ) basierend auf den Frequenzen, mit denen ich arbeite, zu beschränken (1,5 Hz, 0,25 Hz und die x-Achse in Sekunden auf 10 Hz heruntergerechnet).l

  2. Auf welche Faktoren sollte ich mich konzentrieren, um die Modellierungszeit zu verkürzen? Ich weiß, dass ein Teil davon darin besteht, meinen Stan-Code zu optimieren, aber gibt es noch etwas, das ich an der Parametrisierung meines Modells tun oder ändern könnte?


ERGEBNISSE ZUM DATUM Hier ist das bisher beste Ergebnis (in einem stark heruntergesampelten Datensatz). Die rote Linie repräsentiert das "wahre" Signal. Das Blau ist das vom Modell geschätzte Signal für denselben Zeitraum:

Geben Sie hier die Bildbeschreibung ein

Hinweis : Ich wäre mit diesem Ergebnis weitgehend zufrieden, wenn ich seine Schätzung beschleunigen und etwas glätten könnte.


Gelman, A., Carlin, JB, Stern, HS, Dunson, DB, Vehtari, A. & Rubin, DB (2013). Bayesianische Datenanalyse (3. Aufl.) . CRC Press: New York.

Rasmussen, CE & Williams, CKI (2006). Gaußsche Prozesse für maschinelles Lernen . MIT Press: Boston, MA.

Matt Barstead
quelle
1
Ein kurzes Update hier, da ich auf der Stan-Dokumentationsseite nützliche Informationen zu Guassian-Prozessen gefunden habe . Das entsprechende Kapitel ist 18 ab Version 2.17.0.
Matt Barstead
Und noch ein Update. Ich wurde auf diesen Link mit einem vollständigen Gaußschen Prozess-Tutorial in Stan verwiesen , das viele praktische Informationen zum Codieren des Modells enthält rstan.
Matt Barstead
Sie stellen sechs Fragen, die alle einigermaßen technisch oder umfassend erscheinen, sodass sie schwer zu beantworten sind. Können Sie diese Frage in ein paar kleinere Fragen aufteilen?
MachineEpsilon
An diesem Punkt ist mein Hauptinteresse, neue Erkenntnisse / Informationen zu meinem Stück " Neue Fragen " zu erhalten (also nur zwei der 6, die Sie notiert haben). Ich wollte den Rest der früheren Fragen und einige der Antworten, die ich gefunden habe, behalten, damit ich a) meine Gedanken / Bemühungen fortlaufend aufzeichnen und b) Ressourcen und Argumente für Menschen bereitstellen kann, die sich mit begrenzten Beispielen in meinen Schuhen befinden da draußen, um gute Entscheidungen in Bezug auf diese Modelle zu treffen.
Matt Barstead
1
Ah, okay. Haben Sie sich die Beispieldiskussion in Rasmussen et al. 5.4.3 zur Identifizierung der Modellhyperparameter? Aus dem Gedächtnis scheint das relevant. Wie viel Arbeit sind Sie in Bezug auf Punkt 2 bereit? Es gibt ein grundlegendes Hindernis, da die zur Anpassung an das Modell erforderliche Cholesky-Zerlegung eine -Komplexität aufweist. Das heißt, die Leute versuchen verschiedene Wege, um dies zu umgehen. Haben Sie sich so etwas wie GPFlow angesehen? O(N3)
MachineEpsilon

Antworten:

1

Ich kann zwar nicht alle Ihre Fragen beantworten und kann aufgrund mangelnden Rufs keinen Kommentar abgeben, aber als Antwort darauf:

Gibt es eine vertretbare Möglichkeit, die Längenskalenparameter im> Modell (die ls) basierend auf den Frequenzen, mit denen ich arbeite, zu beschränken (1,5 Hz, 0,25 Hz und> die x-Achse in Sekunden, die auf 10 Hz heruntergesampelt wurden).

Vielleicht möchten Sie sich einen Spektralmischungskern ansehen . Dies beinhaltet im Wesentlichen die Darstellung Ihrer Kovarianzmatrix durch ihre Fourier-Transformation und behandelt daher Frequenzen im Gegensatz zu Entfernungen. Dies kann einige Ihrer vorherigen Informationen natürlicher codieren.

Vielleicht finden Sie diese Seite nützlich , wenn das klingt interessant, und die ursprüngliche Arbeit ist hier .

dizq22
quelle