The Seasons They Are A-Changin’

A Century of Definitions and a Way Forward

Carter Bryson · Gary Cornwall

U.S. Bureau of Economic Analysis
The views expressed in this presentation are those of the authors and do not necessarily reflect the views of the Bureau of Economic Analysis or the U.S. Department of Commerce.

2026-08-01

Residual Seasonality: A Recurring, Cross-Agency Concern

Residual Seasonality in Core Consumer Price Inflation Federal Reserve Board • 2014
“The Phrase of the Day is ‘Residual Seasonality’ ” Wall Street Journal • 2015
U.S. says probe found problem in seasonal adjustment of GDP data Reuters • 2016
Residual Seasonality in GDP Growth Remains after Latest BEA Improvements Cleveland Fed • 2019
Assessing residual seasonality in published outputs UK Office for National Statistics • 2025
Residual Seasonality in Some Components of PCE Inflation Cleveland Fed • 2026

Residual seasonality recurs across agencies because the object is not agreed upon, not because any one producer is failing.

“Some of us looking for answers regarding seasonal analysis may feel as if we’re in a dark room looking for a black cat. That’s bad, but it’s not as bad as it could be. Pity the philosophers who are in a dark room looking for a black cat that isn’t there.” — Zellner et al. (1978, p. 451)

No agreed-upon definition

Tradition Core object Representative work
Regularity & repetition
calendar-anchored
Seasonal means across a calendar partition Falkner 1924; Kallek 1978; ESS Guidelines
Seasonal unit roots & stability
ARIMA polynomial
Roots of the AR polynomial at seasonal frequencies Hylleberg et al. 1990; Canova–Hansen 1995
Signal extraction
unobserved components
Latent component St under an identifying restriction Hillmer–Tiao 1982; Bell & Hillmer 1984; X-13ARIMA-SEATS
Spectral
frequency-domain
Functional of the spectral density at seasonal frequencies Nerlove 1964; Granger 1978

→ Each tradition is internally consistent — but none nests the others.

→ So analysts consult all of them, implicitly building the superset — a definition nobody wrote down.

What do we mean by “seasonality”?

Time series Non-seasonal Seasonal Deterministic Stochastic Seasonal unit roots

What are we testing for?

Non-seasonal Deterministic strong persistence Stochastic mild persistence Seasonal unit roots presence type Busetti & Harvey, 2003 McElroy & Holan, 2009* Maravall, 2012 Friedman, 1937 Kruskal & Wallis, 1952 Priestley, 1981* Hylleberg et al., 1990 Canova & Hansen, 1995 Soukup & Findley, 1999* Lytras et al., 2007 McElroy, 2021 alternative null * frequency-domain statistic Tests ordered chronologically within each bracket. Bryson & Cornwall, 2026 B–C footprint B–C shares the zero-seasonality null with the presence tests; its alternative covers the entire seasonal footprint.

Ambiguity Becomes Communication Opacity

Raw series transparent input
Judgment across frameworks implicit
X-13 Specification production default
Adjusted series opaque
“The QS diagnostic has limitation for pretesting (Findley et al. 2017). The main problem is that it may detect minor amounts of seasonal autocorrelation in a series, especially with a long series, and minor, though nonzero, amounts of seasonal autocorrelation do not reflect what we ordinarily think of as seasonality.” — Bell et al. (2022)

Who bears the cost?

  • Within agencies. At BEA, BLS, Census, evidence is weighed across multiple frameworks (spectral diagnostics, HEGY, QS, visual significance) but the adjustment is applied by X-13 — which answers a different population question than most of the diagnostics that informed the decision to apply it.
  • Between agencies. Different judgment conventions produce the same nominal output (“seasonally adjusted via X-13”) under different effective definitions. Comparable labels; incomparable objects.
  • To data users. X-13 itself is transparent — code and manual are public — but the agency-specific spec that drives a given published series often is not. Users can read the engine; they cannot always read the configuration.

The superset exists but no one can point to it.

A Way Forward

What we build. A closed-loop framework that makes explicit what is currently assembled informally through analyst-level judgment:

  • Definition. Seasonality as relative peak dominance.
  • Test. Closed-form Logistic null via extreme value theory: no simulation, no bandwidth, no kernel.
  • Adjustment. Stochastic Spectral Imputation (SSI) operates on the exact object the test measures.
  • Design. Test and adjustment are logical conjugates, not bolted together.

