La función que a continuación se presenta puede recibir 2 tipos de parametros que son: s y n, donde s recibe una Serie de Tiempo con el objeto de la clase ts (Time Series), mientras que n será el número de pasos en que se desea calcular las medias móviles. Nuestra función nos dará una en una primera parte una clasificación de la Serie de Tiempo dependiendo si es creciente, decreciente o constante. Y la segunfa parte de la función será mostrar graficamente la Serie de Tiempo acompañada de las medias moviles y los pasos que se deseeen calcular.
func_mediasmov<-function(s,n){
if(class(s)=="ts"){
s<-as.numeric(s)
mediamov<-c()
for (i in 1:floor(length(s)/n)) {
mediamov[i]<-mean(s[(n*(i-1)):(n*i)] %>% t() %>% as.vector(), na.rm = T)
}
if(mediamov[1]<mediamov[length(mediamov)]){tendencia <-"La Serie de Tiempo tiene una tendencia CRECIENTE."
} else if(mediamov[1]>mediamov[length(mediamov)]){tendencia <- "La Serie de Tiempo tiene una tendencia DECRECIENTE."
}else{ tendencia<-"La Serie de Tiempo tiene una tendencia CONSTANTE."}
g<-ggplotly(ggplot()+geom_line(aes(x=c(1:length(s)), y=s), color="darkgreen", size=1.2)+
geom_smooth(aes(x=seq(from=round(n/2), to=length(s), by=n), y=mediamov), color="darkred")+
geom_point(aes(x=c(1:length(s)), y=s), color="gray")+
labs(x="Tiempo", y="Observaciones") +
ggtitle("Serie de Tiempo y Medias Moviles")+theme_calc())
return(tagList(g,tendencia))
}else{
stop('class(s) no es una Serie de Tiempo')
}
}
En esta parte se mostrarán tres ejemplos con 3 series de tiempos distintas y con distintos tipos de graficas citados en la anterior sección.
serie1<-c(as.numeric(fecha[123], "%y"),as.numeric(fecha[123], "%m"))
s1<-ts(series[500,-c(1:7)] %>% t() %>% na.omit(),frequency = 12, start=serie1[1])
func_mediasmov(s1,3)
serie2<-c(as.numeric(fecha[123], "%y"),as.numeric(fecha[123], "%m"))
s2<-ts(series[450,-c(1:7)] %>% t() %>% na.omit(),frequency = 12, start=serie2[1])
func_mediasmov(s2,3)
serie3<-c(as.numeric(fecha[123], "%y"),as.numeric(fecha[123], "%m"))
s3<-ts(series[849,-c(1:7)] %>% t() %>% na.omit(),frequency = 12, start=serie3[1])
func_mediasmov(s3,3)