Descomposición de series de tiempo

-Las series de tiempo tiene muchas variables, y en estos casos nos enseñan como es mejor poder descomponerlos.Exiten 3 componentes para estas series:tendencia, estacionalidad y ciclos.

El siguiente es un ejemplo de descomposición:

Yt= St+Tt+Rt, en este modelo tenemos: los datos=el componente estacional+el componente tendencia-ciclo+el componente restante. Si queremos una composicion multiplicativa, hay que multiplicar todas las variables en vez de sumarlas.

¿Como entenderlo?

-Los datos originales en una grafica se van a ver muy variados y caotico, cuando se obtiene el componente tendecia-ciclo (el cual es Tt), la grafica se va a ver con curvas más delicadas pero mostrando la tendencia. Esto se logra con la descomposicion aditiva, podemos ayudarnos viendo un Descompose para ver los 3 componentes por aparte. Lo diferente en este descompose es que Las barras grises a la derecha de cada panel muestran las escalas relativas de los componentes (dependen de las escalas).

Primer Método, Moving average smoothing (Suavizar la media móvil)

-Aqui se eliminan parte de la aleatoriedad en los datos, dejando un componente suave de ciclo de tendencia, se le denomina por su nombre -MA (m). -El siguiente es un ejemplo del caso de las ventas anuales de electricidad en Australia de 1989 a 2008.

autoplot(elecsales) + xlab("Year") + ylab("GWh") +
  ggtitle("Annual electricity sales: South Australia")

#Aqui se ve una tendencia al alza

#componente suave de ciclo de tendencia
ma(elecsales, 5)
## Time Series:
## Start = 1989 
## End = 2008 
## Frequency = 1 
##  [1]       NA       NA 2381.530 2424.556 2463.758 2552.598 2627.700 2750.622
##  [9] 2858.348 3014.704 3077.300 3144.520 3188.700 3202.320 3216.940 3307.296
## [17] 3398.754 3485.434       NA       NA
#Para ver  la estimación de la tendencia-ciclo, la comparacmos junto con los datos originales
autoplot(elecsales, series="Data") +
  autolayer(ma(elecsales,5), series="5-MA") +
  xlab("Year") + ylab("GWh") +
  ggtitle("Annual electricity sales: South Australia") +
  scale_colour_manual(values=c("Data"="grey50","5-MA"="red"),
                      breaks=c("Data","5-MA"))
## Warning: Removed 4 row(s) containing missing values (geom_path).

#Con el componente suave MA se puede ver la linea roja que la tendencia ahora se ve menos caotica. #este componente suave depende del orden de la media móvil. mientras mas grande mas suave, ahorita se esta usando de 5ma. El de abajo es un ejemplo con 7ma.
autoplot(elecsales, series="Data") +
  autolayer(ma(elecsales,7), series="5-MA") +
  xlab("Year") + ylab("GWh") +
  ggtitle("Annual electricity sales: South Australia") +
  scale_colour_manual(values=c("Data"="grey50","5-MA"="red"),
                      breaks=c("Data","5-MA"))
## Warning: Removed 6 row(s) containing missing values (geom_path).

Aplicnado Moving average a Moving average, media móvil centrada de orden X

-Se puede agregar un Moving average y luego volver a aplicarlo, para que el promedio móvil de orden par sea simétrico. Esto se hace por medio de que los 2 numeros sean par o ambos sean impar.

#Aqui se aplicara un moving de 4 y luego uno de 2, ahora esto se llama media móvil centrada de orden 4. la ecuacion quedaria 2*4-MA
beer2 <- window(ausbeer,start=1992)
ma4 <- ma(beer2, order=4, centre=FALSE)
ma2x4 <- ma(beer2, order=4, centre=TRUE)

Estimación de la tendenciaciclo con datos estacionales

-El uso más común de los promedios móviles centrados es para estimar el ciclo de tendencia a partir de datos estacionales. esto por que si no se usan, el problema es que las estimaciones del ciclo de tendencia se veran caoticas por la estacionalidad de los datos. -Ejemplo:

autoplot(elecequip, series="Data") +
  autolayer(ma(elecequip, 12), series="12-MA") +
  xlab("Year") + ylab("New orders index") +
  ggtitle("Electrical equipment manufacturing (Euro area)") +
  scale_colour_manual(values=c("Data"="grey","12-MA"="red"),
                      breaks=c("Data","12-MA"))
## Warning: Removed 12 row(s) containing missing values (geom_path).

Promedios móviles ponderados

-Las combinaciones de promedios móviles dan como resultado los promedios móviles ponderados. Estan dan una estimacion mas suave a la grafica. -en este caso un Moving average de 2*4 es igual a un 5ma

