Wie gehe ich mit Lücken / NaNs in Zeitreihendaten um, wenn Matlab für Autokorrelation und neuronale Netze verwendet wird?

9

Ich habe eine Zeitreihe von Messungen (Höhen-eindimensionale Reihen). Im Beobachtungszeitraum ging der Messvorgang für einige Zeitpunkte zurück. Die resultierenden Daten sind also ein Vektor mit NaNs, bei dem es Lücken in den Daten gab. Bei Verwendung von MATLAB verursacht dies ein Problem bei der Berechnung der Autokorrelation ( autocorr) und der Anwendung neuronaler Netze ( nnstart).

Wie sollen diese Lücken / NaNs behandelt werden? Soll ich diese einfach aus dem Vektor entfernen? Oder ihren Eintrag durch einen interpolierten Wert ersetzen? (wenn ja wie in MATLAB)

Vass
quelle

Antworten:

4

Ich würde die Daten überhaupt nicht berühren. Verwenden Sie dies für die Autokorrelation mit NaNs:

http://www.mathworks.com/matlabcentral/fileexchange/43840-autocorrelation-and-partial-autocorrelation-with-nans/content/nanautocorr.m

"Daten nicht berühren" bedeutet, keine Daten oder Zeitschritte zu entfernen oder durch 0 oder den Mittelwert zu ersetzen. Dies würde die Informationen über die lineare Abhängigkeit mit spezifischer Zeitverzögerung gefährden. Ich würde es auch vermeiden, die Werte in den Lücken zu simulieren, wenn Sie an der Autokorrelation "SAMPLE" interessiert sind. Trotzdem wird selbst die beste Simulationstechnik keine weiteren Informationen über die Autokorrelation hinzufügen, da sie auf den Daten selbst basiert. Ich habe die Autokorrelations- und Teilautokorrelationsfunktionen von matlab (Link oben) teilweise neu codiert, um mit NaNs umzugehen: Alle Datenpaare, einschließlich NaNs, werden von der Berechnung ausgeschlossen. Dies erfolgt für jede Verzögerung. Es hat bei mir funktioniert. Jeder Vorschlag wird gut angenommen.

Fabio
quelle
Welcome @Fabio: Könnten Sie bitte näher erläutern, was Sie unter "Daten nicht berühren" verstehen? Wollen Sie nichts entfernen? Es wäre auch hilfreich, den von Ihnen verlinkten Inhalt vorzustellen und zu erklären, warum dies dem OP hilft.
Momo
Hallo Momo, danke für den Kommentar. "Daten nicht berühren" bedeutet, keine Daten oder Zeitschritte zu entfernen oder durch 0 oder den Mittelwert zu ersetzen. Dies würde die Informationen über die lineare Abhängigkeit mit spezifischer Zeitverzögerung gefährden. Ich habe die Autokorrelations- und Teilautokorrelationsfunktionen von matlab (Link oben) teilweise neu codiert, um mit NaNs umzugehen: Alle Datenpaare, einschließlich NaNs, werden von der Berechnung ausgeschlossen. Dies erfolgt für jede Verzögerung. Es hat bei mir funktioniert. Jeder Vorschlag wird gut angenommen.
Fabio
3

Es gibt einige Algorithmen, die gegen fehlende Werte immun sind. Daher besteht die bevorzugte Lösung darin, nach ihnen zu suchen (z. B. Rs acffür die Autokorrelation).

Im Allgemeinen besteht der Weg darin, entweder nur Daten mit fehlenden Beobachtungen zu verwerfen (kann sehr schmerzhaft sein) oder nur deren Werte zu unterstellen - der Mittelwert der Nachbarn könnte für glatte Reihen und kleine Lücken ausreichen, aber es gibt natürlich auch Vielzahl anderer leistungsfähigerer Methoden, unter Verwendung von Splines, zufälligen / häufigsten Werten, Imputation von Modellen usw.


quelle
2
Der ACF mit fehlendem Wert wird auf normale Weise berechnet, aber fehlende Werte werden in den Summen "übersprungen" (dh die ACF-Formel für eine bestimmte Verzögerung sieht aus wie eine Summe geteilt durch eine Summe, in jeder dieser Summen können die fehlenden Werte übersprungen werden). Dies ist nicht dasselbe wie das Entfernen der fehlenden Werte aus den Originaldaten. Das Problem mit matlab ist, dass NaN nicht übersprungen wird und dass bei der Berechnung alles in NaN umgewandelt wird.
Null
1

Verwenden Sie die Interventionserkennung, um die fehlenden Werte unter Verwendung der nützlichen ARIMA-Struktur und lokaler Zeittrends und / oder Pegelverschiebungen zu unterstellen.

IrishStat
quelle
1

Hier gibt es 2 Probleme. Das erste ist die Bereitstellung eines aussagekräftigen numerischen Rahmens für Ihre Autokorrelationsantwort in matlab. Dazu müssen Sie den Zeitreihenanteil Ihrer Datenvektoren strecken und / oder patchen. Diese Komponente der Datenintegrität des Problems ist die grundlegendste.

Zweitens müssen Sie entscheiden, wie mit der 'Wert'-Komponente Ihres Vektors umgegangen werden soll. Dies hängt in hohem Maße von der jeweiligen Anwendung ab, was am besten anzunehmen ist (z. B. kleine, fehlende Zeitstempel und die entsprechenden NaNs) oder Nullen könnten sicher von ihren Nachbarn interpoliert werden ... in größeren Lücken ist es wahrscheinlich sicherer, den Wert auf Null zu setzen ... oder wie oben empfohlen zu unterstellen - damit dies sinnvoll ist, müssen die Lücken wieder vergleichsweise klein sein.) .

chris
quelle