Skript zur Interpolation fehlender Zeitreihen-Wetterdaten erstellen?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Bei Wetterdaten in stündlichen Intervallen kommt es gelegentlich zu fehlenden Datenpunkten (Miss Reads).Ich möchte fehlende Datenpunkte interpolieren – Temperatur, Luftfeuchtigkeit und Luftdruck ändern sich normalerweise im Laufe eines Tages allmählich.Ich möchte zwischen dem letzten und dem nächsten Zeitreihenwert in einer Spalte interpolieren, um die fehlenden Werte zu erhalten und die Daten zu bereinigen.Die Imputation mit der Funktion „Fehlende Werte durchsuchen“ liefert zeilenübergreifend bedeutungslose Ergebnisse. Ich benötige eine einfache Möglichkeit, die fehlenden Punkte in Spalten einzutragen, um sie für andere Berechnungen wie Heizgradtage, Kühlgradtage usw. zu verwenden.
Konzeptionell scheint die Logik einfach zu sein: Wenn in der nächsten Zeile einer Spalte ein fehlender Wert auftritt, zählen Sie die Anzahl der fehlenden Datenpunkte bis zum nächsten Wert und interpolieren Sie dann basierend auf der Anzahl der fehlenden Datenpunkte.Die Logik scheint zu sein: Überprüfen Sie eine Spalte auf fehlende Daten, mit fehlenden Daten, zählen Sie dann die fehlenden Intervalle und füllen Sie dann die fehlenden Intervalle aus, wobei (nächster Wert – letzter Wert / Anzahl der fehlenden Intervalle) zum letzten Wert addiert wird.
Hat jemand mit besseren Skriptkenntnissen als ich eine Lösung?
Ist das schon gelöst?Oder sind in JMP bereits Funktionen integriert?
Betreff: Skript zur Interpolation fehlender Zeitreihen-Wetterdaten erstellen?In vielen Kommentaren wurde offenbar ignoriert, dass Sie über Zeitreihendaten verfügen. Vorausgesetzt, dass Ihre Daten Autokorrelation aufweisen, können Sie die JSL-Funktion INTERPOLATE verwenden. Oder SPLINE SMOOTH, wenn Sie nichtlineare Interpolation benötigen.

