Glättungsalgorithmus für Anomalien

Sep 14 2020

Um ein Diagramm zu erstellen, suche ich nach einem Algorithmus, der inf- und (sehr) negative Werte verarbeiten kann.

Wenn ich Unendlichkeitswerte habe, ist alles eine Linie, aber keine Unendlichkeit.

Beispiel

57474
65637
35252
17938
inf
56268
12341
-200000
45884
inf
36561
-7000

Es gibt nicht so viele Anomalien wie im Beispiel, aber ich möchte nur den Referenzdatenbereich anzeigen

Der Grund, warum ich eine Glättung brauche, ist, Zick-Zack zu vermeiden

Aber so etwas

Ich brauche also einen Algorithmus, der eine hübsche Linie zeigt und einzelne Ausreißer ignoriert

Antworten

4 whuber Sep 15 2020 at 19:48

Eine klassische Lösung besteht darin, einen robusten lokalen Glätter aufzutragen.

In seinem Buch EDA (Addison-Wesley 1977) legt John Tukey Prinzipien und Verfahren fest, die hauptsächlich auf der Durchführung lokaler Mediane basieren. Wenn ein Median einer ungeraden Zahl$2k+1$ von Daten wird berechnet, bis zu $k$ Von diesen Werten kann es extrem sein, aber der Median ist endlich und genau definiert.

Der Umgang mit Unendlichkeiten ist immer noch problematisch. Wenn die Unendlichkeiten wirklich große Zahlen darstellen sollen, behalten Sie sie wie sie sind; Andernfalls fungieren sie als fehlende Werte. Behandeln Sie sie einfach, indem Sie sie beim Glätten aus der Zeitreihe herauslassen.

Unten sehen Sie ein Beispiel für die Verwendung des 3RSSH-Glätters von Tukey. Diese Notation bezieht sich auf das wiederholte Ausführen von laufenden Medianen von drei Daten, bis sich nichts mehr ändert, und das Ausführen von zwei "Aufteilungs" -Operationen, um Zeichenfolgen mit wiederholten Werten zu verarbeiten, gefolgt von einem "Hanning" -Schritt, der einen gewichteten laufenden Mittelwert innerhalb eines Fensters mit drei Elementen ausführt (wodurch Mittelung einiger blockartiger Sprünge, die von den laufenden Medianen erzeugt werden können). Es ist effizient und funktioniert in der Praxis recht gut zum Erkunden von Daten.

Um zu sehen, wie gut ein Glatter funktioniert, untersuchen Sie die Residuen: Dies sind per Definition die Unterschiede zwischen den Daten und ihren geglätteten Werten. Wenn Residuen lokale Trends anzeigen, können Sie weiter gehen, indem Sie die Residuen glätten. Tukey liefert die Details und viele Beispiele.

Dieser Datensatz wurde so erstellt, dass er wie der erste Plot in der Frage aussieht. Dann wurden die Werte zu zehn zufällig ausgewählten Zeiten durch "unendlich" ersetzt. Diese konnten nicht links dargestellt werden, sodass sie als Lücken in der Grafik angezeigt werden. Rechts sind ihre Positionen mit orangefarbenen Kreuzen gefüllt, um zu bestätigen, dass diese Daten nicht übersehen wurden.

Diese Berechnungen sind teilweise im Basisprogramm Rinnerhalb seiner smoothFunktion implementiert . Hanning ist einfach als Faltung zu codieren. Zusätzlicher Code wird benötigt, um die unendlichen Werte zu identifizieren und zu überspringen. Hier ist die resultierende Implementierung:

s <- function(x) {
  hann <- function(x) {
    n <- length(x)
    x <- c(x[1], x, x[n])
    convolve(x, c(1,2,1)/4, type="filter")
  }
  #
  # Smooth the non-infinite, non-missing values of `x`.
  #
  y <- x
  i <- which(!is.infinite(x) & !is.na(x))
  y[i] <- hann(smooth(x[i], "3RSS"))
  y
}

Vor langer Zeit habe ich ein Excel-Makro freigegeben, um alle Tukey-Smoothers zu implementieren. (Es geht weit über die RImplementierung hinaus.) Es muss wahrscheinlich auf neuere Versionen von Excel portiert werden, aber der zugrunde liegende Code sollte trotzdem funktionieren. Google 'Tukey EDA Excel' , um es zu finden.