FUNCIÓN tendencia
A continuación se presenta una función que recibe como parámetro un objeto de la clase ts (time series) y el número de pasos que desea el usuario para calcular las medias móviles. La función regresa un gráfico de la serie de tiempo que fue recibida como parámetro, las médias móviles y un subtítulo que especifica la tendencia que sigue la serie (creciente, decreciente o constante).
Parámetros
s: serie de tiempo. Objeto de la clase ts. La función regresa error si el objeto no es de la clase mencionada.
pasos: número de pasos que desea el usuario para el cálculo de las medias móviles.
tendencia<-function(s,periodo) {
if(class(s)=="ts"){
s<-as.numeric(s)
mean_number<-MA(s,periodo,pad=NULL)
mm<-na.omit(mean_number)
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(s))
Tiempo1<-c(1:length(mean_number))
g1<-ggplot()+geom_line(aes(x=Tiempo, y=s), color="sienna2", size=1.2)+geom_smooth(aes(x=Tiempo1, y=mean_number), color="orangered1")+
geom_point(aes(x=Tiempo, y=s), color="sienna4")+ 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(g1, mean_number))
}else{
stop('class(s1) is not ts')
}
}Ejemplos
A continuación se presentan varios ejemplos que permiten poner a prueba la función declarada anteriormente.
Ejemplo 1
tendencia(AirPassengers,4)## [[1]]
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
##
## [[2]]
## [1] 28.00 57.50 90.50 122.75 125.00 129.25 133.25 138.00 141.75 137.75
## [11] 126.75 119.25 114.00 115.75 125.00 129.25 131.75 137.50 144.75 153.50
## [21] 161.75 157.75 143.75 136.25 133.00 137.25 153.25 159.00 165.75 172.75
## [31] 178.00 187.00 190.00 186.00 172.75 164.50 161.25 165.75 177.50 181.25
## [41] 184.25 193.75 203.00 218.25 224.75 218.00 203.50 191.50 188.25 189.50
## [51] 205.50 215.75 224.00 235.75 242.75 252.00 254.00 246.00 225.00 207.25
## [61] 199.00 193.25 207.00 213.50 221.00 240.00 256.75 273.25 279.50 270.75
## [71] 246.00 230.00 225.75 226.75 242.75 252.75 259.75 280.25 304.50 324.00
## [81] 334.50 324.25 292.50 275.25 268.25 269.00 289.00 297.75 306.25 330.50
## [91] 354.50 377.50 386.75 369.75 334.25 309.50 299.50 298.25 319.50 330.00
## [101] 340.00 370.25 397.50 427.25 439.50 420.75 380.75 348.00 332.00 324.75
## [111] 339.00 342.00 347.75 377.00 409.25 448.50 458.75 439.75 394.50 352.50
## [121] 341.50 337.25 361.25 376.00 391.00 423.50 459.00 499.75 510.50 494.25
## [131] 447.75 409.25 397.75 393.75 408.00 422.00 435.75 471.75 522.50 558.75
## [141] 567.75 549.25 491.25 447.75
Ejemplo 2
s2<-ts(na.omit(t(series[19,-c(1:7)])), frequency=12,start=c(as.numeric(format(fechas[1], "%Y")),
as.numeric(format(fechas[1], "%m"))))
tendencia(s2,12)## [[1]]
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
##
## [[2]]
## [1] 182.4408 418.3275 606.3292 831.1658 1112.1933 1450.9283 1770.0183
## [8] 2107.2367 2451.8942 2859.8208 3296.8542 3753.4608 4018.1650 4256.5800
## [15] 4540.0633 4812.7850 5060.6617 5233.6408 5485.1283 5753.5892 5980.3042
## [22] 6179.7167 6507.4000 6910.3433 7336.2483 7830.8467 8306.3033
Ejemplo 3
s3<-ts(na.omit(t(series[101,-c(1:7)])), frequency=12,start=c(as.numeric(format(fechas[110], "%Y")),
as.numeric(format(fechas[110], "%m"))))
tendencia(s3,12)## [[1]]
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
##
## [[2]]
## [1] 7.166667 14.333333 20.250000 25.750000 32.416667 39.666667
## [7] 48.000000 56.416667 65.166667 73.666667 82.666667 92.583333
## [13] 95.250000 97.500000 100.333333 103.583333 105.500000 106.500000
## [19] 106.333333 106.333333 105.916667 106.333333 104.666667 100.583333
## [25] 96.000000 91.500000 86.916667 82.666667 81.000000 80.250000
## [31] 80.083333 80.750000 82.250000 83.833333 87.250000 92.500000
## [37] 98.916667 106.333333 115.083333 124.000000