Tengo una serie temporal para la cual quiero interpolar inteligentemente los valores perdidos. El valor en un momento particular está influenciado por una tendencia de varios días, así como su posición en el ciclo diario.Interpolar valores perdidos en una serie temporal con un ciclo estacional
Aquí se muestra un ejemplo en el que el décimo observación no se encuentra en 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
Si tuviera que implementar esto, me gustaría usar algún tipo de media ponderada de los tiempos estrechos en los días próximos, o añadir una valor del día para una línea de función adaptada a la tendencia más amplia, pero espero que ya exista algún paquete o funciones que se apliquen a esta situación?
EDITAR: Modifiqué el código ligeramente para aclarar mi problema. Existen na.*
métodos que se interpolan desde los vecinos más cercanos, pero en este caso no reconocen que el valor faltante se encuentra en el momento que es el valor más bajo del día. Quizás la solución sea redirigir los datos a formato ancho y luego interpolar, pero no me gustaría ignorar por completo los valores contiguos del mismo día. Vale la pena señalar que diff(myzoo, lag = 4)
devuelve un vector de 10's. La solución puede estar en alguna combinación de reshape
, na.spline
y diff.inv
, pero no puedo entenderlo.
Aquí hay tres enfoques que no funcionan:
Edit2. Imagen producida usando el siguiente código.
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)
Este código no se ejecuta. índice y obs no están definidos. 'na.approx',' na.spline', 'na.locf' y otras funciones' na. * 'en el paquete del zoo pueden completar los valores' NA'. –
Gracias, pegado el bloque correcto. –
Por favor, muestre el código que usó para crear la trama y explique qué significa "no funciona". –