Module 5 Discussion

Author

Ryan Bean

I. Smoothing Parameters: ETS

In an ETS (Error, Trend, Seasonal) model, smoothing parameters control how much weight is placed on new observations relative to past estimates when updating the components of the model. These parameters determine how quickly the level, trend, and seasonal components adjust in response to new data. Larger values make the model respond more quickly to recent changes, while smaller values produce smoother, more stable component estimates.

In the simplest case of Simple Exponential Smoothing (ETS(A,N,N)), only the level component is updated. The smoothing parameter \(\alpha\) (where \(0 < \alpha < 1\)) determines how much weight is placed on the most recent observation. The level update equation is:

\[ \ell_t = \alpha y_t + (1 - \alpha)\ell_{t-1}. \]

Here, \(\ell_t\) is the estimated level at time \(t\), and \(y_t\) is the observed value. A larger \(\alpha\) places more weight on \(y_t\), making the model more reactive.

When a trend component is included, a second smoothing parameter \(\beta\) controls the updating of the trend. The updating equations become:

\[ \ell_t = \alpha y_t + (1 - \alpha)(\ell_{t-1} + b_{t-1}), \]

\[ b_t = \beta (\ell_t - \ell_{t-1}) + (1 - \beta)b_{t-1}. \]

Here, \(b_t\) represents the estimated trend at time \(t\). The parameter \(\beta\) determines how quickly the trend estimate adjusts over time.

If seasonality is present, a third smoothing parameter \(\gamma\) controls the seasonal component updates:

\[ s_t = \gamma (y_t - \ell_{t-1} - b_{t-1}) + (1 - \gamma)s_{t-m}, \]

where \(m\) is the seasonal period. The parameter \(\gamma\) determines how quickly seasonal effects adapt to new data.

II. Two datasets

remove(list = ls())

library(fredr)
library(dplyr)
library(ggplot2)
library(lubridate)
library(tsibble)
library(fable)
library(feasts)
library(zoo)

fredr_set_key("523a2b98a1ce120186357fd0c916cc26")

start_date <- as.Date("2000-01-01")

indpro <- fredr(
  series_id = "INDPRO",
  observation_start = start_date
) |> 
  transmute(date, value, series = "INDPRO: Industrial Production Index")

unrate <- fredr(
  series_id = "UNRATE",
  observation_start = start_date
) |> 
  transmute(date, value, series = "UNRATE: Unemployment Rate")

p1 <- ggplot(indpro, aes(x = date, y = value)) +
  geom_line(linewidth = 0.6) +
  labs(
    title = "Industrial Production Index (INDPRO)",
    subtitle = "Source: FRED",
    x = "Date",
    y = "Index"
  ) +
  theme_minimal(base_size = 11)

p2 <- ggplot(unrate, aes(x = date, y = value)) +
  geom_line(linewidth = 0.6) +
  labs(
    title = "Unemployment Rate (UNRATE)",
    subtitle = "Source: FRED",
    x = "Date",
    y = "Percent"
  ) +
  theme_minimal(base_size = 11)

p1

p2

ggsave("indpro.svg", p1, width = 8, height = 4)   # vector
ggsave("unrate.svg", p2, width = 8, height = 4)   # vector

Based on visually inspecting the two time series, I would expect the smoothing parameters to reflect relatively smooth long-run movements with occasional sharp shocks, but little evidence of regular seasonality. For the Industrial Production Index (INDPRO), the series displays gradual upward movement over long periods, interrupted by large but infrequent structural shocks (such as the 2008 financial crisis and the 2020 COVID shock). Because the underlying trend evolves slowly most of the time, I would expect the level smoothing parameter \(\alpha\) to be moderate rather than large, in the range of 0.1 to 0.3.

The trend appears persistent but smooth, suggesting a relatively small trend smoothing parameter \(\beta\), perhaps below 0.1, since rapid trend adjustments would produce excessive volatility outside of crisis periods. There is little visible deterministic seasonality in the INDPRO series at the scale shown in the plot, implying that if a seasonal component were included, the seasonal smoothing parameter \(\gamma\) would likely be very small or even estimated near zero. This would indicate that seasonality contributes minimally to explaining variation in the data.

For the Unemployment Rate (UNRATE), the pattern is cyclical with pronounced recessionary spikes and slow recoveries. The level shifts noticeably during crises, particularly in 2020, so I would expect a somewhat larger \(\alpha\) than for INDPRO, potentially in the range of 0.2 to 0.4, to allow the model to adjust more quickly to sharp changes. However, because most of the time the series evolves gradually, the parameter would likely not be extremely large.

The trend component also appears smooth and persistent, implying a relatively small \(\beta\), again likely below 0.1. As with INDPRO, there is no strong visible seasonal pattern in the plot, so \(\gamma\) would likely be near zero or small.

III. Best ETS model

indpro_ts <- indpro |>
  transmute(Month = yearmonth(date), value) |>
  as_tsibble(index = Month) |>
  fill_gaps() |>
  mutate(value = na.approx(value, x = as.numeric(Month), na.rm = FALSE)) |>
  filter(!is.na(value))

unrate_ts <- unrate |>
  transmute(Month = yearmonth(date), value) |>
  as_tsibble(index = Month) |>
  fill_gaps() |>
  mutate(value = na.approx(value, x = as.numeric(Month), na.rm = FALSE)) |>
  filter(!is.na(value))

indpro_fit <- indpro_ts |> model(ets = ETS(value))
unrate_fit <- unrate_ts |> model(ets = ETS(value))

report(indpro_fit)
Series: value 
Model: ETS(A,N,N) 
  Smoothing parameters:
    alpha = 0.9998999 

  Initial states:
     l[0]
 91.52792

  sigma^2:  1.1579

     AIC     AICc      BIC 
1848.452 1848.529 1859.690 
report(unrate_fit)
Series: value 
Model: ETS(M,A,N) 
  Smoothing parameters:
    alpha = 0.9999 
    beta  = 0.9999 

  Initial states:
    l[0]        b[0]
 3.98806 -0.03465407

  sigma^2:  0.0133

     AIC     AICc      BIC 
1499.901 1500.096 1518.632 

The estimated ETS models differ meaningfully from my initial intuition about the smoothing parameters. For the Industrial Production Index (INDPRO), the selected model was ETS(A,N,N) with an estimated smoothing parameter \(\alpha \approx 0.9999\). I had originally expected a moderate value of \(\alpha\), reflecting the relatively smooth long-run evolution of the series. However, the model instead chose a value extremely close to 1, implying that the level is updated almost entirely based on the most recent observation. In effect, this specification behaves very similarly to a random walk.

For the Unemployment Rate (UNRATE), the selected model was ETS(M,A,N), with both \(\alpha \approx 0.9999\) and \(\beta \approx 0.9999\). I had anticipated a moderate \(\alpha\) and small \(\beta\), given the visually smooth and persistent cyclical movements. Instead, both parameters are estimated near 1, indicating extremely rapid updating of both the level and the trend components. When \(\alpha\) and \(\beta\) are this large, the model effectively responds almost one-for-one to new observations and trend changes, again resembling a stochastic trend process rather than a slowly evolving deterministic one.

Reconciling these results, it appears that although the series look smooth over long periods, they contain large, abrupt shocks that dominate the estimation procedure. Overall, my intuition about moderate smoothing was not supported by the estimated models. Instead, both series exhibit behavior consistent with highly persistent, shock-driven dynamics that are well-approximated by near random-walk processes within the ETS framework.