En esta documentación se presenta una función que grafica una serie de tiempo con diferentes estilos de graficos.
grafica_serie <- function(se, tipo){
a <- paste(start(se)[1], start(se)[2], 1, sep="/") %>% ymd()
b <- paste(end(se)[1], end(se)[2], 1, sep="/") %>% ymd()
g <- data.frame(time=seq.Date(from = a, to= b, by="month"), valores= as.numeric(as.vector(se)))
if(tipo == 1){
ggplot(g) + geom_line(aes(time, valores)) + labs(x="Tiempo", y="Serie")+ ggtitle("Gráfica de la serie") + theme_solarized_2()
}else{
if(tipo==2){
ggplotly(ggplot(g) + geom_line(aes(time, valores)) +labs(x="Tiempo", y="Serie")+ ggtitle("Gráfica de la serie"))
}else{
if(tipo==3){
airforecast <- forecast(auto.arima(se), level = 95)
highchart(type = "stock") %>%
hc_add_series(airforecast, type = "line")
} else{
if(tipo==4){
plot(se, main ="Gráfica de la serie" )
}
}
}
}
}
A esta funcion se le debe dar datos de una serie de tiempo de tipo ts, es decir:
grafica_serie(serie, #plot)
donde
serie : Una serie de tiempo del tipo ts
plot : el número del tipo de plot que se desea graficar, como se describe a continuación.
1 : Para graficar un plot del estilo ggplot
2 : Para graficar un plot interactivo con plotly
3 : Para graficar un plot del estilo highcharter
4 : Para graficar un plot sencillo
media <- function(se, n){
mm <- c()
s <- as.numeric(se)
ptos <- n
for( i in 1:(length(s)/ptos)){
mm[i]<- mean(s[ptos*(i-1): (ptos* i)] %>% t() %>% as.vector(), na.rm=T)
}
q <- approxfun(x=seq(from=1, to = 144, by=ptos)[-12], y=mm)
mm1 <- q(1:144)
}
grafica_serie_medias <- function(se){
a <- paste(start(se)[1], start(se)[2], 1, sep="/") %>% ymd()
b <- paste(end(se)[1], end(se)[2], 1, sep="/") %>% ymd()
g <- data.frame(time=seq.Date(from = a, to= b, by="month"), valores= as.numeric(as.vector(se)), medias=media(se, 13))
ggplot(g) + labs(x="Tiempo", y="Serie")+ ggtitle("Tendencia de la serie") + theme_calc() + geom_line(aes(time,medias)) #+ geom_line(aes(time, valores))
}
## [1] "La tendencia es positiva"
## [1] "La tendencia es positiva"
La función nos calcula la media con un periodo de n puntos de una serie de tiempo tipo ts().
media( serie, n)
donde
se : es la serie
n : intervalo de puntos donde calcularemos la media
La función grafica_serie_medias(serie) nos grafica la tendencia de la serie con la paqueteria ggplot
donde se sigue siendo la serie tipo ts
Se realizará la descomposición de la serie en sus diferentes componentes.
Se presenta la siguiente función para encontrar la Estacionalidad de la serie:
estacionalidad <- function(se, mm2, n){
Sst <- se - mm2
mat <- t(matrix(data=Sst, nrow=n))
seas <- colMeans(mat, na.rm=T)
seas <- rep_len(seas, length.out=length(series))
seas
}
Función donde los parametros son
estacionalidad(se, trend, n)
donde
se : serie tipo ts()
trend : tendencia de la serie.
n : periodos d la serie en tiempo.
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] -116.98846 -116.98846 -116.98846 -116.98846 -116.98846 -116.98846
## [2,] -124.35647 -124.35647 -124.35647 -124.35647 -124.35647 -124.35647
## [3,] -89.92774 -89.92774 -89.92774 -89.92774 -89.92774 -89.92774
## [4,] -93.75073 -93.75073 -93.75073 -93.75073 -93.75073 -93.75073
## [5,] -89.73635 -89.73635 -89.73635 -89.73635 -89.73635 -89.73635
## [6,] -50.63377 -50.63377 -50.63377 -50.63377 -50.63377 -50.63377
## [7,] -11.73652 -11.73652 -11.73652 -11.73652 -11.73652 -11.73652
## [8,] -12.71264 -12.71264 -12.71264 -12.71264 -12.71264 -12.71264
## [9,] -62.00244 -62.00244 -62.00244 -62.00244 -62.00244 -62.00244
## [10,] -98.34695 -98.34695 -98.34695 -98.34695 -98.34695 -98.34695
## [11,] -132.70320 -132.70320 -132.70320 -132.70320 -132.70320 -132.70320
## [12,] -96.28712 -96.28712 -96.28712 -96.28712 -96.28712 -96.28712
## [,7] [,8] [,9] [,10] [,11] [,12]
## [1,] -116.98846 -116.98846 -116.98846 -116.98846 -116.98846 -116.98846
## [2,] -124.35647 -124.35647 -124.35647 -124.35647 -124.35647 -124.35647
## [3,] -89.92774 -89.92774 -89.92774 -89.92774 -89.92774 -89.92774
## [4,] -93.75073 -93.75073 -93.75073 -93.75073 -93.75073 -93.75073
## [5,] -89.73635 -89.73635 -89.73635 -89.73635 -89.73635 -89.73635
## [6,] -50.63377 -50.63377 -50.63377 -50.63377 -50.63377 -50.63377
## [7,] -11.73652 -11.73652 -11.73652 -11.73652 -11.73652 -11.73652
## [8,] -12.71264 -12.71264 -12.71264 -12.71264 -12.71264 -12.71264
## [9,] -62.00244 -62.00244 -62.00244 -62.00244 -62.00244 -62.00244
## [10,] -98.34695 -98.34695 -98.34695 -98.34695 -98.34695 -98.34695
## [11,] -132.70320 -132.70320 -132.70320 -132.70320 -132.70320 -132.70320
## [12,] -96.28712 -96.28712 -96.28712 -96.28712 -96.28712 -96.28712
Se generará una función donde obtengamos la aleatoriedad de una función:
aleatorio <- function(se, tipo,t_s, e_s){
if (tipo == "aditiva"){
r <- se - t_s -e_s
}
if (tipo =="multiplicativo"){
r<- serie_origi / (t_s* e_s)
}
return(r)
}
Dnde se debe identificar si el tipo de la serie es aditiva o multiplicativa para obtener el componente aleatorio de dicha serie.
aleatorio(se, tipo, t_s, e_s)
donde
se : serie tipo ts
tipo : Tipo de la serie puede ser “aditivo” o “multiplicativo”
t_s : tendencia de la serie
e_s : estacionalidad de la serie.
Se anexa la función que realiza las tres anteiores funciones en un solo comando para poder obtener los tres componentes anteriormente desarrollados de una serie de tiempo.
descomponer_serie <- function(se, n, tipo){
if(class != "ts") stop("Error")
t<- media(se, n)
e <- estacionalidad(se, t, n)
r <- aleatorio(se, tipo,t, e)
return(list(tendencia_serie=t, estacionalidad_serie=e, aleatoriedad_serie=r))
}