Quarterly estimates from 1962 to 2024 combining functional data analysis and Bayesian state-space models
import pandas as pd df = pd.read_csv("https://www.distributionaldynamics.com/data/dd_series.csv") items = pd.read_csv("https://www.distributionaldynamics.com/data/items/dd_items_SCF.csv")
use "https://www.distributionaldynamics.com/data/dd_series.dta", clear * balance-sheet items (SCF), a separate file: use "https://www.distributionaldynamics.com/data/items/dd_items_SCF.dta", clear
using CSV, DataFrames, Downloads url = "https://www.distributionaldynamics.com/data/" df = CSV.read(Downloads.download(url * "dd_series.csv"), DataFrame) items = CSV.read(Downloads.download(url * "items/dd_items_SCF.csv"), DataFrame)
dd_series: one row per quarter, 1962Q3–2024Q1, with decile shares, totals and means per household of consumption, income and wealth.
Five U.S. household surveys (C = consumption, I = income, W = wealth; *PSID wealth from 1984, consumption from 1999):
dd_tidy_long: tidy long format; groups (bottom 50 / next 40 / top 10, quintiles, deciles) by survey.
*Stocks: next 40 and top 10 only. Compare: Fed DFA
Main data are posterior point estimates; these files carry the posterior spread.
Derived from the original surveys; the original providers’ terms apply.
DD_replication: estimation code and replication package. DD_data: scripts that rebuild moments, microdata and bands.
Data: CC BY 4.0, free to use with attribution (please cite the paper). Code: MIT.
Explore the synthetic distributional data across consumption, income, and wealth. Select a variable and metric, and show deciles or the bottom 50 / next 40 / top 10. Gray bands indicate NBER recession periods.
Source: Bayer, Calderon & Kuhn (2026), PSID view. Decile groups D1 (bottom 10%) to D10 (top 10%); totals in trillions, means per household, both in 2019Q4 USD (CPI-U). Wealth starts in 1984 (PSID), consumption in 1999.
Source: Bayer, Calderon & Kuhn (2026). Share of households in each pair of deciles. I × W: SCF view, 1962–2024; C × I and C × W: PSID view, 1999–2024.
We develop a new method for deriving high-frequency synthetic distributions of consumption, income, and wealth. The core of the method is to treat the distributional data as a time series of functions whose underlying factor structure follows a state-space model, estimated using Bayesian techniques. The method incorporates different sources of microdata regardless of their frequency and variable coverage.
PSID, SCF, CEX, SIPP, and CPS — each with different frequency and variable coverage
Quantile functions for marginals plus copula for joint dependence
PCA on Legendre polynomial coefficients captures variation in a few factors
Factor dynamics follow a VAR in companion form with aggregate covariates
MCMC with Kalman smoother produces posterior draws of the latent factors
High-frequency quarterly output: full distributions for all 247 quarters
State equation
$$\begin{bmatrix} F_t \\ Y_t \end{bmatrix} = \begin{bmatrix} \Phi_{FF} & \Phi_{FY} \\ \Phi_{YF} & \Phi_{YY} \end{bmatrix} \begin{bmatrix} F_{t-1} \\ Y_{t-1} \end{bmatrix} + \varepsilon_t, \qquad \varepsilon_t \sim \mathcal{N}(0, \Omega)$$Observation equation
$$\tilde{\theta}^j_t = H^j_t \left( \alpha^j \, \hat{\Gamma}^{\text{MF}} F_t + \nu^j_{F,t} \right)$$Here \(F_t\) are the latent distributional factors, \(Y_t\) are aggregate covariates, \(\hat{\Gamma}^{\text{MF}}\) is the factor loading matrix from PCA, and \(H^j_t\) is a selector matrix for each dataset \(j\). The model handles mixed frequencies through the time-aggregation parameter \(\alpha^j\).
@techreport{BayerCalderonKuhn2026,
author = {Bayer, Christian and Calderon, Luis and Kuhn, Moritz},
title = {Distributional Dynamics},
institution = {CEPR},
type = {Discussion Paper},
number = {19829},
year = {2026},
url = {https://www.distributionaldynamics.com}
}