# The Earning–Owning Gap dataset, version 1.0.2

Annual panel for the United States, Germany, the United Kingdom and France, 1950–2024.

**Suggested citation**
Koziol, T. (2026). *The Earning–Owning Gap dataset* (Version 1.0.2) [Data set]. Bubble Tracker. https://bubble-tracker.com/research/earning-owning-gap

Research brief: https://bubble-tracker.com/research/earning-owning-gap
Released: 17 October 2026. Licence: CC BY 4.0 for the data, MIT for the code (see LICENSE.txt). Please also cite the World Inequality Database when you use the data.

## The measure

The earning–owning gap Λ is the number of years a median earner would need to work, saving everything, to own the average adult's private wealth:

    Λ = private wealth per adult / median labour income
      = β × (1 / α_L) × R

- β: net private wealth / net national income
- α_L: labour share of national income at factor cost (WID wlsnnii999; includes the labour part of mixed income). Mean labour income = α_L × national income per adult, which allocates net taxes on production in proportion, as in WID's pre-tax income concept
- R: mean labour income / median labour income

The identity holds exactly in every row. In logs, the change in Λ splits exactly into the three contributions `contrib_beta`, `contrib_inv_alpha` and `contrib_R`.

## Files

| File | Rows | Content |
|---|---|---|
| `earning_owning_gap_panel_v1.csv` | 300 | Main panel: one row per country and year |
| `decade_contributions_v1.csv` | 32 | Log change of Λ per decade, split into the three components |
| `robustness_variants_v1.csv` | 1,973 | Λ recomputed with alternative labour shares, income ratios and wealth definitions |
| `robustness_tests_v1.csv` | 30 | Tests of the 1970s trough and of the post-2010 rise, per variant |
| `anchor_checks_v1.csv` | 12 | Checks against Piketty & Zucman (2014) and the BLS labour share |
| `fulltime_earnings_mean_median_v1.csv` | 185 | Mean and median earnings of full-time workers from national statistics (robustness only) |
| `us_psz_median_check_v1.csv` | 51 | US 1962–2014: actual median labour income per adult (Piketty, Saez & Zucman) against the proxy used in the panel |
| `brief_numbers_v1.csv` | 141 | Every number quoted in the research brief, with the file, columns and calculation behind it |
| `earning_owning_gap_code_v1.zip` | | Python code: `src/` downloads the WID, BLS and earnings sources and rebuilds the panel, decade, robustness, anchor and earnings files; `checks/` holds the scripts for the US Piketty–Saez–Zucman check and for `brief_numbers_v1.csv`, which need the PSZ (2018) and Piketty–Zucman (2014) files and JST R6 |
| `SHA256SUMS.txt` | | Checksums |

## Main panel columns

| Column | Meaning | WID code |
|---|---|---|
| `iso2`, `country`, `year` | Country code, name and year | |
| `Lambda` | Earning–owning gap, years | |
| `beta` | Net private wealth / NNI | `wpweali999` |
| `alpha_L` | Labour share of national income at factor cost (1970+ observed; earlier back-cast, see flags) | `wlsnnii999` |
| `R` | Mean / median income ratio used for Λ (proxy, see below) | |
| `R_raw` | R before outlier handling and interpolation | |
| `Lambda_H`, `beta_H` | Housing-only variant: private housing assets (gross) / NNI | `wpwhoui999` |
| `Lambda_median`, `wealth_median` | Median wealth / median labour income; median net personal wealth | `thwealj992` |
| `dlog_Lambda`, `contrib_beta`, `contrib_inv_alpha`, `contrib_R` | Log change since `base_year` (1950) and its three exact parts | |
| `ni_per_adult` | National income per adult | `anninci992` |
| `wealth_per_adult`, `mean_labour_income`, `median_labour_income` | Levels in constant local currency, deflated with WID's national income price index (based on the GDP deflator), at the prices of WID's base year (the latest year of the release) | |
| `comp_share`, `mixed_share` | Compensation of employees and net mixed income / NNI | `wcomhni999`, `wnmxhni999` |
| `alpha_corp` | Labour share of corporate net value added | `ylscnvi999` |
| `beta_pension`, `beta_personal` | Pension and life-insurance wealth / NNI; net personal wealth / NNI | `wpwpeni999`, `whweali999` |
| `ptinc_mean`, `ptinc_p50`, `ptinc_p50avg` | Pre-tax national income per adult: mean, P50 threshold, P50–P51 average | `aptincj992`, `tptincj992` |
| `diinc_mean`, `diinc_p50` | Disposable income: mean and P50 threshold | `adiincj992`, `tdiincj992` |
| `lab_mean_fr`, `lab_p50_fr` | France only, 1970–2014: pre-tax labour income mean and P50 | `apllinj992`, `tpllinj992` |
| `alpha_nfb` | US nonfarm business labour share (BLS via FRED, PRS85006173) | |
| `flags` | Every imputation for that row, separated by semicolons | |

WID population codes: `992` = adults aged 20+, `j` = equal split within couples, `999` = all ages.

