El Índice Mensual de Actividad Económica (IMAE), conocido también como IVAE, es el indicador que utiliza el Banco Central de Reserva de El Salvador para aproximar mensualmente el comportamiento del Producto Interno Bruto. La serie utilizada en este trabajo corresponde a los datos no ajustados estacionalmente ni por calendario, publicados por la Secretaría Ejecutiva del Consejo Monetario Centroamericano (SECMCA), para el período enero de 2018 a marzo de 2026 (99 observaciones mensuales).
El objetivo de este informe es aplicar el método clásico de descomposición mediante medias móviles para separar la serie en sus cuatro componentes teóricos:
Se aplican los dos modelos clásicos:
\[\text{Modelo Aditivo:} \quad Y_t = T_t + S_t + I_t\] \[\text{Modelo Multiplicativo:} \quad Y_t = T_t \times S_t \times I_t\]
imae <- c(
105.1,102.5,108.4,108,112.5,113.6,108.8,111.9,107.5,105.9,112.2,120,
107.8,106.1,112.6,109.7,114.7,114.7,111.1,113.2,111.8,108.8,116.8,122.7,
109.1,109.6,103.9,87.4,89.8,96.2,97.9,103.8,107.6,105.5,111.3,120.5,
107.2,107.6,113.4,110.7,115.8,117.6,112.2,115.2,114.7,111.8,118.7,125.8,
111.3,111.7,118.9,113.2,122.2,120,116.2,120.8,117.4,116,121.9,129.8,
115.2,113.5,122.5,116.3,127,126.4,120.4,123.2,118,117,127.8,133.5,
121.5,119.6,119.8,122.5,129.6,123,123.5,124.6,118.2,123.9,128.6,137.3,
123.2,120.4,126.9,124.6,133.7,128.9,127.9,128.2,126,127.1,134.1,144.4,
128.5,125.3,133
)
# Serie de tiempo mensual, inicia en enero 2018
y <- ts(imae, start = c(2018, 1), frequency = 12)
fechas <- seq(as.Date("2018-01-01"), by = "month", length.out = length(imae))
cat("Número de observaciones:", length(y), "\n")
## Número de observaciones: 99
cat("Periodo:", format(min(fechas), "%b-%Y"), "a", format(max(fechas), "%b-%Y"), "\n")
## Periodo: Jan-2018 a Mar-2026
plot(y, main = "IMAE El Salvador (Niveles del índice, sin ajuste estacional)",
ylab = "Índice", xlab = "Año", col = "steelblue4", lwd = 2)
grid()
Se observa con claridad la fuerte caída del índice durante el segundo trimestre de 2020 (pandemia de COVID-19) y una recuperación sostenida posterior, además de un patrón estacional recurrente con repuntes hacia fin de año.
Dado que la serie es mensual (periodo estacional = 12, un número par), la media móvil simple de orden 12 no queda centrada en un mes real, sino entre dos meses. Para corregir esto se aplica el método clásico de la media móvil centrada 2x12, que promedia dos medias móviles consecutivas de orden 12. Esto equivale a usar los siguientes pesos sobre 13 observaciones consecutivas:
\[T_t = \frac{0.5\,y_{t-6} + y_{t-5} + \dots + y_{t+5} + 0.5\,y_{t+6}}{12}\]
w <- c(0.5, rep(1, 11), 0.5) / 12
T_t <- stats::filter(y, filter = w, method = "convo", sides = 2)
plot(y, col = "grey60", lwd = 1, main = "Serie original y Tendencia-Ciclo (MA 2x12)",
ylab = "Índice", xlab = "Año")
lines(T_t, col = "firebrick", lwd = 2.5)
legend("topleft", legend = c("IMAE observado", "Tendencia-Ciclo"),
col = c("grey60", "firebrick"), lwd = c(1, 2.5), bty = "n")
grid()
Por la naturaleza de la media móvil centrada, se pierden 6 observaciones al inicio y 6 al final de la serie (no hay suficientes datos vecinos para centrar el promedio).
En el modelo aditivo se obtiene primero la serie “destendenciada” restando la tendencia: \(Y_t - T_t = S_t + I_t\). Luego se promedia esta diferencia por cada mes del año (enero con enero, febrero con febrero, etc.) para obtener un índice estacional bruto, y finalmente se ajusta para que la suma de los 12 índices sea igual a cero (condición del modelo aditivo).
detrend_add <- y - T_t
S_raw_add <- tapply(detrend_add, cycle(y), mean, na.rm = TRUE)
S_add <- S_raw_add - mean(S_raw_add)
S_add_tabla <- data.frame(Mes = month.abb, `Índice estacional` = round(S_add, 3))
knitr::kable(S_add_tabla, row.names = FALSE,
caption = "Índices estacionales - Modelo aditivo")
| Mes | Índice.estacional |
|---|---|
| Jan | -2.631 |
| Feb | -3.814 |
| Mar | 0.194 |
| Apr | -4.843 |
| May | 1.815 |
| Jun | 0.682 |
| Jul | -1.958 |
| Aug | 0.664 |
| Sep | -2.045 |
| Oct | -2.899 |
| Nov | 3.791 |
| Dec | 11.045 |
cat("Comprobación: la suma de los índices estacionales es", round(sum(S_add), 6),
"(debe ser ≈ 0)\n")
## Comprobación: la suma de los índices estacionales es 0 (debe ser ≈ 0)
S_add_ts <- ts(rep(S_add, length.out = length(y)), start = start(y), frequency = 12)
I_add <- y - T_t - S_add_ts
tabla_add <- data.frame(
Fecha = format(fechas, "%b-%Y"),
Observado = round(as.numeric(y), 1),
Tendencia = round(as.numeric(T_t), 2),
Estacional = round(as.numeric(S_add_ts), 2),
Irregular = round(as.numeric(I_add), 2)
)
knitr::kable(tabla_add, row.names = FALSE,
caption = "Descomposición aditiva mes a mes (primeras y últimas filas)")
| Fecha | Observado | Tendencia | Estacional | Irregular |
|---|---|---|---|---|
| Jan-2018 | 105.1 | NA | -2.63 | NA |
| Feb-2018 | 102.5 | NA | -3.81 | NA |
| Mar-2018 | 108.4 | NA | 0.19 | NA |
| Apr-2018 | 108.0 | NA | -4.84 | NA |
| May-2018 | 112.5 | NA | 1.81 | NA |
| Jun-2018 | 113.6 | NA | 0.68 | NA |
| Jul-2018 | 108.8 | 109.81 | -1.96 | 0.95 |
| Aug-2018 | 111.9 | 110.07 | 0.66 | 1.16 |
| Sep-2018 | 107.5 | 110.40 | -2.05 | -0.85 |
| Oct-2018 | 105.9 | 110.65 | -2.90 | -1.85 |
| Nov-2018 | 112.2 | 110.81 | 3.79 | -2.40 |
| Dec-2018 | 120.0 | 110.95 | 11.04 | -1.99 |
| Jan-2019 | 107.8 | 111.09 | -2.63 | -0.66 |
| Feb-2019 | 106.1 | 111.24 | -3.81 | -1.32 |
| Mar-2019 | 112.6 | 111.47 | 0.19 | 0.94 |
| Apr-2019 | 109.7 | 111.77 | -4.84 | 2.77 |
| May-2019 | 114.7 | 112.08 | 1.81 | 0.80 |
| Jun-2019 | 114.7 | 112.39 | 0.68 | 1.63 |
| Jul-2019 | 111.1 | 112.55 | -1.96 | 0.50 |
| Aug-2019 | 113.2 | 112.75 | 0.66 | -0.22 |
| Sep-2019 | 111.8 | 112.54 | -2.05 | 1.31 |
| Oct-2019 | 108.8 | 111.25 | -2.90 | 0.45 |
| Nov-2019 | 116.8 | 109.28 | 3.79 | 3.73 |
| Dec-2019 | 122.7 | 107.47 | 11.04 | 4.18 |
| Jan-2020 | 109.1 | 106.15 | -2.63 | 5.58 |
| Feb-2020 | 109.6 | 105.21 | -3.81 | 8.21 |
| Mar-2020 | 103.9 | 104.64 | 0.19 | -0.94 |
| Apr-2020 | 87.4 | 104.33 | -4.84 | -12.09 |
| May-2020 | 89.8 | 103.96 | 1.81 | -15.98 |
| Jun-2020 | 96.2 | 103.64 | 0.68 | -8.12 |
| Jul-2020 | 97.9 | 103.47 | -1.96 | -3.61 |
| Aug-2020 | 103.8 | 103.31 | 0.66 | -0.17 |
| Sep-2020 | 107.6 | 103.62 | -2.05 | 6.02 |
| Oct-2020 | 105.5 | 104.99 | -2.90 | 3.41 |
| Nov-2020 | 111.3 | 107.04 | 3.79 | 0.47 |
| Dec-2020 | 120.5 | 109.02 | 11.04 | 0.44 |
| Jan-2021 | 107.2 | 110.50 | -2.63 | -0.67 |
| Feb-2021 | 107.6 | 111.58 | -3.81 | -0.16 |
| Mar-2021 | 113.4 | 112.35 | 0.19 | 0.86 |
| Apr-2021 | 110.7 | 112.90 | -4.84 | 2.64 |
| May-2021 | 115.8 | 113.48 | 1.81 | 0.51 |
| Jun-2021 | 117.6 | 114.00 | 0.68 | 2.91 |
| Jul-2021 | 112.2 | 114.40 | -1.96 | -0.24 |
| Aug-2021 | 115.2 | 114.74 | 0.66 | -0.20 |
| Sep-2021 | 114.7 | 115.14 | -2.05 | 1.61 |
| Oct-2021 | 111.8 | 115.47 | -2.90 | -0.77 |
| Nov-2021 | 118.7 | 115.84 | 3.79 | -0.93 |
| Dec-2021 | 125.8 | 116.21 | 11.04 | -1.45 |
| Jan-2022 | 111.3 | 116.47 | -2.63 | -2.54 |
| Feb-2022 | 111.7 | 116.88 | -3.81 | -1.36 |
| Mar-2022 | 118.9 | 117.22 | 0.19 | 1.49 |
| Apr-2022 | 113.2 | 117.51 | -4.84 | 0.53 |
| May-2022 | 122.2 | 117.82 | 1.81 | 2.57 |
| Jun-2022 | 120.0 | 118.12 | 0.68 | 1.20 |
| Jul-2022 | 116.2 | 118.45 | -1.96 | -0.29 |
| Aug-2022 | 120.8 | 118.68 | 0.66 | 1.45 |
| Sep-2022 | 117.4 | 118.91 | -2.05 | 0.54 |
| Oct-2022 | 116.0 | 119.19 | -2.90 | -0.29 |
| Nov-2022 | 121.9 | 119.52 | 3.79 | -1.41 |
| Dec-2022 | 129.8 | 119.98 | 11.04 | -1.23 |
| Jan-2023 | 115.2 | 120.42 | -2.63 | -2.59 |
| Feb-2023 | 113.5 | 120.70 | -3.81 | -3.39 |
| Mar-2023 | 122.5 | 120.82 | 0.19 | 1.48 |
| Apr-2023 | 116.3 | 120.89 | -4.84 | 0.25 |
| May-2023 | 127.0 | 121.18 | 1.81 | 4.01 |
| Jun-2023 | 126.4 | 121.58 | 0.68 | 4.14 |
| Jul-2023 | 120.4 | 122.00 | -1.96 | 0.36 |
| Aug-2023 | 123.2 | 122.51 | 0.66 | 0.02 |
| Sep-2023 | 118.0 | 122.65 | -2.05 | -2.61 |
| Oct-2023 | 117.0 | 122.80 | -2.90 | -2.90 |
| Nov-2023 | 127.8 | 123.17 | 3.79 | 0.84 |
| Dec-2023 | 133.5 | 123.13 | 11.04 | -0.68 |
| Jan-2024 | 121.5 | 123.12 | -2.63 | 1.01 |
| Feb-2024 | 119.6 | 123.31 | -3.81 | 0.11 |
| Mar-2024 | 119.8 | 123.38 | 0.19 | -3.77 |
| Apr-2024 | 122.5 | 123.67 | -4.84 | 3.67 |
| May-2024 | 129.6 | 123.99 | 1.81 | 3.79 |
| Jun-2024 | 123.0 | 124.18 | 0.68 | -1.87 |
| Jul-2024 | 123.5 | 124.41 | -1.96 | 1.05 |
| Aug-2024 | 124.6 | 124.52 | 0.66 | -0.58 |
| Sep-2024 | 118.2 | 124.85 | -2.05 | -4.60 |
| Oct-2024 | 123.9 | 125.23 | -2.90 | 1.57 |
| Nov-2024 | 128.6 | 125.49 | 3.79 | -0.68 |
| Dec-2024 | 137.3 | 125.90 | 11.04 | 0.35 |
| Jan-2025 | 123.2 | 126.33 | -2.63 | -0.50 |
| Feb-2025 | 120.4 | 126.67 | -3.81 | -2.45 |
| Mar-2025 | 126.9 | 127.14 | 0.19 | -0.44 |
| Apr-2025 | 124.6 | 127.60 | -4.84 | 1.84 |
| May-2025 | 133.7 | 127.96 | 1.81 | 3.92 |
| Jun-2025 | 128.9 | 128.49 | 0.68 | -0.27 |
| Jul-2025 | 127.9 | 129.00 | -1.96 | 0.85 |
| Aug-2025 | 128.2 | 129.43 | 0.66 | -1.89 |
| Sep-2025 | 126.0 | 129.89 | -2.05 | -1.84 |
| Oct-2025 | 127.1 | NA | -2.90 | NA |
| Nov-2025 | 134.1 | NA | 3.79 | NA |
| Dec-2025 | 144.4 | NA | 11.04 | NA |
| Jan-2026 | 128.5 | NA | -2.63 | NA |
| Feb-2026 | 125.3 | NA | -3.81 | NA |
| Mar-2026 | 133.0 | NA | 0.19 | NA |
decomp_add <- list(x = y, seasonal = S_add_ts, trend = T_t, random = I_add,
figure = S_add, type = "additive")
class(decomp_add) <- "decomposed.ts"
plot(decomp_add)
En el modelo multiplicativo se obtiene la razón entre la serie original y la tendencia: \(Y_t / T_t = S_t \times I_t\). Se promedia esta razón por cada mes del año para obtener el índice estacional bruto, y se normaliza para que la suma de los 12 índices sea igual a 12 (es decir, que el promedio sea 1), condición propia del modelo multiplicativo.
detrend_mult <- y / T_t
S_raw_mult <- tapply(detrend_mult, cycle(y), mean, na.rm = TRUE)
S_mult <- S_raw_mult * (12 / sum(S_raw_mult))
S_mult_tabla <- data.frame(Mes = month.abb, `Índice estacional` = round(S_mult, 4))
knitr::kable(S_mult_tabla, row.names = FALSE,
caption = "Índices estacionales - Modelo multiplicativo")
| Mes | Índice.estacional |
|---|---|
| Jan | 0.9781 |
| Feb | 0.9686 |
| Mar | 1.0020 |
| Apr | 0.9566 |
| May | 1.0124 |
| Jun | 1.0048 |
| Jul | 0.9827 |
| Aug | 1.0061 |
| Sep | 0.9841 |
| Oct | 0.9754 |
| Nov | 1.0332 |
| Dec | 1.0960 |
cat("Comprobación: la suma de los índices estacionales es", round(sum(S_mult), 6),
"(debe ser ≈ 12)\n")
## Comprobación: la suma de los índices estacionales es 12 (debe ser ≈ 12)
S_mult_ts <- ts(rep(S_mult, length.out = length(y)), start = start(y), frequency = 12)
I_mult <- y / (T_t * S_mult_ts)
tabla_mult <- data.frame(
Fecha = format(fechas, "%b-%Y"),
Observado = round(as.numeric(y), 1),
Tendencia = round(as.numeric(T_t), 2),
Estacional = round(as.numeric(S_mult_ts), 3),
Irregular = round(as.numeric(I_mult), 3)
)
knitr::kable(tabla_mult, row.names = FALSE,
caption = "Descomposición multiplicativa mes a mes")
| Fecha | Observado | Tendencia | Estacional | Irregular |
|---|---|---|---|---|
| Jan-2018 | 105.1 | NA | 0.978 | NA |
| Feb-2018 | 102.5 | NA | 0.969 | NA |
| Mar-2018 | 108.4 | NA | 1.002 | NA |
| Apr-2018 | 108.0 | NA | 0.957 | NA |
| May-2018 | 112.5 | NA | 1.012 | NA |
| Jun-2018 | 113.6 | NA | 1.005 | NA |
| Jul-2018 | 108.8 | 109.81 | 0.983 | 1.008 |
| Aug-2018 | 111.9 | 110.07 | 1.006 | 1.010 |
| Sep-2018 | 107.5 | 110.40 | 0.984 | 0.989 |
| Oct-2018 | 105.9 | 110.65 | 0.975 | 0.981 |
| Nov-2018 | 112.2 | 110.81 | 1.033 | 0.980 |
| Dec-2018 | 120.0 | 110.95 | 1.096 | 0.987 |
| Jan-2019 | 107.8 | 111.09 | 0.978 | 0.992 |
| Feb-2019 | 106.1 | 111.24 | 0.969 | 0.985 |
| Mar-2019 | 112.6 | 111.47 | 1.002 | 1.008 |
| Apr-2019 | 109.7 | 111.77 | 0.957 | 1.026 |
| May-2019 | 114.7 | 112.08 | 1.012 | 1.011 |
| Jun-2019 | 114.7 | 112.39 | 1.005 | 1.016 |
| Jul-2019 | 111.1 | 112.55 | 0.983 | 1.004 |
| Aug-2019 | 113.2 | 112.75 | 1.006 | 0.998 |
| Sep-2019 | 111.8 | 112.54 | 0.984 | 1.010 |
| Oct-2019 | 108.8 | 111.25 | 0.975 | 1.003 |
| Nov-2019 | 116.8 | 109.28 | 1.033 | 1.034 |
| Dec-2019 | 122.7 | 107.47 | 1.096 | 1.042 |
| Jan-2020 | 109.1 | 106.15 | 0.978 | 1.051 |
| Feb-2020 | 109.6 | 105.21 | 0.969 | 1.075 |
| Mar-2020 | 103.9 | 104.64 | 1.002 | 0.991 |
| Apr-2020 | 87.4 | 104.33 | 0.957 | 0.876 |
| May-2020 | 89.8 | 103.96 | 1.012 | 0.853 |
| Jun-2020 | 96.2 | 103.64 | 1.005 | 0.924 |
| Jul-2020 | 97.9 | 103.47 | 0.983 | 0.963 |
| Aug-2020 | 103.8 | 103.31 | 1.006 | 0.999 |
| Sep-2020 | 107.6 | 103.62 | 0.984 | 1.055 |
| Oct-2020 | 105.5 | 104.99 | 0.975 | 1.030 |
| Nov-2020 | 111.3 | 107.04 | 1.033 | 1.006 |
| Dec-2020 | 120.5 | 109.02 | 1.096 | 1.008 |
| Jan-2021 | 107.2 | 110.50 | 0.978 | 0.992 |
| Feb-2021 | 107.6 | 111.58 | 0.969 | 0.996 |
| Mar-2021 | 113.4 | 112.35 | 1.002 | 1.007 |
| Apr-2021 | 110.7 | 112.90 | 0.957 | 1.025 |
| May-2021 | 115.8 | 113.48 | 1.012 | 1.008 |
| Jun-2021 | 117.6 | 114.00 | 1.005 | 1.027 |
| Jul-2021 | 112.2 | 114.40 | 0.983 | 0.998 |
| Aug-2021 | 115.2 | 114.74 | 1.006 | 0.998 |
| Sep-2021 | 114.7 | 115.14 | 0.984 | 1.012 |
| Oct-2021 | 111.8 | 115.47 | 0.975 | 0.993 |
| Nov-2021 | 118.7 | 115.84 | 1.033 | 0.992 |
| Dec-2021 | 125.8 | 116.21 | 1.096 | 0.988 |
| Jan-2022 | 111.3 | 116.47 | 0.978 | 0.977 |
| Feb-2022 | 111.7 | 116.88 | 0.969 | 0.987 |
| Mar-2022 | 118.9 | 117.22 | 1.002 | 1.012 |
| Apr-2022 | 113.2 | 117.51 | 0.957 | 1.007 |
| May-2022 | 122.2 | 117.82 | 1.012 | 1.024 |
| Jun-2022 | 120.0 | 118.12 | 1.005 | 1.011 |
| Jul-2022 | 116.2 | 118.45 | 0.983 | 0.998 |
| Aug-2022 | 120.8 | 118.68 | 1.006 | 1.012 |
| Sep-2022 | 117.4 | 118.91 | 0.984 | 1.003 |
| Oct-2022 | 116.0 | 119.19 | 0.975 | 0.998 |
| Nov-2022 | 121.9 | 119.52 | 1.033 | 0.987 |
| Dec-2022 | 129.8 | 119.98 | 1.096 | 0.987 |
| Jan-2023 | 115.2 | 120.42 | 0.978 | 0.978 |
| Feb-2023 | 113.5 | 120.70 | 0.969 | 0.971 |
| Mar-2023 | 122.5 | 120.82 | 1.002 | 1.012 |
| Apr-2023 | 116.3 | 120.89 | 0.957 | 1.006 |
| May-2023 | 127.0 | 121.18 | 1.012 | 1.035 |
| Jun-2023 | 126.4 | 121.58 | 1.005 | 1.035 |
| Jul-2023 | 120.4 | 122.00 | 0.983 | 1.004 |
| Aug-2023 | 123.2 | 122.51 | 1.006 | 1.000 |
| Sep-2023 | 118.0 | 122.65 | 0.984 | 0.978 |
| Oct-2023 | 117.0 | 122.80 | 0.975 | 0.977 |
| Nov-2023 | 127.8 | 123.17 | 1.033 | 1.004 |
| Dec-2023 | 133.5 | 123.13 | 1.096 | 0.989 |
| Jan-2024 | 121.5 | 123.12 | 0.978 | 1.009 |
| Feb-2024 | 119.6 | 123.31 | 0.969 | 1.001 |
| Mar-2024 | 119.8 | 123.38 | 1.002 | 0.969 |
| Apr-2024 | 122.5 | 123.67 | 0.957 | 1.036 |
| May-2024 | 129.6 | 123.99 | 1.012 | 1.032 |
| Jun-2024 | 123.0 | 124.18 | 1.005 | 0.986 |
| Jul-2024 | 123.5 | 124.41 | 0.983 | 1.010 |
| Aug-2024 | 124.6 | 124.52 | 1.006 | 0.995 |
| Sep-2024 | 118.2 | 124.85 | 0.984 | 0.962 |
| Oct-2024 | 123.9 | 125.23 | 0.975 | 1.014 |
| Nov-2024 | 128.6 | 125.49 | 1.033 | 0.992 |
| Dec-2024 | 137.3 | 125.90 | 1.096 | 0.995 |
| Jan-2025 | 123.2 | 126.33 | 0.978 | 0.997 |
| Feb-2025 | 120.4 | 126.67 | 0.969 | 0.981 |
| Mar-2025 | 126.9 | 127.14 | 1.002 | 0.996 |
| Apr-2025 | 124.6 | 127.60 | 0.957 | 1.021 |
| May-2025 | 133.7 | 127.96 | 1.012 | 1.032 |
| Jun-2025 | 128.9 | 128.49 | 1.005 | 0.998 |
| Jul-2025 | 127.9 | 129.00 | 0.983 | 1.009 |
| Aug-2025 | 128.2 | 129.43 | 1.006 | 0.985 |
| Sep-2025 | 126.0 | 129.89 | 0.984 | 0.986 |
| Oct-2025 | 127.1 | NA | 0.975 | NA |
| Nov-2025 | 134.1 | NA | 1.033 | NA |
| Dec-2025 | 144.4 | NA | 1.096 | NA |
| Jan-2026 | 128.5 | NA | 0.978 | NA |
| Feb-2026 | 125.3 | NA | 0.969 | NA |
| Mar-2026 | 133.0 | NA | 1.002 | NA |
decomp_mult <- list(x = y, seasonal = S_mult_ts, trend = T_t, random = I_mult,
figure = S_mult, type = "multiplicative")
class(decomp_mult) <- "decomposed.ts"
plot(decomp_mult)
Una forma objetiva de comparar qué modelo describe mejor la serie es observar la dispersión del componente irregular: mientras menor sea su variabilidad, mejor capturan la tendencia y la estacionalidad la mayor parte del movimiento de la serie, dejando un residuo más “limpio” (cercano al ruido aleatorio).
sd_add <- sd(I_add, na.rm = TRUE)
sd_mult <- sd(I_mult, na.rm = TRUE) # ronda alrededor de 1 en el modelo multiplicativo
comparacion <- data.frame(
Modelo = c("Aditivo", "Multiplicativo"),
`Desviación estándar del irregular` = c(round(sd_add, 3), round(sd_mult, 4)),
`Escala` = c("Mismas unidades que el índice", "Proporción respecto a 1")
)
knitr::kable(comparacion, row.names = FALSE)
| Modelo | Desviación.estándar.del.irregular | Escala |
|---|---|---|
| Aditivo | 3.2620 | Mismas unidades que el índice |
| Multiplicativo | 0.0304 | Proporción respecto a 1 |
Adicionalmente, el comportamiento de la amplitud estacional ayuda a decidir entre ambos modelos: si la amplitud de las oscilaciones estacionales crece a medida que el nivel de la serie aumenta, el modelo multiplicativo es más apropiado; si la amplitud se mantiene relativamente constante en el tiempo, el modelo aditivo es suficiente. En la serie del IMAE, los picos estacionales de diciembre muestran una ligera tendencia a crecer en magnitud absoluta a medida que el índice general crece, lo que favorece levemente al modelo multiplicativo, aunque ambos modelos describen razonablemente bien la serie dado que la variación estacional no es extremadamente pronunciada.
decompose() de RPara validar que el procedimiento manual fue calculado correctamente,
se compara contra la función decompose() incluida en el
paquete base stats de R, la cual implementa el mismo método
clásico de medias móviles.
dc_add <- decompose(y, type = "additive")
dc_mult <- decompose(y, type = "multiplicative")
cat("Correlación entre tendencia manual y decompose() [aditivo]:",
round(cor(T_t, dc_add$trend, use = "complete.obs"), 6), "\n")
## Correlación entre tendencia manual y decompose() [aditivo]: 1
cat("Diferencia máxima absoluta entre índices estacionales (aditivo):",
round(max(abs(S_add - dc_add$figure)), 8), "\n")
## Diferencia máxima absoluta entre índices estacionales (aditivo): 0
cat("Diferencia máxima absoluta entre índices estacionales (multiplicativo):",
round(max(abs(S_mult - dc_mult$figure)), 8), "\n")
## Diferencia máxima absoluta entre índices estacionales (multiplicativo): 0
Las diferencias son prácticamente nulas (orden de \(10^{-8}\) o menores), lo que confirma que el cálculo manual mediante medias móviles centradas reproduce exactamente el método clásico de descomposición.
Fuente de los datos: Secretaría Ejecutiva del Consejo Monetario Centroamericano (SECMCA), Índice Mensual de la Actividad Económica - El Salvador, datos no ajustados estacionalmente ni por calendario.