Ich arbeite häufig mit Zeitreihendaten, die gleichzeitig von mehreren Sensoren erfasst werden. Beispielsweise können 100 Sensoren mehrere Monate lang einmal pro Stunde Messungen durchführen. Die Sensoren melden manchmal fehlerhafte Werte und manchmal nicht. Ich möchte die Ausreißer aus dem Datensatz entfernen und die fehlenden Werte imputieren, um Werte von bestimmten Zeitpunkten für die weitere Nachbearbeitung und Analyse zu extrahieren. Der Kernel-Smoother in der bivariaten Plattform mit einem oder mehreren Robustness-Passes leistet hervorragende Arbeit bei der Anpassung. Ich konnte mich jedoch nicht effektiv auf einen großen Datensatz (Hunderte von Sensoren) anwenden.
Beispielsweise hat eine repräsentative Datentabelle 3 Spalten: Sensor-ID, Zeit und Messung. Gibt es eine effektive Möglichkeit, die Werte in der Spalte „Messung“ durch die geglätteten Kernal-Werte zu ersetzen, die auf einer Anpassung von „Messung vs. Zeit“ nach Sensor-ID basieren?
Die beschriebene Lösung Hier ist ein eleganter Weg, fehlende Werte zu imputieren, aber ein Spline-Fit wird entweder zu stark von den Ausreißern beeinflusst (kleines Lambda) oder zu steif, um auf die tatsächliche Krümmung in den Daten zu reagieren (großes Lambda), und ich sehe nicht, wie ich darauf zugreifen soll Kernel-Smoother-Objekte im Scripting-Index.Diagramme anonymisierter Daten (Rohdaten links, glattere Anwendung rechts) sind unten eingefügt und die Datentabelle, aus der sie generiert wurden, ist beigefügt.
-Wille

Ich konnte herausfinden, wie ich auf der bivariaten Plattform reibungsloser auf den Kernel zugreifen kann.Ein Skript, das einige gefälschte verrauschte Daten erstellt, einen Kernel glatter an die Daten anpasst (mit einer by-Variablen) und die Anpassung in einer neuen Spalte in der Datentabelle speichert, ist unten
dt = New Table( "smoother example",
Add Rows( 90 ),
New Column( "X",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
)
),
New Column( "Y",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
Sine( :X / (Pi() * 2) ) + Random Normal( 0, 0.01 ) + (
Floor( Random Uniform( 0, 10 ) ) == 1) * Random Uniform( -1, 1 )
),
Set Display Width( 100 )
),
New Column( "ByVar",
Character,
"Nominal",
Set Values(
{"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A",
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A",
"A", "A", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B",
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B",
"B", "B", "B", "B", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C",
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C",
"C", "C", "C", "C", "C", "C"}
)
)
);
obj = dt << Bivariate(
Ignore Platform Preferences( 1 ),
Y( :Y ),
X( :X ),
By( :ByVar )
);
obj << Kernel Smoother( 2, 1, 0.5, 1 );
obj << (curve[1] << save predicteds);Markieren,
Vielen Dank für Ihre schnelle Antwort.
Ich habe JMP Pro 14 und habe einige Arbeiten mit dem Funktionsdaten-Explorer durchgeführt, einschließlich der Bereinigung von Daten und der Anpassung von B-Splines. Ich habe die Tools verwendet, die bei der manuellen Bereinigung von Daten helfen, und festgestellt, dass sie in einigen Fällen gut funktionieren. In dem von mir beschriebenen Anwendungsfall gibt es jedoch 3 Elemente, die ich nach einer Problemumgehung suche.
1. Das Bereinigen eines großen Datensatzes in FDE (Hunderte von einzelnen Zeitreihen) nimmt viel Zeit in Anspruch - manuelles Zoomen in jede Zeitreihe, Auswählen von Punkten, Klicken auf "Entfernen"...
2. Die vorhergesagten Zeitreihen, die von den angepassten Splines in FDE ausgegeben werden, unterstellen keine fehlenden Daten. Wenn beispielsweise die Daten für Zeit = 1000 im ursprünglichen Datensatz fehlten, fehlen sie auch in der Anpassung. Wenn es eine effektive Möglichkeit gibt, die Werte direkt in FDE zu imputieren, habe ich sie nicht gefunden. Ich kann eine Problemumgehung dafür finden, indem ich die fehlenden Zeitwerte einfüge, einen Spline anpasse und die berechneten Spline-Werte verwende. Ich möchte die zusätzlichen Schritte eliminieren.
3. Ich möchte letztendlich die Glättung "in-place" mit einem Skript durchführen, das die Rohdaten durch geglättete Daten in einer Datentabelle ersetzt, die möglicherweise mehrere hundert Sensoren mit jeweils mehreren hundert Datenpunkten enthält.
Die Unterscheidung zwischen echtem Signal und Anomalie oder Bias ist im Datensatz relativ einfach, wenn man weiß, wie es erzeugt wird. Die Änderungen des Schritttyps sind echt, aber die falschen Einzelpunkte sind falsch berechnete Werte. Die für diese Analyse (die ich mehrmals pro Woche durchführe) typischen falschen Datenpunkte in den Datensätzen sind sehr leicht mit dem Auge zu erkennen. Auch ein LOESS-Glättgerät erkennt sie zuverlässig.
-Wille