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:
ciclo de tendencia
componente estacional
componente que contiene cualquier otra cosa dentro de la serie de tiempo
additive decomposition
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
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
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”
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).
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")
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")
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")
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()
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')