Laboratorio 10

Capitulo 6: Time Series Decomposition

dentro de una serie de tiempo podemos encontrar una gran variedad de patrones y esto nos ayuda para poder diviri una serie temporal en varios compontentes, tambien tenemos que tener en cuenta de que la serie de tiempo consta de tres componentes los cuales son:

6.1 Componentes de serie de tiempo

additive decomposition

Yt = St + Tt +Rt

yt = Datos

St = componente tendencia-ciclo

Rt = componenten restante

si la variacion estacional o la variacion del ciclo de tendencia es proporcional al nivel de la serie de tiempo se debe de usar una descomposicion multiplicativa

yt = St × Tt × Rt

6.2 Moving Average (medias moviles)

el primer paso en una descomposicion clasica es usar un metodo de Moving Average para estimar el ciclo de la tendencia

Suavizado del moving Average

library(fpp2)
## Warning in register(): Can't find generic `scale_type` in package ggplot2 to
## register S3 method.
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## -- Attaching packages ---------------------------------------------- fpp2 2.4 --
## v ggplot2   3.3.5     v fma       2.4  
## v forecast  8.16      v expsmooth 2.3
## 
library(seasonal)

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

para ver la estimacion de tendencia ciclo, junto con los dato de la figura 6.5 mostrada en el documento utilizamos el codigo:

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

en donde podemos observar que el trend-cycle es mas suave que los datos orginales dados en el problema

moving averages from moving averages

la razon para hacer esto es para hacer un moving average de orden par que sea simetrico, en donde mostraremos en el siguiente ejemplo un moving average de orden 4 y luego otro de orden 2

beer2 <- window(ausbeer,start=1992)
ma4 <- ma(beer2, order=4, centre=FALSE)
ma2x4 <- ma(beer2, order=4, centre=TRUE)

cuando un Moving Average de orden 2 sigue un Moving average como el 4 se le denomina “media movil centrada de orden 4”

Estimating the trend-cycle with seasonal data

su uso mas comun es para estimar el ciclo de tendencia a partir de datos estacionales como un Moving Average de 2 x 4. otras opciones generalmente daran como resultado que las estimaciones del ciclo de tendencia se vean contaminadas 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).

6.3 Classical decomposition

es un procedimiento que es el punto de partida para la mayoria de los demas metodos de descomposicion de series de tiempo, para ello hay dos formas de descomposicion clasica:

la descompisicion aditiva

la descomposicion multiplicativa

descomposicion aditiva PASO 1:

si m es un numero par calcule un componente trend-cycle usando un 2*m-ma. si m es un numero impar calcule el trend-cycle usando m-MA

PASO 2:

Calcular la serie sin tendencia yt - Tt

paso 3:

para estimar el componente estacional se debe promediar los valores sin tendencia para la temporada. estos valores luego se ajustan para garantizar que sumen cero.

paso 4:

el componente restante se calcula con

Rt = yt - Tt - St

descomposicion multiplicativa

PASO 1:

si m es un numero par calcule un componente trend-cycle usando un 2*m-ma. si m es un numero impar calcule el trend-cycle usando m-MA

paso 2:

calcular la serie sin tendencia yt/Tt

paso 3:

para estimar el componente estacional se debe promediar los valores sin tendencia para la temporada. estos valores luego se ajustan para garantizar que sumen a m.

paso 4:

el componente restante se calcula con

Rt = yt / (Tt St)

EJEMPLO

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

6.4 X11 decomposition

se utilizar popularmente para desocmponer datos trimestrales y mensuales, el cual se basa en la descomposicion clasica, pero con caracteristicas y pasos adicionales

el metodo X11 esta disponible en R utilizando el codigo seas() del paquete seasonal

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

un ejemplo podria ser el que se muestra a continuacion con componententes trend-cycle y los datos ajustados estacionalmente, junto con los dato originales.

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

en la siguiente figura se muestra una subserie estacional

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

6.5 SEATS decomposition

SEATS significa “extraccion estacional en series temporales ARIMA”

DEMOSTRACION UTILIZANDO EL PAQUETE SEASONAL

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

6.6 STL Decomposition

STL es un metodo versatil para descomponer series de tiempo. STL es un acronimmo de “Seasonal and Trend decomposition using Loess”, mientras Loess es un metodo para estimar relaciones no lineales.

ventajas de STL sobre los metodos de descomposicion clasicos, SEATS y X11:

  • A diferencia de SEATS y X11, STL manejará cualquier tipo de estacionalidad

  • 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 valores atípicos (es decir, el usuario puede especificar una descomposición robusta), de modo que las observaciones inusuales ocasionales no afectarán las estimaciones de los componentes estacionales y de tendencia-ciclo. Sin embargo, afectarán al componente restante.

desventajas:

no maneja automaticamente la variacion del dia de negociacion o del calendario.

EJEMPLO DE CODIGO:

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

6.8 Forecasting with decomposition

Si bien la descomposición es principalmente útil para estudiar datos de series de tiempo y explorar cambios históricos a lo largo del tiempo, también se puede usar en pronósticos.

Para pronosticar una serie de tiempo descompuesta, pronosticamos el componente estacional, ^St, y el componente desestacionalizado ^UNt ,por separado.

para pronosticar el componente desestacionalizado, se puede utilizar cualquier método de pronóstico no estacional. Por ejemplo, se puede utilizar un modelo de paseo aleatorio con deriva, o el método de Holt (discutido en el próximo capítulo), o un modelo ARIMA no estacional

EJEMPLO:

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

RESULTADOS DEL PRONOSTICO DE LOS DATOS ORIGINALES:

fit %>% forecast(method="naive") %>%
  autoplot() + ylab("New orders index")

Un método abreviado es utilizar la stlf()función. El siguiente código descompondrá la serie temporal mediante STL, pronosticará la serie ajustada estacionalmente y devolverá los pronósticos reestacionados.

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