Wie soll ein gleitender Durchschnitt mit fehlenden Datenpunkten umgehen?

10

Ich schreibe ein Programm, das das Gewicht des Benutzers über verschiedene Tage mittelt. Ich plane, einen gleitenden 5-Punkte-Durchschnitt zu verwenden (aktueller Tag, zwei vor und zwei nach). Manchmal fehlt ein Datenpunkt für 1-2 Tage. Wie werden diese Fälle normalerweise behandelt?

(Wenn es einen besseren Tiefpassfilter gibt, den ich verwenden könnte, würde ich gerne Vorschläge machen)

Anna
quelle
Das erste, was mir in den Sinn kommt, ist, die Punkte zu interpolieren, bevor der Filter für den gleitenden Durchschnitt verwendet wird
irgendwann am
3
Wirklich eher eine statistische Frage als eine Signalverarbeitungsfrage, zumindest ohne mehr Kontext. Sie können jedoch einfach die Neuberechnung des Durchschnitts überspringen, den aktuellen Durchschnitt als Ersatzwert verwenden oder auf nachfolgende Messungen warten und eine lineare oder sonstige Interpolation versuchen.
Daniel R Hicks
Wie die anderen angemerkt haben, ist dies normalerweise eine anwendungsspezifische Entscheidung, die auf Ihrer Überlegung basiert, wie sich die gefilterte Ausgabe verhalten soll. Die meisten Signalverarbeitungstheorien basieren auf Abtastwerten mit gleichmäßigem Abstand, sodass Sie nicht etwas erhalten, das objektiv als "richtige Antwort" bezeichnet werden kann.
Jason R
@JasonR Ich filtere, um eine vernünftigere Schätzung des Gewichts des Benutzers an diesem Punkt zu erhalten. Die Daten werden gleichmäßig abgetastet (Abtastfrequenz = 1 / Tag), außer dass einige Datenpunkte fehlen.
Anna
@Anna: Richtig, ich verstehe, warum Sie die Daten filtern. Ihre Daten werden jedoch nicht einheitlich abgetastet, da Datenpunkte fehlen. Wie ich bereits erwähnt habe, werden Sie daher wahrscheinlich keine zufriedenstellende theoretische Antwort auf Ihr Problem finden. Eine Ad-hoc-Lösung, die Sie für Ihre spezielle Anwendung als "sinnvoll" erachten, wird wahrscheinlich die Antwort sein.
Jason R

Antworten:

4

Im Allgemeinen funktioniert die Regression besser, wenn die fehlenden Punkte automatisch angepasst werden, als ein von Ihnen gewählter Filter für den gleitenden Durchschnitt.

Wenn Sie einen AR- (Auto-Regressive-Filter) oder ARMA-Filter verwenden, können Sie einen vorhergesagten Wert einer Beispielausgabe basierend auf früheren Eingaben haben.

X^[i]=ωkx[i1k]+η

X^[i]

Xmax,Xminx[i1]X^[i]

Es gibt verschiedene andere Alternativen - Sie können behalten

X^[i]=X[i1]
X^[i]=Long term sample average of X 

Im Wesentlichen handelt es sich um ein Spiel zur Vorhersage dieses Werts und zur weiteren Verwendung als Signal. Natürlich ist die Vorhersage nicht mit einer Originalstichprobe identisch, aber das ist nicht der Preis, den Sie zahlen, wenn Sie keine Daten haben.

Dipan Mehta
quelle
2
Warum sagen Sie, dass Regression bei der Anpassung besser funktionieren würde? Vielen Dank
Spacey
3

Eine einfache und allgemeine Methode zum Ausfüllen fehlender Daten, wenn Sie vollständige Datenmengen haben, ist die Verwendung der
linearen Regression . Angenommen, Sie haben 1000 5er-Läufe hintereinander, von denen keiner fehlt.
Richten Sie den 1000 x 1-Vektor y und die 1000 x 4-Matrix X ein:

y       X
wt[0]   wt[-2] wt[-1] wt[1] wt[2]
---------------------------------
68      67     70     70    68
...

Regression gibt Ihnen 4 Zahlen abcd, die eine beste Übereinstimmung ergeben

wt[0] ~= a * wt[-2]  + b * wt[-1]  + c * wt[1]  + d * wt[2]

für Ihre 1000 Datenzeilen - verschiedene Daten, verschiedene abc d.
Dann verwenden Sie diese abcd, um das fehlende Gewicht [0] zu schätzen (vorherzusagen, zu interpolieren).
(Für menschliche Gewichte würde ich erwarten, dass abcd ungefähr 1/4 beträgt.)

In Python finden Sie unter numpy.linalg.lstsq .

(Es gibt zig Bücher und Artikel über Regression auf allen Ebenen. Für den Zusammenhang mit Interpolation kenne ich jedoch keine gute Einführung; jemand?)

denis
quelle
1

[a,b,c,?,e]

a+b+c+e4
Phonon
quelle
1

Ich denke, der einfachste Weg wäre, das Datum für das "Ganze" in der Zeitreihe anhand der vorhergehenden Daten "vorherzusagen". Dann können Sie diese Zeitreihen für die Parameterschätzung verwenden. (Sie können dann fortfahren und die fehlenden Werte anhand Ihrer geschätzten Parameter aus der gesamten (abgeschlossenen) Zeitreihe erneut vorhersagen und dies wiederholen, bis sie konvergieren.) Sie sollten die Vertrauensgrenzen jedoch aus der Anzahl der realen Datenpunkte ableiten, die Sie haben, und nicht aus der Länge der abgeschlossenen Daten.

blabla
quelle