Descomposición clásica:

-es el inicio para una descomposicion de series temporales, hay 2 tipos: descomposición aditiva y una descomposición multiplicativa. Aqui suponemos que el componente estacional es constante de un año a otro.

Descomposición clásica (Descomposición aditiva)

-si el numero es par se usa: 2*m-MA, si el numero es impar m-MA. -Calcular la serie sin tendencia -Para estimar el componente estacional de cada uno, se promedian los valores sin tendencia. -El componente restante se calcula restando los componentes estacionales y de ciclo de tendencia estimados: quedaria Rt=yt-Tt-St

Descomposición clásica (Descomposición multiplicativa )

-si el numero es par se usa: 2*m-MA, si el numero es impar m-MA. -Calcular la serie sin tendencia. -Para estimar el componente estacional de cada uno, se promedian los valores sin tendencia. -El componente restante se calcula dividiendo el componente estacional y de ciclo de tendencia estimado, quedaria asi:Rt=yt/(TtSt)

elecequip %>% decompose(type="multiplicative") %>%
  autoplot() + xlab("Year") +
  ggtitle("Classical multiplicative decomposition
    of electrical equipment index")

Descomposición X11

-Para descomponer datos trimestrales y mensuales se usa el método X11 -Este método se basa en la descomposición clásica, pero incluye muchos pasos y características adicionales para superar los inconvenientes de la descomposición clásica que se discutieron en la sección anterior. -Aqui se utiliza la libraria seasonal.

elecequip %>% seas(x11="") -> fit
autoplot(fit) +
  ggtitle("X11 decomposition of electrical equipment index")

#si comparamos este descompose con el anterior, El metodo X11 muestra la caída repentina en los datos a principios de 2009, los otros no.


autoplot(elecequip, series="Data") +
  autolayer(trendcycle(fit), series="Trend") +
  autolayer(seasadj(fit), series="Seasonally Adjusted") +
  xlab("Year") + ylab("New orders index") +
  ggtitle("Electrical equipment manufacturing (Euro area)") +
  scale_colour_manual(values=c("gray","blue","red"),
             breaks=c("Data","Seasonally Adjusted","Trend"))

#esta grafica de arriba muestra el componente tendencia-ciclo y los datos ajustados estacionalmente, junto con los datos originales.
#Puede ser útil utilizar parcelas estacionales y parcelas de subseries estacionales del componente estacional. Estos nos ayudan a visualizar la variación en el componente estacional a lo largo del tiempo.

fit %>% seasonal() %>% ggsubseriesplot() + ylab("Seasonal")

#Gráfico de subserie estacional del componente estacional de la descomposición X11

Descomposición SEATS (Seasonal Extraction in ARIMA Time Series)

-El procedimiento funciona sólo con datos trimestrales y mensuales. Por lo tanto, la estacionalidad de otros tipos, como los datos diarios, los datos por hora o los datos semanales, requieren un enfoque alternativo.

library(seasonal)
elecequip %>% seas() %>%
autoplot() +
  ggtitle("SEATS decomposition of electrical equipment index")

Descomposición STL (Seasonal and Trend decomposition using Loess)

-Sus ventajas son que se pueden utilizar para cualquier tipo de estacionalidad, no solo datos mensuales y trimestrales. -Se permite que el componente estacional cambie con el tiempo, y el usuario puede controlar la tasa de cambio. -La suavidad del ciclo de tendencia también puede ser controlada por el usuario. -Puede ser resistente a los valores atípicos

elecequip %>%
  stl(t.window=13, s.window="periodic", robust=TRUE) %>%
  autoplot()

Pronóstico con descomposición

-la descomposicion se puede usar para hacer pronosticos. -Una descomposición aditiva se escribe: yt=St+At. y una multiplicativa se escribe: yt=StAt.

fit <- stl(elecequip, t.window=13, s.window="periodic",
  robust=TRUE)
fit %>% seasadj() %>% naive() %>%
  autoplot() + ylab("New orders index") +
  ggtitle("Naive forecasts of seasonally adjusted data")

#Ahora le añadimos para que se una grafica con pronostico
fit %>% forecast(method="naive") %>%
  autoplot() + ylab("New orders index")

#Los intervalos de predicción aqui se construyen de la misma manera que los pronósticos puntuales. Es decir, los límites superior e inferior de los intervalos de predicción de los datos ajustados estacionalmente se “reestacionalizan” agregando los pronósticos del componente estacional. En este cálculo se ha ignorado la incertidumbre en los pronósticos del componente estacional.

fcast <- stlf(elecequip, method='naive')