What we find.

  • After BIC pre-whitening, size is nominal across colored-noise nulls; power competitive with the best alternatives.
  • SSI tracks X-13 in levels, preserves variance (VR \approx 1 vs. X-13’s \approx 0.75), and avoids spectral dips at seasonal frequencies.
  • Housing starts and nonfarm payrolls: adjusted series pass independent diagnostics (ACF inside bands, no spectral dip, VR near 1).

We start by placing both the data and the definition in the frequency domain.

Two representations of the same series

Any finite-length series \{x_t\}_{t=1}^T admits two equivalent representations connected by the discrete Fourier transform:

d_x(\omega_j) = \sum_{t=1}^T x_t\, e^{-i\omega_j t}, \qquad x_t = \frac{1}{T}\sum_{j=0}^{T-1} d_x(\omega_j)\, e^{i\omega_j t}

at Fourier frequencies \omega_j = 2\pi j/T.

  • Time domain orders observations by calendar position.
  • Frequency domain decomposes variance by rate of repetition.
  • Lossless. No information is gained or lost by changing coordinates.

Think of the time series as a relatively homogeneous object and the DFT as the centrifuge which separates it into its component parts.

The same seasonality in both domains

Time domain: monthly air passenger traffic

Frequency domain: periodogram

→ The annual cycle shows up both ways: as roughly twelve peaks per twelve years in the time plot, and as a sharp spike at the annual frequency (plus harmonics) in the periodogram.

→ Same structure, different coordinate language. In the frequency domain, periodicity becomes a property of specific frequencies rather than of calendar months — which is why we build the definition there.

Why define seasonality in the frequency domain?

  • Calendar-invariant. Repetition rate is universal. Gregorian, fiscal, and lunar calendars collapse to the same frequency representation.
  • Model-free superset. Deterministic, stochastic, and unit-root seasonality all manifest as excess spectral mass at seasonal frequencies. Time-domain frameworks typically commit to a specific generating structure; the frequency-domain definition does not.
  • Natural variance decomposition. Seasonality becomes a statement about how variance is allocated across frequencies — not about mean structure or autocovariance at specific lags.
  • Moving holidays. Effects whose expected repetition rate sits near a seasonal rate (e.g., Easter, Ramadan) concentrate spectral energy near seasonal frequencies and are captured. Effects whose rate sits elsewhere (trading day, pay-period artifacts) are handled separately as pre-regressors before the DFT.
  • Robust to outliers. An additive outlier spreads energy approximately broadband rather than concentrating at any particular frequency. Relative comparisons between seasonal and non-seasonal frequencies are largely preserved. Time-domain partition tests are distorted directly by outliers in specific periods.

One caveat. The periodogram is an inconsistent estimator of the spectral density. We don’t try to fix this; we exploit it.

A definition you can test

Non-technical. Among all of a series’ possible repeating cycles, the ones associated with chosen cycles of interest are demonstrably larger than the others.

Technical. Relative to a set of chosen cycle lengths, the highest peak in the spectral density occurs near one of those cycles rather than at any other.

We derive a test statistic with a clean asymptotic null — the distance between the periodogram’s max height in seasonal vs. non-seasonal bins.

