Documentación

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

Ejemplos

PRACTICA 3

Descomposición de una serie

Sacando la media y graficandola

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

PRACTICA 4

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))
}