## Imputation flags

| Flag | Meaning |
|---|---|
| `R_proxy_ptinc` | R is the mean/median ratio of pre-tax national income, not of labour income (all rows) |
| `alpha_backcast_comp_mixed` | α_L before 1970 (US, GB, FR) back-cast from compensation of employees plus two-thirds of mixed income |
| `alpha_backcast_corp` | α_L before 1970 (DE) back-cast from the corporate labour share |
| `R_interpolated` | R interpolated between observed years (mainly Germany before 1980; also UK 1961) |
| `R_outlier_replaced` | Single-year spike replaced by interpolation (Germany 1970) |
| `R_same_as_previous_year` | R equal to the previous year's value (to five decimals). Usually WID has extended the previous year's income distribution (e.g. US and France 2024, UK 1981 and 2020); for Germany 1969 and 1971 it is a side effect of interpolation and of the 1970 outlier replacement |
| `housing_share_carried` | β_H missing; housing share of wealth held at its first observed value |
| `wealth_p50_interpolated` | Median wealth interpolated (Germany before 1980) |
| `wid_repeat_<col>` | WID value identical to the previous year, usually carried forward by WID |

## What to keep in mind

1. **Median labour income is a proxy.** Among these four countries, the WID bulk data contain a labour-income distribution only for France (1970–2014). For all four countries R uses the pre-tax national income distribution, which includes capital income. The proxy overstates the level of Λ: by 3–14% in the US 1970–2014 compared with the actual Piketty–Saez–Zucman median (`us_psz_median_check_v1.csv`), and, in the latest year, by 4% (France) to 30% (US) compared with full-time earnings (up to 35% in the US in 2022). It changes the growth of Λ much less than its level.
2. **The labour share before 1970 is back-cast** (Germany from the corporate labour share). From 1970 the labour share is observed.
3. **The decomposition attributes change; it does not explain it.** A rising β can come from asset price gains or from saving. Piketty & Zucman (2014, Table A104) find that saving explains more than all of Germany's 1970–2010 rise and capital gains 79–97% of the UK's.
4. **Britain after 2020.** About two-thirds of the 2021–2024 fall in Britain's wealth-to-income ratio came from pension and life-insurance wealth; excluding it, Britain's gap still rose from 2010 to 2024.
5. **Germany 1970.** The raw WID income ratio for Germany in 1970 is an outlier and is replaced by interpolation (flag `R_outlier_replaced`). Measured from 1971, Germany's gap rises ×3.4, 86% of it from β.

## Sources

- World Inequality Database (WID), https://wid.world. Bulk download dated 15 October 2026, retrieved 16 October 2026.
- US Bureau of Labor Statistics, nonfarm business labour share, via FRED (PRS85006173).
- Full-time earnings: US Census Bureau CPS ASEC Table P-43; ONS NES and ASHE; INSEE séries longues sur les salaires; Eurostat Structure of Earnings Survey.
- Piketty, T., Saez, E. & Zucman, G. (2018). Distributional National Accounts: Methods and Estimates for the United States. *Quarterly Journal of Economics* 133(2). US check file only.
- Piketty, T. & Zucman, G. (2014). Capital is Back: Wealth-Income Ratios in Rich Countries 1700–2010. *Quarterly Journal of Economics* 129(3). Anchor checks only.

- US Bureau of Labor Statistics, CPI-U, US city average, all items (CUUR0000SA0), annual averages 1970 and 2010: used only in `brief_numbers_v1.csv` for the US median check.

The build code also reads the Jordà–Schularick–Taylor Macrohistory Database (release 6) for exploratory house-price and credit series. None of them enters the published files or the brief, and they are not redistributed here because of its terms of use (CC BY-NC-SA 4.0); the code downloads them from https://www.macrohistory.net/database/.

## Reproduce

Unzip `earning_owning_gap_code_v1.zip`, then:

    uv sync
    uv run python src/download.py
    uv run python src/build_panel.py
    uv run python src/charts.py
    uv run python src/earnings.py
    uv run python src/robustness.py
    uv run python src/release.py          # writes the published *_v1.csv files

The two files that need other inputs:

    uv run python checks/psz_median_check.py PSZ2018_distrib_nominal.dta us_psz_median_check_v1.csv
    uv run python checks/brief_numbers.py release/ path/to/older_inputs/   # PSZ check, Piketty–Zucman (2014) appendix tables, JST R6

## Versions

- 1.0 (17 October 2026): first release.
- 1.0.1 (17 October 2026): exact Piketty–Zucman Table A5 values in `anchor_checks_v1.csv`; new flag `R_same_as_previous_year` in the panel (no values changed); `brief_numbers_v1.csv` updated for the corrected brief (US median check now uses CPI-U); scripts for the US check and the numbers file added to the code; README corrections (labour-share definition, price base).
- 1.0.2 (17 October 2026): `brief_numbers_v1.csv` adds the 2024 housing and pension shares of private wealth quoted in the new section on what counts as wealth. No other file changed except the code zip (updated `checks/brief_numbers.py`).
