High-Frequency Synthetic Distributions of Consumption, Income, and Wealth

Quarterly estimates from 1962 to 2024 combining functional data analysis and Bayesian state-space models

Christian Bayer (Bonn, CEPR, IZA, CESifo), Luis Calderon (Bonn), Moritz Kuhn (Mannheim, CEPR, IZA, CESifo)

Load the data

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.


Release Notes


Data Sources and Downloads

Inputs of the model

Five U.S. household surveys (C = consumption, I = income, W = wealth; *PSID wealth from 1984, consumption from 1999):

CPS
1967–2022 (I)
PSID
1968–2021 (I,W,C)*
CEX
1984–2021 (C,I)
SCF
1962–2022 (I,W)
SIPP
1983–2022 (I,W)
1962 2024

Survey micro data

The household-level files the estimation reads, cleaned and in 2019Q4 dollars (gzipped CSV).

Derived from the original surveys; the original providers’ terms apply.

Aggregate anchors

Consumption, income and wealth per household from the national accounts, and the number of households. They set the dollar levels of the outputs.

aggregate_anchorsCSV

Outputs of the model

AGroup statistics

Means and shares of consumption, income and wealth by group, every quarter. Start here. Each comes in a PSID and an SCF view: the distribution as that survey measures it (the SCF covers the top tail better). Income also comes in two CPS views (1967–1993 and 1993 on).

dd_series wide, one row per quarter: decile means, shares and totalsCSVStata
dd_tidy_long long, one row per quarter × group: deciles, quintiles and bottom 50 / next 40 / top 10, also across variables (e.g. consumption by income quintile)CSV
dd_items_SCF balance sheets by wealth group, all itemsCSVStata
products/ consumption with liquid assets, total assets, debt and mortgagesSee FAQGitHub

*Stocks: next 40 and top 10 only. Compare: Fed DFA

BMicro data

1,000 cells per quarter (C × I × W deciles) with weight and cell means : compute any statistic .

dd_microdata weight cop_share; means consum, income, wealthCSVStata
PSID_synthetic_microdata_imp1–5 the same file at five posterior draws, for standard errors12345
The model: observation and state equations

CCoefficients

: 1,730 Legendre coefficients per quarter for each survey view , describing the marginals and the copula: the model’s plus the trend.

<survey>_coefficients_normal in sample, with the trendPSIDSCFCEXCPS 67–92CPS 93+SIPP 1SIPP 2SIPP 3
<survey>_coefficients_average time-averaged trend, for counterfactualsPSIDSCFCEXCPS 67–92CPS 93+SIPP 1SIPP 2SIPP 3

DFactors

Distributional factors (8) and aggregate factors (11): the state of the model, which drives everything above.

smoothed_factors posterior mode: x1–x8 , x9–x32 lags, x33–x43 Smoothed (mode)
smoothed_factor_draws 200 posterior draws (parameter and state uncertainty) and 5/50/95% bandsPosterior draws5/50/95% bands

Data: CC BY 4.0, publicly available. Please cite the paper when you use them. Code: MIT.


What are you looking for?

Pick your question for a short description of the product and a direct download. Everything is quarterly and publicly available. The data guide (PDF) describes all of it in plain English.

Inequality over time: top 10%, bottom 50%, deciles or quintiles?

Mean per household and share of the total for consumption, income and wealth, by decile, quintile and bottom 50 / next 40 / top 10. Two views of the same distribution: as the SCF measures it (income and wealth, 1962-Q3 to 2024-Q1, best for the top tail) and as the PSID measures it (income from 1968, wealth from 1984, consumption from 1999). Income also comes as the CPS measures it, in two views: cps1967 (1967-Q4 to 1993-Q3) and cps (from 1993-Q4), separate because the CPS changed how it measures income in 1993. Use dd_tidy_long for one row per quarter and group, dd_series for one row per quarter with decile columns.

dd_tidy_longCSV
What exactly covers 1962 to 2024?

The model estimates the joint distribution in every quarter from 1962-Q3 to 2024-Q1. Published for that full period: the factors, everything in the SCF view (income and wealth), the balance-sheet items (pensions from 1983) and the national-accounts anchors. Files in the PSID view follow the PSID’s own coverage (income from 1968, wealth from 1984, consumption from 1999), and the micro data start in 1984. Our scripts turn the factors into the model’s full distribution for any quarter, including consumption before 1999 (with a time-averaged trend).

factors, 1962-Q3 to 2024-Q1ModeDrawsBands
SCF view: group statistics, coefficients, functional datadd_tidy_longdd_series CSVdd_series StataCoefficientsFunctional data
balance-sheet items and anchorsItems CSVItems StataAnchors
factors → full distribution, any quarterPython scriptJulia script
Consumption by income or wealth group (cross-tabulations)?

Each variable within groups ranked by another: for example consumption by income quintile, or wealth of the top 10% by income. Quintiles and bottom 50 / next 40 / top 10, in every direction for the PSID view; income by wealth group and wealth by income group for the SCF view. They come from the estimated joint distribution, so they add up to the totals.

dd_tidy_long rows where ranked_by differs from variableCSV
Household-level data to compute your own statistics?

Synthetic micro data for the PSID view: each quarter from 1984-Q2 to 2024-Q1, households are grouped into 1,000 cells by their consumption, income and wealth decile. Each cell has a population weight (cop_share) and its mean consumption (from 1999-Q2), income and wealth. Weighted means, shares or your own groups work as with survey data.

