rpubs - Agregue la trama de la media móvil a la trama de la serie temporal en R
series de tiempo diarias en r (1)
Tengo un gráfico de series de tiempo en el paquete ggplot2 y he realizado la media móvil y me gustaría agregar el resultado del promedio móvil a la gráfica de series de tiempo.
Muestra de conjunto de datos (p31):
ambtemp dt
-1.14 2007-09-29 00:01:57
-1.12 2007-09-29 00:03:57
-1.33 2007-09-29 00:05:57
-1.44 2007-09-29 00:07:57
-1.54 2007-09-29 00:09:57
-1.29 2007-09-29 00:11:57
Código aplicado para la presentación de series de tiempo:
Require(ggplot2)
library(scales)
p29$dt=strptime(p31$dt, "%Y-%m-%d %H:%M:%S")
ggplot(p29, aes(dt, ambtemp)) + geom_line() +
scale_x_datetime(breaks = date_breaks("2 hour"),labels=date_format("%H:%M")) + xlab("Time 00.00 ~ 24:00 (2007-09-29)") + ylab("Tempreture")+
opts(title = ("Node 29"))
Muestra de presentación de series de tiempo.
Muestra de parcela de media móvil Muestra de resultados esperados.
El desafío es que los datos de las series de tiempo se obtienen de un conjunto de datos que incluye marcas de tiempo y temperatura, pero los datos de promedios móviles incluyen solo la columna promedio y no las marcas de tiempo y el ajuste de estos dos puede causar inconsistencia.
Una solución es usar la función rollmean()
del zoo
biblioteca para calcular el promedio móvil.
Hay algo de confusión con los nombres de los marcos de datos en su pregunta (p31 y p29), así que usaré la p 29.
p29$dt=strptime(p29$dt, "%Y-%m-%d %H:%M:%S")
library(zoo)
#Make zoo object of data
temp.zoo<-zoo(p29$ambtemp,p29$dt)
#Calculate moving average with window 3 and make first and last value as NA (to ensure identical length of vectors)
m.av<-rollmean(temp.zoo, 3,fill = list(NA, NULL, NA))
#Add calculated moving averages to existing data frame
p29$amb.av=coredata(m.av)
#Add additional line for moving average in red
ggplot(p29, aes(dt, ambtemp)) + geom_line() +
geom_line(aes(dt,amb.av),color="red") +
scale_x_datetime(breaks = date_breaks("5 min"),labels=date_format("%H:%M")) +
xlab("Time 00.00 ~ 24:00 (2007-09-29)") + ylab("Tempreture")+
ggtitle("Node 29")
Si los colores de línea deberían aparecer en la leyenda, entonces se deben modificar aes()
en ggplot()
y geom_line()
y se debe agregar scale_colour_manual()
.
ggplot(p29, aes(dt)) + geom_line(aes(y=ambtemp,colour="real")) +
geom_line(aes(y=amb.av,colour="moving"))+
scale_x_datetime(breaks = date_breaks("5 min"),labels=date_format("%H:%M")) +
xlab("Time 00.00 ~ 24:00 (2007-09-29)") + ylab("Tempreture")+
scale_colour_manual("Lines", values=c("real"="black", "moving"="red")) +
ggtitle("Node 29")