Inquiry about Seasonal Component Interpretation in X-11 Method - FPP3 Online Textbook

Hi,
I'm a keen reader of the fpp3 online textbook and have been studying the X-11 method for time series decomposition. However, I'm puzzled by a discrepancy I observed in the data (us_retail_employment, fig 3.14) Link. After January 2010, employment increased, but the seasonal component showed decreasing amplitude and peaks. I'm seeking guidance on estimating the seasonal component using X_13ARIMA_SEATS and interpreting this inconsistency.

Additionally, I'm curious about the inner workings of the X_13ARIMA_SEATS function and the specific calculations involved in deriving the seasonal components. I would greatly appreciate it if anyone could shed light on this process.

Thank you for sharing your expertise.


Referred here by Forecasting: Principles and Practice, by Rob J Hyndman and George Athanasopoulos

Beginning on page 27 of the X13-ARIMA-SEATS Reference Manual you can find the definitive description of the algorithm.

From the reprex below, it is possible to see that the plots contain four panels: data, trend, seasonal component and remainder. Data and trend are identical and on the same scale. Remainders are the difference between data and trend + seasonal. Classical decomposition differs from the other three in that the seasonal component is a constant repeating pattern.

In classical decomposition, we assume that the seasonal component is constant from year to year.

The other three methods relieve that assumption. In X11, the seasonal component is allowed slowly to vary. In X13 an iterative algorithm is used to derive the seasonal components. In STL, the rate of change and also the trend smoothness can be set by the user.

The apparent "inconsistency" is due to the scale effect; compare the y-axis of the top two panels to the bottom two.

library(fpp3)
#> ── Attaching packages ────────────────────────────────────────────── fpp3 0.5 ──
#> ✔ tibble      3.2.1     ✔ tsibble     1.1.3
#> ✔ dplyr       1.1.2     ✔ tsibbledata 0.4.1
#> ✔ tidyr       1.3.0     ✔ feasts      0.3.1
#> ✔ lubridate   1.9.2     ✔ fable       0.3.3
#> ✔ ggplot2     3.4.2     ✔ fabletools  0.3.3
#> ── Conflicts ───────────────────────────────────────────────── fpp3_conflicts ──
#> ✖ lubridate::date()    masks base::date()
#> ✖ dplyr::filter()      masks stats::filter()
#> ✖ tsibble::intersect() masks base::intersect()
#> ✖ tsibble::interval()  masks lubridate::interval()
#> ✖ dplyr::lag()         masks stats::lag()
#> ✖ tsibble::setdiff()   masks base::setdiff()
#> ✖ tsibble::union()     masks base::union()

# STL decomposition, Fig 3.7

us_retail_employment <- us_employment |>
  filter(year(Month) >= 1990, Title == "Retail Trade") |>
  select(-Series_ID)

dcmp <- us_retail_employment |> model(stl = STL(Employed))
components(dcmp) |> autoplot() 


# Classical decomposition Fig. 3.13

us_retail_employment |>
  model(
    classical_decomposition(Employed, type = "additive")
  ) |>
  components() |>
  autoplot() +
  labs(title = "Classical additive decomposition of total
                  US retail employment")
#> Warning: Removed 6 rows containing missing values (`geom_line()`).


# X-11 decomposition Fig. 3.14

x11_dcmp <- us_retail_employment |>
  model(x11 = X_13ARIMA_SEATS(Employed ~ x11())) |>
  components()
autoplot(x11_dcmp) +
  labs(title =
         "Decomposition of total US retail employment using X-11.")


# SEATS Fig. 3.17
seats_dcmp <- us_retail_employment |>
  model(seats = X_13ARIMA_SEATS(Employed ~ seats())) |>
  components()
autoplot(seats_dcmp) +
  labs(title =
         "Decomposition of total US retail employment using SEATS")

Created on 2023-08-06 with reprex v2.0.2

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.