Dynamic Factor Models

Weekly Economic Trackers — Session 2

Tyler Sotomayor · Columbia University

Last session, one witness. Today, dozens.

  • Session 1: the Kalman filter optimally reads one noisy indicator
  • Real nowcasting: FRED-MD curates 127 monthly series; the Fed watches hundreds
  • The oldest fact in macro: comovement — when activity turns, it turns everywhere
  • Burns & Mitchell (1946) saw it; Sargent & Sims (1977) formalized it:

The business cycle is low-dimensional. A handful of factors — often one — drive the common movement of everything we measure.

You’ve already seen the payoff

Practicum 1, four public series, one factor:

  • correlation 0.90 with the official ten-series WEI
  • pre-2020 quarterly R² of 0.63 against GDP growth

Today: the machinery that makes this principled — and that fixes what PCA cannot do.

The static factor model

x_t = \Lambda f_t + e_t, \qquad r \ll N

  • \Lambda: loadings — each series’ exposure to the common state
  • e_t: idiosyncratic — measurement error + sector-specific shocks
  • Each standardized series splits: common share vs. idiosyncratic share
  • A good indicator = high common share, not individually interesting

The rotation problem

For any invertible M: $;(M^{-1})(M f_t) $ fits identically.

  • Factors are identified only up to rotation, sign, scale
  • Managed by normalization: \operatorname{Var}(f)=I, \Lambda'\Lambda diagonal, sign convention
  • Two honest consequences:
    • factors have no units → scale against GDP before publishing a number
    • “the activity factor” is an interpretation, earned by loadings, not algebra

Principal components, and why it works

Least squares on \sum_{i,t}(x_{it} - \lambda_i' f_t)^2 → top eigenvectors. Then:

  • Consistency as N, T \to \infty (Stock–Watson 2002; Bai–Ng 2002), even with weakly correlated idiosyncratics
  • More series help: every series is another noisy vote on f_t
  • Choosing r: Bai–Ng criteria + loadings inspection; nowcasting practice: 1–2 factors

What PCA cannot do: dynamics (no forecasts), missing data (no ragged edge), uncertainty (no bands). All three point back to Session 1.

The dynamic factor model

\begin{aligned} x_t &= \Lambda f_t + e_t \\ f_t &= A_1 f_{t-1} + \cdots + A_p f_{t-p} + u_t \\ e_{it} &= \rho_i e_{i,t-1} + \varepsilon_{it} \end{aligned}

State space: stack f_t and the e_{it} in the state, Z = (\Lambda \;\; I_N), H = 0 — the noise is promoted into the state, where it has dynamics.

Kalman filter now delivers: factor + bands · forecasts · likelihood · ragged edge for free · add the tent-weight GDP row → Giannone–Reichlin–Small (2008)

Estimation, three ways

  1. PCA — fast, transparent; balanced panels only (= the P1 build)
  2. Two-step (Doz–Giannone–Reichlin 2011) — PCA for parameters, then one Kalman pass over the ragged panel; the daily-production workhorse
  3. ML via EM (Doz et al. 2012; Bańbura–Modugno 2014) — smoother ↔︎ regressions until convergence; arbitrary missingness; the central-bank standard

Course path: P1 did (1) → exercises do (2) → capstone does (2) or (3).

The news decomposition, operational

\Delta\text{nowcast} \;=\; \sum_{i \,\in\, \text{releases}} w_i \times \big(\,x_{it} - \mathbb{E}[x_{it} \mid \Omega_{old}]\,\big)

  • w_i: from the Kalman gain — big for high common share, short lag, clean measurement
  • “Retail sales surprised +0.4pp → nowcast +0.07pp,” derived
  • Careful: the model’s surprise ≠ the consensus surprise — say which expectation was beaten

Anatomy of the WEI (Lewis et al. 2022)

  • 10 weekly series, 5 sectors — breadth is variance insurance (P1’s claims-only trough was 11pp too deep in April 2020)
  • 52-week differences — seasonal adjustment in disguise; price: trailing-year units
  • One factor, PCA, GDP scaling — WEI = 2 reads “≈2% growth over the year”
  • 2020 forced a methodology adjustment — their production version of the standardization trap from the P1 journal

Cousins: CFNAI (85 series, monthly) · ADS (mixed-frequency exact DFM)

Practical wisdom

  1. Breadth beats depth — sectoral duplication correlates the “idiosyncratic” noise
  2. The reference population is a choice — calibrate on normal times or model outliers; never silently
  3. Transformations do seasonal work — know what 52-week differencing assumes (→ Session 3)
  4. Read loadings like coefficients — P1’s bank credit loads ≈ 0 because credit-line drawdowns make it acyclical; the model was right
  5. One factor until proven otherwise

Next

  • Practicum 1 is live — brief, instructor build, journal; Exercises 4–5 upgrade it to the two-step DFM
  • Session 3: what 52-week differencing was hiding — seasonal adjustment of high-frequency data, on hourly electricity load
  • Reading: Doz–Giannone–Reichlin (2011); reread Giannone–Reichlin–Small §3 — it will look familiar now