dd_microdataCSVStata
Standard errors and uncertainty?

The micro data come in five implicates, the same file at five draws from the posterior. Compute your statistic on each and combine them as with the SCF implicates. For the factors there are 200 posterior draws and 5/50/95% bands. The Explorer shows a 95% band.

PSID_synthetic_microdata_imp1–512345
smoothed_factor_draws and bandsDrawsBands
Quarterly factor estimates, 1962–2024?

The eight distributional factors that drive the joint distribution (x1–x8), with their lags and the aggregate factors, 1962-Q3 to 2024-Q1: the posterior mode, 200 posterior draws, and 5/50/95% bands. Feed a factor path (ours or a counterfactual) to the DD_data scripts to get the distribution it implies.

smoothed_factorsModeDrawsBands
Household balance sheets?

Real estate, mortgages, consumer credit, pensions (from 1983) and stocks: mean per household and share of the total by wealth group (bottom 50 / next 40 / top 10, as in the Fed’s Distributional Financial Accounts), by income quintile and by own decile, SCF view. Stocks are published for the next 40 and top 10 only.

dd_items_SCF all itemsCSVStata
Debt, liquid assets or mortgages alongside consumption?

Four more joint distributions, each estimated separately with consumption and two balance-sheet measures, quarterly 1962-Q3 to 2024-Q1 in the SCF and PSID views: group means and shares (deciles, quintiles, bottom 50 / next 40 / top 10, and each measure by the groups of the others) and the quarterly share of households with no debt. Gross liquid assets are deposits, CDs, savings bonds, stocks and mutual funds; total assets exclude pensions.

Gross liquid × consumer debtGroupsShare with no debt
Total assets × total debtGroupsShare with no debt
Gross liquid × mortgage debtGroupsShare with no debt
Income × mortgage debtGroupsShare with no debt
Another statistic: a percentile, a Gini, your own groups?

The distribution of every quarter is stored as polynomial coefficients, one file per survey view. Our Python and Julia scripts turn them into shares, means, quantiles, group means across variables or micro data, with posterior bands.

<survey>_coefficients_normalPSIDSCFAll surveys
The national-accounts totals the estimates are anchored to?

Consumption, income and wealth per household from the national accounts, and the number of households. They set the dollar levels of every output.

aggregate_anchorsCSV
The survey data the model starts from?

The cleaned household files from the CPS, PSID, CEX, SCF and SIPP that the estimation reads (gzipped CSV). They are derived from the original surveys, whose providers’ terms apply.

Replicate the estimates or change the model?

The replication package has the code, the processed inputs and the estimated parameters. Reproducing the baseline results takes under 30 minutes; re-estimating the baseline model takes up to 24 hours.

Everything in one document?

The data guide explains every product, its coverage and its caveats in plain English. The codebook lists every column of every file.

Something missing, or a question?

Open an issue on GitHub or write to us.


Inequality, quarter by quarter

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.

Variable
Metric
Groups
Show
Year range
Drag handles or use arrow keys to zoom · double-click to reset

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. The 95% band covers parameter and factor uncertainty (200 posterior draws).

Joint distribution
4 fps
1999-Q2
X-axis: IncomeY-axis: ConsumptionZ-axis: Pop. Share
Quarter

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.


From Microdata to Synthetic Distributions

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.

1

Microdata

PSID, SCF, CEX, SIPP, and CPS — each with different frequency and variable coverage

2

Functional Representation

Quantile functions for marginals plus copula for joint dependence

3

Dimensionality Reduction

PCA on Legendre polynomial coefficients captures variation in a few factors

4

State-Space Model

Factor dynamics follow a VAR in companion form with aggregate covariates

5

Bayesian Estimation

MCMC with Kalman smoother produces posterior draws of the latent factors

6

Synthetic Distributions

High-frequency quarterly output: full distributions for all 247 quarters

State equation

Observation equation

Here are the latent distributional factors, are aggregate covariates, is the factor loading matrix from PCA, and is a selector matrix for each dataset . The model handles mixed frequencies through the time-aggregation parameter .


Code

All code is open source (MIT). There are two repositories, depending on what you want to do.

Use the estimates: DD_data

Short scripts that work with the downloads above. Python and Julia versions do the same things and need only standard packages.

  • Factors → coefficients: turn a path of the factors (ours, or your own counterfactual) into the distribution of every quarter.
  • Coefficients → statistics: shares, means and quantiles of consumption, income and wealth.
  • Coefficients → micro data: build the synthetic micro data file.
  • Group means across variables: e.g. consumption by income quintile.
  • Posterior bands: uncertainty for any of these.

Rebuild the estimates: DD_replication

The paper’s replication package. The processed survey files and aggregate series it reads are included. Reproducing the baseline estimates takes two steps:

  1. Estimation (up to 24 hours): fit the baseline model. Optional, since the estimated parameters are included.
  2. Results (under 30 minutes): produce the baseline figures and tables.

The full replication also re-estimates the robustness and simulation exercises, which takes several days depending on the number of cores.


Citation

Bayer, C., Calderon, L. and Kuhn, M. (2026). “Distributional Dynamics.” CEPR Discussion Paper 19829.

BibTeX

@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}
}