Betreff: Skript zur Interpolation fehlender Zeitreihen-Wetterdaten erstellen?....wie wäre es mit der Skripterstellung für die Spline-Anpassung?
G
Betreff: Skript zur Interpolation fehlender Zeitreihen-Wetterdaten erstellen?Nur weil du dürfen Etwas tun bedeutet nicht, dass du es tust sollen !
Es ist immer noch unklar, welche Informationen Sie genau aus Ihren Daten gewinnen möchten, aber wenn Sie mit den einzelnen Imputationen Rückschlüsse (Hypothesentests, Konfidenzintervalle usw.) auf die Daten ziehen, sollten Sie sich darüber im Klaren sein, dass Sie alle Varianzen verzerrt haben Die Schätzung des Parameters geht gegen Null, was sich auf die Qualität aller anschließend an den Daten vorgenommenen Schlussfolgerungen auswirkt.
Möglicherweise werden nie Rückschlüsse auf diese Daten gezogen, und das stellt für Sie kein Problem dar.In diesem Fall unterstellen Sie, wie Sie möchten.
Betreff: Skript zur Interpolation fehlender Zeitreihen-Wetterdaten erstellen?Die einfachste Lösung könnte darin bestehen, die Fit-Y-By-X-Plattform zu verwenden, wenn gelegentlich Daten fehlen. Wenn Sie Ihre Zeitspalte als X (muss numerisch fortlaufend sein) und die Wettervariablen als Y eingeben. Anschließend können Sie über das Hotspot-Menü einen Spline anpassen (Sie müssen mit dem zu verwendenden Wert von „Lambda ändern“ experimentieren).
Aus dem Spline-Hotspot auswählen und speichern, vorhergesagt. In diesen neuen Spalten werden die fehlenden Werte ausgefüllt, mit denen Sie Ihre Berechnungen durchführen können (oder Sie könnten ein wenig Skripting erstellen, um den neuen Wert nur dort zu verwenden, wo die Originale fehlen). Da es sich bei Wetterdaten oft um eine allmähliche Änderung handelt, sollte dies eine vernünftige Imputation ermöglichen.
Betreff: Skript zur Interpolation fehlender Zeitreihen-Wetterdaten erstellen?Was Rons obigen Vorschlag betrifft, wollte ich nur darauf hinweisen, dass „RandomIndex()“ die Unsicherheit darüber beseitigen wird, wie viele Werte dezimiert wurden. Die ersten Zeilen lauten also:
dt = Offen ( „$SAMPLE_DATA/Time Series/CO2.jmp“ ) ;
// n CO2-Werte auf fehlend setzen
N = 25 ;
dt : CO2 [ RandomIndex ( NRows ( dt ) , N )] = . ;
Zur Methode im Allgemeinen siehe auch: https://community.jmp.com/message/217292#217292
Betreff: Skript zur Interpolation fehlender Zeitreihen-Wetterdaten erstellen?Hi jthornton1 ,
In der Vergangenheit habe ich etwas Ähnliches gemacht wie das, was Sie erwähnen. Es ist nicht das schnellste oder einfachste, aber es könnte den Zweck erfüllen.
Sobald Sie eine Dauerspalte und eine Differenzspalte haben (und die Zeit, die Sie von der Quelle hatten), können Sie die Imputationsformel so weit komplizieren, wie Sie möchten.
Namen standardmäßig hier ( 1 ) ;
// Originaldatensatz öffnen
dt = Offen ( „$SAMPLE_DATA/Time Series/CO2.jmp“ ) ;
// etwa 25 zufällige Zeilen löschen
Für ( ich = 1 , ich <= 25 , ich ++,
X = Zufällige ganze Zahl ( 161 ) ;
dt : CO2 [ X ] = . ;
) ;
// An diesem Punkt haben Sie nur Daten mit fehlenden Werten.
// Fügen Sie eine Spalte für die Zeit hinzu. Wenn Sie eine haben, benötigen Sie diese nicht.
dt << Neue Spalte ( "T" ) ;
Für jede Reihe ( : T = Reihe () ) ;
// hier fängst du an
// Teilmenge der Originaltabelle und Löschen der Zeilen mit fehlenden Werten.
dtSub = dt << Teilmenge ( Alle Reihen , Säulen ( : CO2 , : T ) ) ;
dtSub << Zeilen löschen ( dtSub << Holen Sie sich Zeilen wo ( Wird vermisst ( : CO2 ) ) ) ;
// Einführung der Dauerspalte
dtSub << Neue Spalte ( "Dauer" ) ;
Für jede Reihe ( : Dauer = Verzögerung ( : T , - 1 ) - : T ) ;
// Einführung der CO2-Änderung von Zeile zu Zeile.
dtSub << Neue Spalte ( „CO2-Änderung“ ) ;
Für jede Reihe ( : Name ( „CO2-Änderung“ ) = Verzögerung ( : Name ( „CO2“ ) , - 1 ) - : Name ( „CO2“ ) ) ;
// Dauer und Differenz zur Originaltabelle aktualisieren;
dt << aktualisieren ( mit ( dtSub ) , Spalten anpassen ( : T = : T ) ) ;
// Teilmengentabelle schließen
Schließen ( dtSub , kein Speichern ) ;
// Fülle die fehlenden Zeilen aus – Bedarf für den nächsten Schritt
Für jede Reihe ( : Dauer = Wenn ( Wird vermisst ( : Dauer ) , Verzögerung ( : Dauer , 1 ) , : Dauer ) ) ;
Für jede Reihe ( : Name ( „CO2-Änderung“ ) = Wenn ( Wird vermisst ( : Name ( „CO2-Änderung“ ) ) , Verzögerung ( : Name ( „CO2-Änderung“ ) , 1 ) , : Name ( „CO2-Änderung“ ) ) ) ;
// Jetzt können Sie die fehlenden Werte mit einer Formel in eine neue Spalte oder in die bestehende eintragen
dt << Neue Spalte ( „CO2 voll“ ) ;
Für jede Reihe (
: Name ( „CO2 voll“ ) = Wenn (
Reihe () == 1 , : CO2 ,
: Dauer == 1 , : CO2 ,
: Dauer > 1 , Verzögerung ( : Name ( „CO2 voll“ ) , 1 ) + ( : Name ( „CO2-Änderung“ ) / : Dauer )
)
) ;
Betreff: Skript zur Interpolation fehlender Zeitreihen-Wetterdaten erstellen?Hallo, jthornton1!
Normalerweise mache ich mir Sorgen, wenn meine Logik einfach erscheint!
Ihre Interpolationsidee würde offenbar eine extreme Verzerrung erleiden, wenn an einem Tag 24 aufeinanderfolgende Stunden fehlen würden.Ich gehe davon aus, dass bei Ihrer Interpolation der Temperatur beispielsweise von Mitternacht bis Mitternacht die wärmenden Auswirkungen der Sonne während des Tages fehlen würden.Selbst wenn nur wenige Punkte fehlen, spiegelt die von Ihnen vorgeschlagene Methode (Einzelimputation genannt) die Unsicherheit über die Vorhersagen der unbekannten fehlenden Werte nicht richtig wider, und die Varianzen der Parameterschätzungen aus jeder Analyse dieser Daten werden falsch verzerrt sein gegen Null.Dies ist selbst dann ein Problem, wenn Sie für jeden Zeitraum der vollständigen Daten eine Statistik (Mittelwert, Median usw.) verwenden.
Ich denke, der aktuelle Stand der Technik für einen Ansatz zur Lösung Ihres Problems ist die multiple Imputation.Anstatt für jedes fehlende Datum einen einzelnen Wert einzugeben, ersetzt die Mehrfachimputation jeden fehlenden Wert durch eine Reihe plausibler Werte, die die Unsicherheit über den korrekten zu imputierenden Wert darstellen. Die imputierten Datensätze werden jeweils mit Standardverfahren auf vollständige Daten analysiert und die Ergebnisse dieser Analysen anschließend kombiniert.Bei der Mehrfachimputation wird nicht versucht, jeden fehlenden Wert für sich zu schätzen, sondern stattdessen wird versucht, eine Zufallsstichprobe plausibler fehlender Werte darzustellen. Dieser Prozess führt zu statistischen Schlussfolgerungen, die die Unsicherheit aufgrund fehlender Werte besser widerspiegeln.Beispielsweise können Sie berechtigterweise gültige Konfidenzintervalle für Parameter erhalten.
SAS verfügt über einige Verfahren, die Multiple Imputation sehr effektiv umsetzen.JMP lässt sich gut in SAS integrieren.Viel Glück!