II. Descomposición de Series Temporales (Enfoque Tradicional)

Se usará en este apartado como datos de ejemplo, la serie del Indice de Volumen de la Actividad Económica [IVAE], para el periodo 2009-2021[marzo].

library(readxl)
library(forecast)
# Carga los datos
serie.ivae <-
  read_excel("~/Econometria/IVAE/ivae.xlsx",
             col_types = c("skip", "numeric"),
             skip = 5)

# convertir en serie personal
serie.ivae.ts <- ts(data = serie.ivae,
                    start = c(2009, 1),
                    frequency = 12)

# Genera el grafico de la serie temporal
serie.ivae.ts %>% 
  autoplot(main = "IVAE, El Salvador 2009-2021[marzo]",
                           xlab = "Años/Meses",
                           ylab = "Indice")

2.1. Modelo Aditivo.

Modelo Aditivo: La serie temporal es el resultado de la suma de los componentes teóricos. Yt=Tt+Ct+St+It

2.1.1. Componente de Tendencia Tt [Componente TCt]

Se procede a estimar el componente de Tendencia-Ciclo a través de medias móviles:

ma2_12 <- ma(serie.ivae.ts, 12, centre = TRUE)
autoplot(serie.ivae.ts,main = "IVAE, El Salvador 2009-2021[marzo]",
           xlab = "Años/Meses",
           ylab = "Indice")+
  autolayer(ma2_12,series = "Tt")
## Warning: Removed 12 row(s) containing missing values (geom_path).

2.1.2. Cálculo de los Factores Estacionales [Componente St]

library(magrittr)
Yt <- serie.ivae.ts #Serie original
Tt <- ma2_12 #Media móvil centrada (2x12-MA) como componente de Tendencia Ciclo
SI <- Yt - Tt #Diferencia que contiene componentes Estacional e Irregular

St <- tapply(SI, cycle(SI), mean, na.rm = TRUE) #Promediando los resultados de cada mes
#Los factores estacionales deben sumar "0" en el modelo aditivo
St <- St - sum(St) / 12 
#Generar la serie de factores para cada valor de la serie original
St <-
  rep(St, len = length(Yt)) %>% ts(start = c(2009, 1), frequency = 12) 
autoplot(St,
         main = "Factores Estacionales",
         xlab = "Años/Meses",
         ylab = "Factor Estacional")

2.1.3. Cálculo del Componente Irregular It.

It=Yt−Tt−St

It<-Yt-Tt-St
autoplot(It,
         main = "Componente Irregular",
         xlab = "Años/Meses",
         ylab = "It")

2.1.4. Descomposición Aditiva (usando la libreria stats):

descomposicion_aditiva<-decompose(serie.ivae.ts,type = "additive")
autoplot(descomposicion_aditiva,main="Descomposición Aditiva",xlab="Años/Meses")

2.1.5. Descomposición Aditiva usando libreria feasts

library(tsibble)
## 
## Attaching package: 'tsibble'
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, union
library(feasts)
## Loading required package: fabletools
## 
## Attaching package: 'fabletools'
## The following objects are masked from 'package:forecast':
## 
##     accuracy, forecast
library(ggplot2)
Yt %>% as_tsibble() %>%
  model(
    classical_decomposition(value, type = "additive")
  ) %>%
  components() %>%
  autoplot() +
  labs(title = "Descomposición Clásica Aditiva, IVAE")+xlab("Años/Meses")
## Warning: Removed 6 row(s) containing missing values (geom_path).

2.2. Modelo Multiplicativo.

Modelo Multiplicativo: La serie temporal es el resultado de la amplificación/atenuación de la tendencia a causa del resto de los componentes.

Yt=Tt⋅Ct⋅St⋅It

Un modelo Multiplicativo puede expresarse como un un modelo aditivo, a través de una transformación logaritmica, (las minusculas indican el logaritmo natural de la variable/componente): yt=tt+ct+st+it

2.2.1. Componente Tendencia Ciclo [Tt=TCt]

Tt<- ma(serie.ivae.ts, 12, centre = TRUE)
autoplot(Tt,main = "Componente Tendencia [Ciclo]", xlab = "Años/Meses",ylab = "Tt")

2.2.2 Cálculo de Factores Estacionales [St]

SI<-Yt/Tt #Serie sin tendencia.
St <- tapply(SI, cycle(SI), mean, na.rm = TRUE) #Promediando los resultados de cada mes
#Los factores estacionales deben promediar "1" en el modelo multiplicativo
St <- St*12/sum(St) 
#Generar la serie de factores para cada valor de la serie original
St <-
  rep(St, len = length(Yt)) %>% ts(start = c(2009, 1), frequency = 12) 
