Frage: Wie interpoliert man lokal über kleine Längen von NaNs?MATLAB: Interpolation über NaNs in einer Zeitreihe
Ich habe eine Zeitreihe ("x" Daten gleichmäßig zu "t" mal abgetastet), die Blöcke von NaNs hat. Zum Beispiel:
x = [ 1 2 4 2 3 15 10 NaN NaN NaN NaN 2 4 NaN 19 25]
t = [0.1 0.2 0.3 ...etc..]
Ich möchte Interpolation über die NaN auszuführen.
Der elementarste Ansatz wäre, nur linear von dem am weitesten links liegenden Datenpunkt zum am weitesten rechts liegenden Datenpunkt zu interpolieren. Z.B. eine Linie von x = 10 bis x = 2 und den 4 NaN-Werten werden Werte aus der Linie zugewiesen.
Die Länge der Zeitreihe ist ~ 1,5 Millionen mit ~ 10000 NaNs, deshalb möchte ich keine Daten (in der Interpolation) einbauen, die weit von den NaN-Orten entfernt sind. Einige der NaNs erstrecken sich über eine Länge von 1000-2000.
X(isnan(X)) = interp1(find(~isnan(X)), X(~isnan(X)), find(isnan(X)), 'linear');
wird über die gesamte Zeitreihe linear über das NaN interpolieren.
Wie würde ich lokal interpolieren? Linear sollte ausreichen. Vielleicht lineare Interpolation mit ein paar Punkten links und rechts von den NaN-Blöcken (vielleicht 100-200 Punkte). Ein natürlicher Nachbar- oder Spline-Algorithmus (?) Könnte geeigneter sein; Ich muss vorsichtig sein, wenn ich der Zeitreihe kein anormales Verhalten hinzufüge (z. B. Interpolation, die einer Frequenz eine fiktive "Potenz" hinzufügt).
UPDATE: Die Zeitreihe ist eine Aufzeichnung einer Minute Stichprobe Temperatur über ein Jahr lang. Lineare Interpolation ist ausreichend; Ich muss nur die ~ 6-7 Stunden Lücken von NaNs ausfüllen (ich werde mit Daten vor den NaN-Lücken und nach den NaN-Lücken versorgt).
lineare Interpolation verwendet nur die Werte neben dem Bereich interpoliert werden, so dass man sich keine Sorgen machen muss, "die ganze Zeitreihe zu verwenden". Oder ist das Problem Leistung? – Jonas
Ah dumme mich. Ich hatte den Eindruck, dass es eine lineare Anpassung nach der Methode der kleinsten Quadrate verwendet und dann Punkte mithilfe der Anpassung zuweist. Wenn interp1 'linear' nur die benachbarten linken und rechten Punkte verbindet und interpoliert, welche Unterschiede ergeben 'kubisch' und 'chip'? Z.B. Es passt nicht ein Kubik über die Daten interpolieren dann? – Justin
Fragen Sie, was ist die beste Methode der Interpolation? Wenn ja, dann hängt die beste Methode wirklich von Ihrer Anwendung ab. Für einige Anwendungen möchten Sie möglicherweise nur mit früheren Daten interpolieren, da eine Methode wie die lineare Interpolation voraussetzt, dass Sie im Voraus wissen, was die nächste Nicht-NaN-Beobachtung sein wird. Am anderen Ende des Spektrums könnten Sie einen EM-Algorithmus anwenden, der fehlende Beobachtungen durch ihre bedingt erwarteten Werte ersetzt, die von der gemeinsamen Verteilung jeder anderen Beobachtung abhängen. So ist es schwer zu antworten, ohne Ihre Anwendung zu kennen. –