Funcion
Mi funcion (f_mm) extrae y describe la tendencia de una serie de tiempo contenida en un objeto de clase ts, recibiendo para ello dos parametros, series (las serie a utilizar) y n (numero de pasos a realizar),
f_mm<-function(serie,n) {
if(class(serie)=="ts"){
serie<-as.numeric(serie)
media<-MA(serie,n,pad=NULL)
mm<-na.omit(media)
for (i in 1:floor(length(serie)/n)) {
mm[i]<-mean(serie[(n*(i-1)):(n*i)] %>% t() %>% as.vector(), na.rm = T)
}
if(mm[1]<mm[length(mm)]){tendencia <-"La tendencia de la serie es creciente"
} else if(mm[1]>mm[length(mm)]){tendencia <- "La tendencia de la serie es decreciente"
}else{ tendencia<-"La tendencias de la serie es constante"}
tiempo<-c(1:length(serie))
tiempo_m<-c(1:length(media))
grafica<-ggplot()+geom_line(aes(x=tiempo, y=serie), color="blue", size=1.2)+geom_smooth(aes(x=tiempo_m, y=media), color="green")+
geom_point(aes(x=tiempo, y=serie), color="purple")+ labs(x="Tiempo", y="Serie de tiempo", title = "Serie de Tiempo con Medias Moviles", subtitle = tendencia)+theme_bw()+theme(plot.title = element_text(hjust = 0.5))+theme(plot.subtitle = element_text(hjust = 0.5))
return(list(grafica, media))
}else{
stop('class(s1) no es de tipo ts')
}
}
Ejemplos
Aqui daremos explicación y ejemplos al estilo de la documentación de funciones de R. Se mostrarán tres ejemplos con 3 series de tiempos distintas (airmiles, AirPassengers y MC1001.xls) con graficas tipo ggplot.
airmiles
En nuestro primer ejemplo usamos los datos de los ingresos por millas recorridas por las aerolíneas comerciales en los Estados Unidos para cada año desde 1937 hasta 1960.
AirPassanger
Aqui se usan los datos de la aerolínea Box & Jenkins totales mensuales de pasajeros de aerolíneas internacionales, 1949 a 1960.
MC1001.xls.
Para el ultimo ejemplo usaremos la base del archivo MC1001.xls.
setwd("C:/Users/HP/Desktop")
series<-read_excel("MC1001.xls")
fecha<-series$`Starting date`
e3<-ts(na.omit(t(series[101,-c(1:7)])), frequency=12,start=c(as.numeric(as.character(fecha[110], "%Y")), as.numeric(as.character(fecha[110], "%m"))))
f_mm(e3,4)