\begin{aligned} \textcolor{#9EA2A2}{\widehat{\Delta}}(z;\textcolor{#004C97}{\mathcal{P}},N,M) \;:=\;& \max_{m \in \textcolor{#007D8A}{\mathcal{M}_1}(\textcolor{#004C97}{\mathcal{P}},N;M)} b_m(\textcolor{#D86018}{I_T}) \\[2pt] \;-\;& \max_{m \in \mathcal{M}_0(\textcolor{#004C97}{\mathcal{P}},N;M)} b_m(\textcolor{#D86018}{I_T}) \end{aligned}

Under H_0:

\textcolor{#9EA2A2}{\widehat{\Delta}} \overset{d}{\rightarrow} \mathrm{Logistic}\bigl(\tau \log(N_1/N_0),\,\tau\bigr)

via EVT on periodogram ordinates.

The population object: the partition

Fix an ex ante set of fundamental periods \mathcal{P} \subseteq \{1,\dots,P_{\max}\}. Non-annual fundamentals (e.g. quadrennial cycles) are handled identically; for now assume \mathcal{P}=\{1\}.

Harmonics. For p \in \mathcal{P} and N observations per year,

\Omega_p(N) = \Bigl\{\tfrac{2\pi k}{pN} : k = 1,\dots,\lfloor pN/2 \rfloor\Bigr\}, \qquad \Omega_G(\mathcal{P},N) = \bigcup_{p \in \mathcal{P}} \Omega_p(N).

Monthly (N=12,\ \mathcal{P}=\{1\}): \Omega_G = \{\pi/6,\ \pi/3,\ \pi/2,\ 2\pi/3,\ 5\pi/6,\ \pi\}.

Partition. Divide (0,\pi] into M equal-width bins B_m and label:

\mathcal{M}_1 = \{m : \mathrm{int}(B_m) \cap \Omega_G \ne \emptyset\}, \qquad \mathcal{M}_0 = \{1,\dots,M\} \setminus \mathcal{M}_1.

The population object: Δ

Comparing the elevations of two mountain ranges, relative to a common sea level.

Bin maximum. b_m(f_Z) \;:=\; \sup_{\omega \in B_m} f_Z(\omega).

Population separation:

\Delta(f_Z;\mathcal{P},N,M) \;=\; \underbrace{\max_{m\in\mathcal{M}_1} b_m(f_Z)}_{\text{largest seasonal-bin peak}} \;-\; \underbrace{\max_{m\in\mathcal{M}_0} b_m(f_Z)}_{\text{largest non-seasonal peak}}.

Definition. \{Z_t\} is seasonal relative to (\mathcal{P},N,M) iff \Delta(f_Z;\mathcal{P},N,M) > 0.

Relative, not absolute: captures narrow peaks and diffuse seasonal energy that remains concentrated within the seasonal bins. \Delta is indexed by the design resolution M.

The sample analog

For a finite sample \{z_t\}_{t=1}^T, we estimate f_Z with the periodogram:

I_T(\omega_j) \;=\; \frac{1}{T}\left|\sum_{t=1}^T \tilde{z}_t\, e^{-i\omega_j t}\right|^2, \qquad \omega_j = \tfrac{2\pi j}{T},\ \ j = 1,\dots,\lfloor (T-1)/2 \rfloor.

Within-bin maximum. Let \mathcal{J}_m = \{j : \omega_j \in B_m\}. Then b_m(I_T) := \max_{j \in \mathcal{J}_m} I_T(\omega_j).

Sample statistic:

\widehat{\Delta}(z;\mathcal{P},N,M) \;=\; \underbrace{\max_{m \in \mathcal{M}_1} b_m(I_T)}_{\text{largest seasonal-bin ordinate}} \;-\; \underbrace{\max_{m \in \mathcal{M}_0} b_m(I_T)}_{\text{largest non-seasonal ordinate}}.

Next: under H_0 the ordinates are \approx i.i.d. exponential; we don’t correct this, we exploit it.

The null distribution

Under H_0: Z_t \sim \mathrm{WN}(0,\sigma^2). Then at Fourier frequencies,

\frac{I_T(\omega_j)}{\tau} \;\Rightarrow\; \mathrm{Exp}(1), \qquad \tau = \sigma^2,

independently across distinct \omega_j (Politis & McElroy, 2019).

With N_g = |\mathcal{J}_g|, classical EVT gives the chain

\mathrm{Exp}(1)^{\otimes N_g} \;\xrightarrow{\ \max\ }\; \mathrm{Gumbel}(\tau\log N_g,\, \tau) \;\xrightarrow{\ \text{diff.}\ }\; \mathrm{Logistic}\bigl(\tau\log(N_1/N_0),\, \tau\bigr),

with independence across disjoint \mathcal{J}_1, \mathcal{J}_0, so

\boxed{\ \widehat{\Delta}(z;\mathcal{P},N,M) \,\big|\, H_0 \;\Rightarrow\; \mathrm{Logistic}\!\left(\tau\log\tfrac{N_1}{N_0},\,\tau\right)\ }

full derivation →

Practical workflow

1. Pre-whitenfit nonseasonal ARIMA by BIC; take residuals \hat{e}_t

Why pre-whiten? Colored-noise power sits in non-seasonal bins (low-frequency under AR(1)+, high-frequency under AR(1)-), inflating \max_{\mathcal{M}_0} b_m and shrinking \widehat{\Delta}. Raw \widehat{\Delta} rejects 0.3% of the time on AR(1), \phi=0.8; BIC pre-whitening restores size to 0.043–0.051. size table → In the software implementation this step has matured into M0-Whittle whitening — a de-biased Whittle AR fit that excludes seasonal-neighborhood ordinates (“Stage 0”) — same role, sharper tool.

2. Standardize(\hat{e}_t - \bar{e})/s_e enforces \tau = 1

Why standardize? With \tau=1 the null collapses to \mathrm{Logistic}\bigl(\log(N_1/N_0),\, 1\bigr): a single known distribution whose only data-dependent input is the partition.

3. Apply testcompute \widehat{\Delta}; reject if > c_{1-\alpha}

How sensitive to M? Empirical size holds in [0.046, 0.054] across M \in \{11, 19, 23, 31\} under white noise. M-sensitivity →

Simulation evidence: well-sized with competitive power

Size. Empirical null matches \mathrm{Logistic}(\tau\log(N_1/N_0),\tau) almost exactly.

Monthly, T=200, 50,000 replications. Vertical line: nominal 5% value.

Power. Competitive overall; dominates in quarterly and in the stationary-stochastic regime where BHs and CH fail.

\widehat{\Delta} BHs CH QS VS
Monthly, stoch. seas. (ρ = 1), σ²η = 0
σκ = 0.02 0.72 0.40 0.26 0.88 0.75
σκ = 0.03 0.95 0.75 0.53 0.99 0.96
Monthly, stoch. stat. (ρ = 0.95), σ²η = 0.5
σκ = 0.03 0.65 0.06 0.05 0.83 0.43
Quarterly, stoch. seas., σ²η = 0.5
σκ = 0.03 0.61 0.38 0.36 0.54 0.54

T=200; N=12/4, M=23/7, P=1. Full tables in appendix.

No bandwidth, no kernel, no simulated critical values — just the Logistic distribution.

From test to adjustment: the logical conjugate

What the test measures. Excess seasonal-bin spectral power: \widehat{\Delta}(z;\mathcal{P},N,M) > 0.

The gap most procedures leave open. Adjustment filters (X-13, SEATS, STL) target different population objects than any specific seasonality test. The filter does its job; the test does its job — but the two don’t speak the same language.

What our adjustment should do. Remove exactly the excess the test detects: leave the adjusted series x^*_t with

\widehat{\Delta}(x^*;\mathcal{P},N,M) \;\approx\; 0

by construction, while preserving the non-seasonal spectral floor.

The logical conjugate. Test and adjustment share a partition and target the same object. \widehat{\Delta}(x^*) \approx 0 holds by construction; independent diagnostics (ACF inside bands, no spectral dip, variance ratio near 1) provide the empirical check.

Operationalization: Stochastic Spectral Imputation (SSI).

Stochastic Spectral Imputation

Every seasonal-bin ordinate is reset to a drawn donor level from the non-seasonal floor — the paper’s SSI, as implemented in freqseas, on BLS nonfarm payrolls.

explore →

Evaluating SSI against X-13

Adjustment quality is multidimensional. X-13 is known to over-smooth and create spectral dips at seasonal frequencies. We weight four criteria by what they actually reveal:

  • Variance ratio \mathrm{Var}(\hat e)/\mathrm{Var}(\epsilon). Should \approx 1. X-13 typically \approx 0.75: systematic under-variance.
  • Spectral dip. Mean |\hat f_{\hat e}(\omega) - \hat f_\epsilon(\omega)| within seasonal bins. SSI imputes to the noise floor; X-13 undershoots it.
  • Correlation with \epsilon_t. Dynamic fidelity of innovations, not just magnitudes.
  • Time-domain MAE (secondary). Over-smoothing reduces MAE mechanically when bias is comparable — interpret jointly with the variance ratio.

Representative case
BSM, monthly, \rho = 0.95, \sigma_\kappa = 0.03.

SSI X-13
Variance ratio 0.98 0.76
Spectral dip 0.21 0.38
Corr(ê, ε) 0.90 0.82
MAE 1.11 1.03

Bold: closer to target. → DGP

Full panels: A (UR) · B (SS) · C (Det)

Combined workflow — and its operational form

1. Pre-data design: choose α and M
2. Test workflow
pre-whiten standardize apply test
Stage 0 · whiten A · detect
B · specify — line vs band identify — declared phase rule
no ↓
No adjustment
not seasonal at level α
yes ↓
3. SSI workflow
stationarize → apply SSI → restore levels
operate · surgery

On α: larger \alpha ⇒ smaller c_{1-\alpha} ⇒ more series classified as seasonal; standard choice 0.05 — pre-specify before observing data, or \alpha becomes a tuning knob.

On M: design resolution of the bin partition; defaults M = 2N-1 (monthly → 23, quarterly → 7); empirical size is insensitive to M across reasonable choices.

Status. The detect test and SSI are the paper. Stage B and the identification layer are active development: the line-vs-band specification test and the phase rule (not testable at second order — a declared identification) are experimental.

Nonfarm payrolls: SSI in production conditions

Full period 1990–present

COVID zoom 2018–2022

→ SSI and X-13 produce nearly identical level series — consumers of the adjusted data would not detect the change at scale.

→ The COVID shock — historically large month-over-month swings — handled mechanically, with no judgmental adjustments: reproducibility and auditability at production scale.

Payrolls — diagnostics

Autocorrelation (seasonal lags highlighted)

Periodogram (\log_{10}; seasonal bins highlighted)

→ ACF: both SSI and X-13 bring seasonal autocorrelations to insignificance. SSI introduces a mild alternating pattern (trigonometric imprint); neither value is significant.

→ Periodogram: over-smoothing by X-13 is visible directly — dispersion in seasonal bins is much tighter than in non-seasonal bins. SSI matches the floor across the board.

Housing starts

Full period 1990–present

Autocorrelation (seasonal lags highlighted)

→ SSI tracks the published X-13 series closely and stays slightly more volatile — by design: less over-smoothing.

→ X-13 overcorrects at lag 12 — strongly positive in the raw series, strongly negative after X-13. SSI brings lags 12, 24, 36 inside the bands.

periodogram diagnostic →

Empirical takeaways

Level series tracks X-13

No disruption to published magnitudes; transition risk appears low.

Less over-smoothing

Volatility closer to the underlying irregular, variance ratio nearer 1.

Clean spectral diagnostics

No dip at seasonal frequencies; ACF inside bands without over-correction.

Mechanical at scale

No judgmental adjustments during the COVID shock: suitable for production workflows and scale.

Closed loop, empirically

Test rejects on both raw series; fails to reject on either SSI-adjusted series. ACF and periodogram diagnostics corroborate.

freqseas: the framework as software

library(freqseas)
tst <- seas_test(AirPassengers)   # detect + specify
adj <- seas_adjust(AirPassengers) # ...→ identify → operate
freqseas seasonality test
 decision: seasonal (detection p = 2.86e-08, alpha = 0.05)
 spec: line (shoulder p = 0.219, phase R = 1.00)
 M = 19 (suggest_M, offset-free) | whitener: d = 0, AR(1) on M0 ordinates
SSI seasonal adjustment (line)
 phase rule: minimum  [declared identification]
 imputation: bootstrap, B = 1, targets = harmonics (6), seed = none
 post-adjustment detection p = 0.182

Actual package output (v0.0.0.9000), lightly abridged for the slide. The adjustment is stochastic by default — pass seed to pin the draw.

Solid — the paper

  • the \widehat{\Delta} detect test (EVT chain, Logistic null)
  • SSI surgery (operate)
  • ts / tsibble methods; keyed series mapped independently

Experimental — in motion

  • line-vs-band specification test
  • declared phase identification (minimum vs zero)
  • benchmarking to annual totals
  • fixed-factor / revisions workflow

→ Package under active development — collaboration welcome.

What to take away

A definition that can be tested. Seasonality as relative peak dominance in the frequency domain: a single population object, explicit about its primitives, stated in both plain and technical language.

A closed loop: definition → test → adjustment. \widehat{\Delta} with a Logistic null (no bandwidth, no kernel, no simulation) plus SSI, the adjustment operator aligned with the test’s population object. Coherence-by-construction — achievable, but not automatic.

Why it matters. Statistical offices publish millions of series under real resource constraints — BEA alone ≈ 4M across NIPA and the satellite accounts. Robustness, transparency, minimal parametric commitment, and scalability are design requirements, not luxuries — and a test and adjustment that answer the same question against the same object make the work easier to communicate: within agencies, between them, and with the public.

An invitation. A proof of concept that epistemic closure in seasonal adjustment is achievable. We invite researchers working in the time domain, state space, or elsewhere to build equivalent closed loops in their preferred formalism — so the field can communicate about definitions, not just procedures.

Thank you

The Seasons They Are A-Changin’: A Century of Definitions and a Way Forward

Working paper · U.S. Bureau of Economic Analysis

carter.bryson@bea.gov · gary.cornwall@bea.gov

The views expressed in this presentation are those of the authors and do not necessarily reflect the views of the Bureau of Economic Analysis or the U.S. Department of Commerce.

Appendix

Reached via links from the main deck — press Esc / O for the slide overview to return.

The null distribution — full derivation

1. Periodogram ordinates under H_0. For Z_t \sim \mathrm{WN}(0,\sigma^2), let \tau := \sigma^2. At Fourier frequencies \omega_j = 2\pi j/T, j \ge 1, I_T(\omega_j)/\tau \;\xrightarrow{d}\; \mathrm{Exp}(1), with asymptotic independence across distinct \omega_j (Politis & McElroy, 2019).

2. EVT for i.i.d. exponentials. For Y_1,\dots,Y_N \overset{\mathrm{iid}}{\sim} \mathrm{Exp}(1), \Pr\bigl(\textstyle\max_i Y_i - \log N \le x\bigr) \to e^{-e^{-x}}. Scaling by \tau: for M_g := \max_{j \in \mathcal{J}_g} I_T(\omega_j), \frac{M_g - \tau\log N_g}{\tau} \;\Rightarrow\; \mathrm{Gumbel}(0,1), so M_g \approx \mathrm{Gumbel}(\tau \log N_g,\, \tau).

3. Independence of M_0, M_1. By construction \mathcal{J}_1 \cap \mathcal{J}_0 = \emptyset, so M_0 and M_1 are functions of disjoint ordinates and asymptotically independent.

4. Gumbel difference is Logistic. For independent G_g \sim \mathrm{Gumbel}(\mu_g, \tau), the substitution u = e^{-(g_0-\mu_0)/\tau} (so f_{G_0}(g_0)\,dg_0 = e^{-u}\,du) reduces \Pr(G_1 - G_0 \le x) \;=\; \int_0^\infty e^{-u(1+a)}\,du \;=\; \frac{1}{1+a}, where a := e^{-(x - (\mu_1 - \mu_0))/\tau}. Hence G_1 - G_0 \,\sim\, \mathrm{Logistic}(\mu_1 - \mu_0,\, \tau).

5. Collect. Substituting \mu_g = \tau \log N_g gives \mu_1 - \mu_0 = \tau\log(N_1/N_0): \boxed{\widehat{\Delta} \,\big|\, H_0 \;\Rightarrow\; \mathrm{Logistic}\!\left(\tau\log\tfrac{N_1}{N_0},\,\tau\right)}

Beyond Gaussian WN. Davis & Mikosch (1999): the Gumbel limit for the periodogram maximum holds under non-Gaussian, finite-variance innovations; ordinates exhibit “almost i.i.d.” behavior and the exceedance point process converges to a Poisson limit. The Logistic null extends accordingly.

Practical form. Plug-in \widehat{\tau} = s^2; critical values come directly from the Logistic CDF, no simulation required.

Empirical size under colored-noise null DGPs

T = 200, N = 12, M = 23, \mathcal{P} = \{1\}; 10,000 reps per cell. Nominal \alpha = 0.05.

DGP Raw True AIC BIC Δ
AR(1), φ = 0.3 0.052 0.045 0.037 0.043 0.100
AR(1), φ = 0.5 0.051 0.047 0.036 0.045 0.083
AR(1), φ = 0.8 0.003 0.049 0.040 0.049 0.063
AR(1), φ = 0.95 0.000 0.051 0.042 0.051 0.055
MA(1), θ = 0.3 0.058 0.048 0.039 0.048 0.093
MA(1), θ = 0.7 0.066 0.045 0.038 0.043 0.088
ARMA(1,1) 0.056 0.042 0.036 0.043 0.071
AR(2), spectral peak 0.003 0.049 0.040 0.048 0.006

Takeaways. BIC pre-whitening (bold) is well-calibrated across DGPs (0.043–0.051). Raw \widehat{\Delta} is severely conservative under persistent AR(1). First-differencing a stationary series over-rejects. AIC is systematically mildly conservative.

Sensitivity of \widehat{\Delta} to the bin count M

Gaussian white-noise null; N = 12, \mathcal{P} = \{1\}; 10,000 reps per cell. Nominal \alpha = 0.05.

T M Ordinates / bin Rejection rate
200 11 9.0 0.050
200 19 5.2 0.049
200 23 4.3 0.048
200 31 3.2 0.049
600 11 27.2 0.047
600 19 15.7 0.050
600 23 13.0 0.050
600 31 9.6 0.049

Takeaway. Empirical size lands in [0.047, 0.050] across all (T, M) combinations. Because \widehat{\Delta} is the difference of maxima over pooled N_1 and N_0 ordinates (not within-bin), the Gumbel approximation stays accurate even when individual bins hold \sim 3 ordinates.

M \in \{15, 27\} excluded: seasonal frequencies \pi/3 and 2\pi/3 fall on bin boundaries.

Algorithm: Stochastic Spectral Imputation

Input. Observed x_t (t = 1,\dots,T); partition (\mathcal{P}, N, M); options Band, PhaseMode, q_D.

  1. Compute DFT: d_x \leftarrow \mathrm{DFT}(x_t).
  2. Identify seasonal bins \mathcal{M}_1 and non-seasonal bins \mathcal{M}_0 from \Omega_G(\mathcal{P}, N).
  3. Initial index sets: \mathcal{J}_S^{0} = \{j : \omega_j \in B_m,\, m \in \mathcal{M}_1\}, \quad \mathcal{J}_D^{0} = \{j : \omega_j \in B_m,\, m \in \mathcal{M}_0\}.
  4. (Optional band restriction.) If Band = between_seasonal_extremes: restrict \mathcal{J}_S and \mathcal{J}_D^{\mathrm{cand}} to Fourier indices in [B_{m_{\min}}, B_{m_{\max}}] (frequency range spanned by \mathcal{M}_1); else \mathcal{J}_S = \mathcal{J}_S^{0}, \mathcal{J}_D^{\mathrm{cand}} = \mathcal{J}_D^{0}.
  5. Donor filter. \tau \leftarrow \mathrm{Quantile}\bigl(\{|d_x(\omega_k)|^2\}_{k \in \mathcal{J}_D^{\mathrm{cand}}},\, q_D\bigr); \quad \mathcal{J}_D = \{k \in \mathcal{J}_D^{\mathrm{cand}} : |d_x(\omega_k)|^2 \le \tau\}.
  6. Initialize: d^* \leftarrow d_x.
  7. For each j \in \mathcal{J}_S:
    • Sample donor: k \sim \mathrm{Uniform}(\mathcal{J}_D); impute magnitude: |d^*(\omega_j)| \leftarrow |d_x(\omega_k)|.
    • Nyquist (\omega_j = \pi): determine sign s by PhaseModerandom: s \sim \mathrm{Uniform}(\{-1, +1\}); keep: s \leftarrow \mathrm{sgn}(\mathrm{Re}(d_x(\omega_j))); donor: s \leftarrow \mathrm{sgn}(\mathrm{Re}(d_x(\omega_k))). Set d^*(\omega_j) \leftarrow s \cdot |d^*(\omega_j)|.
    • Interior (\omega_j \ne \pi): determine phase \phi by PhaseModerandom: \phi \sim \mathrm{Uniform}(-\pi, \pi); keep: \phi \leftarrow \arg(d_x(\omega_j)); donor: \phi \leftarrow \arg(d_x(\omega_k)). Set d^*(\omega_j) \leftarrow |d^*(\omega_j)|\, e^{i\phi}.
    • Enforce conjugate symmetry: d^*(\omega_{T-j}) \leftarrow \overline{d^*(\omega_j)}.
  8. Return: x^*_t \leftarrow \mathrm{Re}\bigl(\mathrm{IDFT}(d^*)\bigr).

DGP for the power tables

Basic structural model (Busetti & Harvey, 2003) with AR(1) amplitude dynamics.

Equations. \begin{aligned} z_t &= \mu_t + S_t'\gamma_t + \epsilon_t, & \epsilon_t &\sim \mathrm{NID}(0,\sigma^2_\epsilon) \\ \mu_t &= \mu_{t-1} + \beta_{t-1} + \eta_t, & \eta_t &\sim \mathrm{NID}(0,\sigma^2_\eta) \\ \beta_t &= \beta_{t-1} + \zeta_t, & \zeta_t &\sim \mathrm{NID}(0,\sigma^2_\zeta) \\ \gamma_t &= \alpha + \rho\,\gamma_{t-1} + \kappa_t, & \kappa_t &\sim \mathrm{NID}(0,\sigma^2_\kappa) \end{aligned}

Components.

  • \mu_t: local level (random walk with drift \beta_t)
  • \beta_t: slope (integrated random walk)
  • S_t: (N{-}1)-vector of trigonometric seasonal regressors
  • \gamma_t: (N{-}1)-vector of amplitudes evolving as AR(1)
  • \epsilon_t: irregular innovation

Three scenarios.

Scenario ρ α Panel
Random-walk amplitudes 1 0 A
Stochastic stationary 0.95 0.01 B
Deterministic 0 varied C

Fixed across all. T = 200; N = 12 (monthly) or 4 (quarterly); \sigma^2_\epsilon = 1; \sigma^2_\zeta = 0; \sigma^2_\eta \in \{0,\, 0.5\}; 5% nominal size; 5,000 replications per cell.

Swept parameter.

  • Panels A–B: \sigma_\kappa \in \{0.01,\, 0.02,\, 0.03,\, 0.04,\, 0.05\}
  • Panel C: \alpha \in \{0.1,\, 0.2,\, 0.3,\, 0.4,\, 0.5\}

Why these three? Busetti–Harvey fix \rho = 1: amplitudes evolve as a random walk and the seasonal component’s variance can eventually dominate z_t. Allowing \rho to vary gives a stationary-but-persistent case (\rho = 0.95) and a memoryless deterministic case (\rho = 0). Together the three cover the stochastic-to-deterministic spectrum of seasonal signals while preserving comparability to the canonical BSM literature.

Panel A: seasonal unit root (\rho = 1)

Monthly, T = 200, 5,000 replications per cell. Bold: closer to target.

MAE ↓ Corr ↑ Spec MAE ↓ Dip ↓ VR ≈ 1
σκ SSI X13 SSI X13 SSI X13 SSI X13 SSI X13
0.01 1.10 1.02 0.93 0.83 0.31 0.50 0.22 0.38 0.94 0.74
0.02 1.10 1.02 0.90 0.82 0.37 0.52 0.21 0.39 0.97 0.74
0.03 1.11 1.02 0.86 0.81 0.43 0.54 0.21 0.39 1.02 0.76
0.04 1.13 1.03 0.82 0.79 0.49 0.57 0.23 0.40 1.09 0.77
0.05 1.15 1.03 0.79 0.77 0.55 0.59 0.23 0.38 1.17 0.80

Takeaway. X-13 wins MAE by over-smoothing. SSI wins every structural metric. VR gap widens with signal strength: SSI scales from 0.94 to 1.17 (tracking the underlying variance); X-13 stays flat at 0.74–0.80.

Panel B: stochastic stationary (\rho = 0.95)

Monthly, T = 200, 5,000 replications per cell. Bold: closer to target.

MAE ↓ Corr ↑ Spec MAE ↓ Dip ↓ VR ≈ 1
σκ SSI X13 SSI X13 SSI X13 SSI X13 SSI X13
0.01 1.10 1.02 0.91 0.83 0.34 0.50 0.21 0.38 0.95 0.74
0.02 1.11 1.02 0.90 0.83 0.35 0.51 0.21 0.38 0.96 0.75
0.03 1.11 1.03 0.90 0.82 0.38 0.53 0.21 0.38 0.98 0.76
0.04 1.11 1.03 0.88 0.81 0.41 0.54 0.21 0.37 1.00 0.78
0.05 1.12 1.04 0.87 0.80 0.45 0.57 0.21 0.37 1.03 0.80

Takeaway. Same qualitative pattern as Panel A, at smaller magnitudes. SSI’s VR lands near 1.00 throughout and Dip is essentially constant at 0.21 — the surgical nature of SSI shows most clearly here, because the seasonal signal is weaker.

Panel C: deterministic (\rho = 0)

Monthly, T = 200, 5,000 replications per cell. Bold: closer to target.

MAE ↓ Corr ↑ Spec MAE ↓ Dip ↓ VR ≈ 1
γ0 SSI X13 SSI X13 SSI X13 SSI X13 SSI X13
0.10 1.10 1.02 0.94 0.84 0.30 0.49 0.21 0.38 0.94 0.74
0.20 1.10 1.02 0.91 0.84 0.33 0.50 0.21 0.39 0.95 0.74
0.30 1.11 1.02 0.89 0.84 0.37 0.50 0.21 0.39 0.97 0.74
0.40 1.11 1.02 0.86 0.84 0.41 0.49 0.22 0.38 1.00 0.74
0.50 1.12 1.02 0.84 0.84 0.45 0.49 0.21 0.38 1.04 0.74

Takeaway. X-13’s VR sits flat at 0.74 regardless of signal strength — over-smoothing is independent of what it is smoothing. SSI’s VR scales from 0.94 to 1.04, tracking the underlying variance structure. Correlation ties at \gamma_0 = 0.50 because both methods converge on a stable deterministic pattern.

Housing starts — periodogram diagnostic

Periodogram (\log_{10}; seasonal bins highlighted)

→ SSI ordinates in seasonal bins sit at the non-seasonal floor. X-13’s ordinates dip below the floor — the canonical spectral trough of filter-based methods.

SSI surgery — explore

Genuine freqseas output: all variants and donor draws precomputed in R (R/make_w4_data.R); the head window (first 12 observations) is unadjusted by construction; displayed level totals are forced to the NSA yearly sums at every frame (pro-rata, freqseas::benchmark_totals).