autoplot(St,
         main = "Factores Estacionales",
         xlab = "Años/Meses",
         ylab = "Factor Estacional") 

2.2.3.Cálculo del Componente Irregular [It]

It=YtTt⋅St

It<-Yt/(Tt*St)
autoplot(It,
         main = "Componente Irregular",
         xlab = "Años/Meses",
         ylab = "It")

2.2.4 Descomposición Multiplicativa (usando la libreria stats):

descomposicion_multiplicatica<-decompose(serie.ivae.ts,type = "multiplicative")
autoplot(descomposicion_multiplicatica,main="Descomposición Multiplicativa",xlab="Años/Meses")

2.2.5 Descomposición Multiplicativa usando libreria feasts

library(tsibble)
library(feasts)
library(ggplot2)
Yt %>% as_tsibble() %>%
  model(classical_decomposition(value, type = "multiplicative")) %>%
  components() %>%
  autoplot() +
  labs(title = "Descomposición Clásica Multiplicativa, IVAE") + xlab("Años/Meses")
## Warning: Removed 6 row(s) containing missing values (geom_path).

2.3. Descomposición usando la libreria TSstudio

library(TSstudio)
ts_decompose(Yt, type = "additive", showline = TRUE)
ts_seasonal(Yt,type = "box",title = "Análisis de Valores Estacionales")

III. Pronóstico de series temporales, enfoque deterministico (clásico)

3.1. Pronóstico Modelo de Holt Winters

Si la serie resulta tener un patrón estacional, está técnica permite realizar predicciones extrapolando los componentes de la serie temporal observada.

3.1.1 Usando Stats y forecast

library(forecast)

#Estimar el modelo
ModeloHW<-HoltWinters(x = Yt,
                      seasonal = "multiplicative",
                      optim.start = c(0.9,0.9,0.9))
ModeloHW
## Holt-Winters exponential smoothing with trend and multiplicative seasonal component.
## 
## Call:
## HoltWinters(x = Yt, seasonal = "multiplicative", optim.start = c(0.9,     0.9, 0.9))
## 
## Smoothing parameters:
##  alpha: 0.8408163
##  beta : 0
##  gamma: 1
## 
## Coefficients:
##            [,1]
## a   117.0799442
## b     0.1600306
## s1    0.9502255
## s2    1.0233274
## s3    1.0518154
## s4    0.9900276
## s5    1.0007537
## s6    0.9807088
## s7    0.9600206
## s8    1.0149628
## s9    1.0915423
## s10   0.9796752
## s11   0.9584676
## s12   0.9994880
#Generar el pronóstico:
PronosticosHW<-forecast(object = ModeloHW,h = 12,level = c(0.95))
PronosticosHW
##          Point Forecast     Lo 95    Hi 95
## Apr 2021       111.4044 105.94952 116.8593
## May 2021       120.1386 112.77972 127.4976
## Jun 2021       123.6515 114.83356 132.4694
## Jul 2021       116.5461 107.01096 126.0813
## Aug 2021       117.9689 107.30373 128.6341
## Sep 2021       115.7630 104.33417 127.1918
## Oct 2021       113.4746 101.36814 125.5810
## Nov 2021       120.1312 106.57272 133.6897
## Dec 2021       129.3698 114.12877 144.6109
## Jan 2022       116.2681 101.78191 130.7543
## Feb 2022       113.9046  98.99575 128.8134
## Mar 2022       118.9394  81.61739 156.2614
#Gráfico de la serie original y del pronóstico.
PronosticosHW %>% autoplot()

3.1.12 Usando Forecast (Aproximación por Espacios de los Estados ETS )

library(forecast)

#Generar el pronóstico:
PronosticosHW2<-hw(y = Yt,
                   h = 12,
                   level = c(0.95),
                   seasonal = "multiplicative",
                   initial = "optimal")
PronosticosHW2
##          Point Forecast     Lo 95    Hi 95
## Apr 2021       107.4928  99.59377 115.3918
## May 2021       115.3370 106.85846 123.8155
## Jun 2021       115.6946 107.18632 124.2029
## Jul 2021       109.6301 101.56399 117.6962
## Aug 2021       112.2047 103.94477 120.4646
## Sep 2021       110.2284 102.10923 118.3476
## Oct 2021       107.9393  99.98348 115.8951
## Nov 2021       114.4306 105.99022 122.8710
## Dec 2021       122.6459 113.59234 131.6994
## Jan 2022       108.5830 100.56060 116.6054
## Feb 2022       107.1239  99.20182 115.0460
## Mar 2022       113.1678 104.79016 121.5455
#Gráfico de la serie original y del pronóstico.
PronosticosHW2 %>% autoplot()