Interpolieren fehlende Werte in einer Zeitreihe mit saisonalen Zyklus

Ich habe eine Zeitreihe, für die ich möchte, um intelligent die fehlenden Werte interpolieren. Der Wert zu einem bestimmten Zeitpunkt beeinflusst wird durch ein multi-Tag-trend, sowie seine position in der täglichen Zyklus.

Hier ist ein Beispiel, in dem der zehnte Beobachtung fehlt myzoo

start <- as.POSIXct("2010-01-01") 
freq <- as.difftime(6, units = "hours") 
dayvals <- (1:4)*10 
timevals <- c(3, 1, 2, 4) 
index <- seq(from = start, by = freq, length.out = 16)
obs <- (rep(dayvals, each = 4) + rep(timevals, times = 4))
myzoo <- zoo(obs, index)
myzoo[10] <- NA

Wenn ich hatte, um dies zu implementieren, ich würde verwenden eine gewichtete Mittelwert der in der Nähe mal auf der nahe gelegenen Tage, oder fügen Sie einen Wert für die Tag-Funktion Zeile eingebaut, um die größeren Trends, aber ich hoffe, es existieren bereits einige Paket oder Funktionen, die auf diese situation anzuwenden?

BEARBEITEN: Verändert den code etwas zu klären, mein problem. Es gibt na.* Methoden, interpolieren von nächsten Nachbarn, aber in diesem Fall Sie nicht erkennen, dass der missing-Wert ist an der Zeit, das ist der niedrigste Wert des Tages. Vielleicht ist die Lösung zur Umgestaltung der Daten im wide format und dann interpolieren, aber ich möchte nicht völlig außer acht lassen die zusammenhängenden Werte vom selben Tag. Es ist erwähnenswert, dass diff(myzoo, lag = 4) wird ein Vektor von 10. Die Lösung liegen kann, mit einer Kombination von reshape, na.spline, und diff.inv, aber ich kann es einfach nicht herausfinden.

Hier sind drei Ansätze, die nicht funktionieren:
Interpolieren fehlende Werte in einer Zeitreihe mit saisonalen Zyklus

EDIT2. Erzeugte Bild mit dem folgenden code.

myzoo <- zoo(obs, index)
myzoo[10] <- NA # knock out the missing point
plot(myzoo, type="o", pch=16) # plot solid line
points(na.approx(myzoo)[10], col = "red")
points(na.locf(myzoo)[10], col = "blue")
points(na.spline(myzoo)[10], col = "green")
myzoo[10] <- 31 # replace the missing point
lines(myzoo, type = "o", lty=3, pch=16) # dashed line over the gap
legend(x = "topleft", 
       legend = c("na.spline", "na.locf", "na.approx"), 
       col=c("green","blue","red"), pch = 1)
  • Dieser code wird nicht ausgeführt. index und obs nicht definiert sind. na.approx, na.spline, na.locf und andere na.* Funktionen in der zoo-Paket können füllen Sie NA Werte.
  • Danke, ist eingefügt der richtige block.
  • Zeig bitte den code, den Sie zum erstellen der Handlung und erklären, was "funktionieren nicht" bedeutet.
  • Grothendieck: Diese drei Interpolationsmethoden nicht funktionieren, weil Sie nur auf die Nachbarn in der Zeitreihe, ohne Rücksicht auf die täglichen Muster.
InformationsquelleAutor J. Win. | 2011-02-11
Schreibe einen Kommentar