Objetivo

Realizar una función que extraiga y describa la tendencia de una serie de tiempo contenida en un objeto de clase ts.

¿Cómo funciona?

La función esta diseñada para recibir 2 objetos:

el objeto st: debe ser un objeto de clase "Time-Series"


el objeto periodo: es el número de observaciones a considerar para realizar las medias 

Función

medias_moviles<-function(st,pasos){
  if(class(st)=="ts"){
    s<-as.numeric(st)
    mm<-c()
    for (i in 1:floor(length(st)/pasos)) {
      mm[i]<-mean(st[(pasos*(i-1)):(pasos*i)] %>% t() %>% as.vector(), na.rm = T)
    }
    if(mm[1]<mm[length(mm)]){tendencia <-"La tendencia de la serie de tiempo es CRECIENTE."
    } else if(mm[1]>mm[length(mm)]){tendencia <- "La tendencia de la serie de tiempo es DECRECIENTE."
    }else{ tendencia<-"La tendencia de la serie de tiempo es constante."}
    
    graf<-ggplotly(ggplot()+geom_line(aes(x=c(1:length(st)), y=st), color="#0000FF", size=1.3)+
    geom_smooth(aes(x=seq(from=round(pasos/2), to=length(st), by=pasos), y=mm), color="#FF3333")+
    geom_point(aes(x=c(1:length(st)), y=st), color="#000066")+ 
    labs(x="Tiempo", y="Observación") + 
    ggtitle(paste("Serie de Tiempo con Medias Moviles\n",tendencia))+theme_economist() ) 
  
    return(tagList(graf,tendencia))
    
  }else{
    stop('El primer parámetro no es de clase Time-Series')
  }
}

Ejemplos

Ejemplo 1

ser1<-c(as.numeric(fecha[100], "%y"),as.numeric(fecha[100], "%m"))

st1<-ts(series[924,-c(1:7)] %>% t() %>% na.omit(),frequency = 12, start=ser1[1])

medias_moviles(st1,3)
La tendencia de la serie de tiempo es CRECIENTE.

Ejemplo 2

ser2<-c(as.numeric(fecha[93], "%y"),as.numeric(fecha[93], "%m"))

st2<-ts(series[387,-c(1:7)] %>% t() %>% na.omit(),frequency = 12, start=ser2[1])

medias_moviles(st2,9)
La tendencia de la serie de tiempo es CRECIENTE.

Ejemplo 3

ser3<-c(as.numeric(fecha[111], "%y"),as.numeric(fecha[111], "%m"))

st3<-ts(series[1000,-c(1:7)] %>% t() %>% na.omit(),frequency = 12, start=ser3[1])

medias_moviles(st3,6)
La tendencia de la serie de tiempo es DECRECIENTE.

Ejemplo 4

st3<-c(as.numeric(fecha[111], "%y"),as.numeric(fecha[111], "%m"))


medias_moviles(st3,6)
## Error in medias_moviles(st3, 6): El primer parámetro no es de clase Time-Series