SPB Git forge

spb/wp18_uqo

Public
6commits 1branches 0releases
5.4 MBsize
maindefault branch
yesterdaylast push
TeX 53.2% Python 46.6%
14.6 KB

# 🏠 Housing, Leverage, and Intergenerational Wealth Inequality

UQO Working Paper No. 18 — A Dynamic General Equilibrium Theory

Paper Python Data Reproducible Institution Author

TL;DR — A theoretical paper (no empirical estimation) on the conditions under which inherited wealth, mortgage leverage, nominal debt, housing supply and down-payment constraints generate persistent owner–renter wealth gaps among households with the same labour-income process, and on what an unanticipated inflation changes. A three-stage benchmark yields nine propositions (closed-form ownership-entry threshold, leverage multiplier with LTV-independent break-even, closed-form tenure persistence, existence/uniqueness, surprise-inflation accounting and impact). A 12-period OLG model with nominal annuity mortgages (FRM / 5-year term / ARM), gifts and estates, and segmented rental and construction sectors is solved in stationary general equilibrium and along perfect-foresight transitions. Transfers generate a 0.95 income-year wealth gap at mid-life and a rank–rank slope of 0.34 that vanishes without transfers; prices absorb 64–66 % of the partial-equilibrium ownership response to the down-payment constraint; no multiple equilibria; and, because households are net nominal creditors, a 10 % surprise lowers the real house price by 0.45 % where the benchmark predicted a rise.


# 📌 Status

Item Value
Version 1.0 (October 2026)
SSRN not yet submitted
Journal — (target: a field journal in housing or macro-finance; see research/progress.md, Phase 4 verdict)
Code & data fully reproducible from make all; no microdata (illustrative calibration with verified Canadian comparison points)

# 🎯 What this paper does

The paper asks under what conditions inherited wealth, mortgage leverage, nominal debt, housing supply and down-payment constraints generate persistent owner–renter wealth inequality among households with identical income processes, and what an unanticipated inflation changes. It answers in two steps.

A benchmark (three stages of life, two-period generations, unit housing demand, nominal mortgage, inter-vivos transfer at the child's purchase) has closed forms. The ownership threshold is the down-payment bound plus the stage-1 consumption of the marginal buyer, $\hat b = (dp - \Lambda\rho)/(1-\Lambda) - y_1$; the parent–child tenure persistence is the second eigenvalue of the dynasty chain, $\lambda = G(\hat y_R) - G(\hat y_R - e_3 p)$, positive only if the house is net wealth at the end of life; a stationary equilibrium exists and is unique when the entry-threshold channel dominates the ladder channel; the revaluation of a price-level surprise is zero-sum with the lender and its general-equilibrium sign is that of a density-weighted net nominal position of the parents whose children are at the tenure margin.

A quantitative OLG economy (12 five-year periods, four house sizes and continuous rented services, Rouwenhorst income risk, 25-year constant-payment nominal mortgages under three contracts with LTV and nominal payment-to-income constraints, gift at the child's entry and estate at the parent's death, segmented durable stocks, lender balance sheet) is solved numerically with an illustrative calibration and every result at fixed prices is labelled as such.

# 🏆 Headline results

Object Value (baseline / experiment)
Owner–renter net-worth gap at 40–44, equal income process 0.95 years of income
P(child owns at 35–39 | parent owner / renter) 0.54 / 0.35; rank–rank wealth slope 0.34
Same, without bequests 0.38 / 0.38; rank–rank −0.01 (persistence vanishes)
Share of the PE ownership effect of θ absorbed by prices 64 % (θ = 0.05), 66 % (θ = 0.40)
Multiple stationary equilibria (3 price scans incl. ε = 0.05) none (monotone excess demand, one root)
Real house price on impact, 10 % surprise, FRM / term / ARM (level) −0.45 / −0.47 / −0.79 % (benchmark predicted a rise)
CEV of mortgaged owners, persistent surprise, FRM / term / ARM +1.14 / +0.46 / −1.21 % (ordering confirmed)
Same with a real-rate response, FRM / term +1.43 / +0.20 % (the Canadian term loses its advantage)
Share of the PE ownership response to the surprise absorbed by prices 77–92 %

# 🗂 Repository layout

text
├── CLAUDE.md                 # author's specification of the project
├── configs/                  # baseline.yaml (parameters, units, sources), scenarios.yaml (experiments)
├── src/
│   ├── toy_model.py          # benchmark (closed forms, 44 tests)
│   ├── model.py              # quantitative primitives: conversions, grids, income process, mortgages, supply
│   ├── household_solver.py   # backward VFI with discrete tenure/size/loan/gift choices (numba)
│   ├── distributions.py      # Monte-Carlo dynasty panel (gift + estate links), moments
│   ├── equilibrium.py        # stationary GE (nested Illinois + lottery fixed point), MIT transitions (shooting)
│   ├── calibration.py        # verified comparison points and model moments
│   ├── simulation.py         # experiments 1-10 (python -m src.simulation)
│   ├── robustness.py / figures.py / tables.py   # tables.py also writes numbers.tex (one macro per number)
├── tests/                    # pytest: identities, debt dynamics, feasibility, clearing, residuals (69 tests)
├── research/                 # literature (72 verified refs), model specification, propositions, failed
│                             # hypotheses, results audit (integrity gate), style audit, progress
├── results/{data,figures,tables,logs}/   # raw CSV/JSON, 14 figures (PDF+PNG), 9 tables + numbers.tex
└── paper/                    # main.tex → main.pdf (65 p.: 45 p. main text + references + appendices),
                              # sections/, appendix_proofs.tex, appendix_computation.tex, appendix/,
                              # figures/ and tables/ (copies made by `make paper`), references.bib

# 🚀 Quick start

bash
make setup            # python3 -m venv .venv && pip install -r requirements.txt (pinned)
make test             # pytest: 69 tests (≈ 20 s; two slow general-equilibrium tests included)
make simulate         # 45 stationary GE + 5 PE + 3 scans + 16 transitions + welfare (≈ 60 min on 18 cores);
                      # skipped when results/data/diagnostics.json exists (make clean-results to redo)
make figures tables   # results/figures/fig01-14.{pdf,png}, results/tables/tab01-09.tex + numbers.tex
make paper            # copies figures/tables into paper/ and runs latexmk → paper/main.pdf
make all              # test → simulate (skipped if done) → figures → tables → paper
cd paper && latexmk -pdf appendix_proofs_standalone.tex   # theory only (model + propositions + proofs)

Runtime on an Apple-silicon machine: tests 20 s; full simulation 60 min (18 cores); figures + tables + paper under 2 min.

# 🗃 Data

There are no microdata. The calibration is illustrative (no moment is fitted). Verified Canadian comparison points (Survey of Financial Security 2023 owner–renter net worth and mortgage share; Hou 2010 ownership profile; CIBC gift statistics via Mirdamadi–Khalid 2023) are listed in results/data/calibration_targets.csv and reported next to the model's moments (Table 1 of the paper) without being targeted. No verified Canadian estimate of the housing-supply elasticity was found; the parameter is swept over 0.05–2. All simulation outputs are committed under results/data/ (358 CSV/JSON files, 5.6 MB; .npz/.pkl and run logs are regenerable and excluded).

# 🔬 Methodology

  1. Benchmark theory — src/toy_model.py: closed forms, general optimiser used to verify the hand-to-mouth assumption, dynasty chain, stationary equilibrium, surprise accounting and impact; proofs in paper/appendix_proofs.tex.
  2. Household problem — src/household_solver.py: backward VFI over 12 ages; rent/buy/refinance/sell branches on a cash-on-hand grid, stay on the full state grid; exhaustive search + golden section on liquid assets; loans on 11 fractions of the binding constraint; gifts on 12 fractions of cash; 5-point estate lottery.
  3. Distribution — src/distributions.py: 96,000-dynasty Monte-Carlo panel with common random numbers and a small unanticipated transitory income component (removes atoms of the cash distribution that made excess demand discontinuous).
  4. Stationary equilibrium — src/equilibrium.py: nested Illinois regula falsi (rental inside owner market) + damped fixed point on the lottery and the transfer-tax rebate; tolerance 5e-4; supply scales normalised so that $p^* = \tilde p_r^* = 1$.
  5. Transitions — sequence-space shooting over 14 periods with durable stocks, parallel finite-difference Jacobian, Broyden with refresh, damped tâtonnement pre-phase for large shocks; tolerance 1.5e-3 per period; every run labelled with its residual (12/16 within tolerance).
  6. Welfare — consumption-equivalent variation with $U = V - \Phi$ (flow utility net of warm glow), entrants by transfer quintile and households alive at a shock by age and tenure.
  7. Traceability — src/tables.py writes numbers.tex (≈ 2,500 macros); every number in the manuscript's prose is a macro read from results/data/.

# 🖼 Figures & tables inventory

Figure (results/figures/) Content
fig01_model_timing timing of the OLG model (parent, child, gift, estate, mortgage term)
fig02_policy_functions buy-minus-rent value, liquid saving, house size on the cash grid
fig03_ownership_thresholds threshold by age and productivity; threshold vs θ in GE and PE
fig04_lifecycle_profiles tenure, mortgages, net worth, balance sheets by age
fig05_equal_income_paths equal-income wealth paths by gift quantile; two households straddling the threshold
fig06_inheritance_quantile_trajectories ownership and median net worth by transfer quintile and age
fig07_inequality_mobility Gini by age; tenure and wealth persistence across scenarios
fig08_inflation_transition price, rent, ownership and real debt after a 10 % surprise, three contracts
fig09_inflation_redistribution revaluation, consumption and CEV by age and tenure
fig10_supply_elasticity_heatmap ε × θ: price, ownership, mobility, rank–rank
fig11_welfare CEV of entrants by transfer quintile; CEV by age after the surprise
fig12_solver_diagnostics market clearing, Bellman residuals, grid/sample sensitivity (Appendix B)
fig13_multiplicity_search excess demand and ownership along the price (uniqueness scan)
fig14_down_payment_sweep ownership, prices and persistence vs θ in GE and PE

Tables (results/tables/*.tex, copied to paper/tables/): 01 notation (Appendix C) · 02 parameters (Appendix B) · 03 baseline moments · 04 convergence (Appendix B) · 05 scenarios · 06 inflation · 07 mobility and inequality · 08 welfare · 09 robustness (Appendix B) · numbers.tex (macros).

# ⚠️ Limitations

  • Illustrative calibration; no fitted moment; supply elasticity without a verified Canadian source.
  • Ownership falls after 65 (warm glow over a liquid estate) whereas Canadian owners keep their houses; 72 % of entrants receive a gift vs 28 % in the Canadian source.
  • No aggregate risk, default, survival risk or endogenous real rate; the estate is anticipated as an unconditional lottery and held fixed along transitions; the ARM is a stylised within-period repricing; the 5-year period understates peak LTV (nobody is ever underwater).
  • Monte-Carlo noise bounds market clearing (≈ 5e-4 stationary, ≈ 1e-3 transitions); 4 of 16 transitions are reported with residuals above tolerance.
  • Theory: single crossing proved only on the hand-to-mouth region; Prop. 2 holds for a once-and-for-all tenure decision with a binding LTV constraint; Prop. 7 under unit demand; Prop. 9 under pure debtor positions (Corollary 2 covers net creditors). The three simulation results that contradicted the broader statements are reported as results (research/results_audit.md).

# 📝 Citation

bibtex
@techreport{boucher2026housing,
  author      = {Boucher, Simon-Pierre},
  title       = {Housing, Leverage, and Intergenerational Wealth Inequality: A Dynamic General Equilibrium Theory},
  institution = {Universit\'e du Qu\'ebec en Outaouais, D\'epartement des sciences administratives},
  type        = {Working Paper},
  number      = {18},
  year        = {2026},
  month       = {October}
}

# 👤 Author & contact

Simon-Pierre Boucher — Département des sciences administratives, Université du Québec en Outaouais (UQO), Gatineau, QC. 📧 simon-pierre.boucher@uqo.ca

# 🗒 Notes

Deviations from Recherche-UQO/HARMONISATION.md (all required by the project specification in CLAUDE.md):

  • Theoretical paper: no "Data" section; a "Numerical algorithm, calibration and verification" section replaces it.
  • amsthm environments extended beyond WP8 (Assumption, Definition, Proposition, Lemma, Corollary, Remark, proof); statements in paper/sections/equilibrium.tex, proofs in paper/appendix_proofs.tex (compiles stand-alone with the model section through appendix_proofs_standalone.tex, PDF not committed).
  • Appendices appendix_proofs.tex and appendix_computation.tex at the root of paper/, plus appendix/appendix.tex (notation); appendix tables and figures numbered A/B/C.
  • src/*.py + Makefile + configs/*.yaml instead of numbered scripts/; make simulate is skipped when results exist.
  • Wide tables (scenarios, inflation, mobility, robustness) are scaled with \resizebox and carry their note in a minipage (threeparttable cannot wrap a resized tabular).
  • Figures are generated without in-image titles (LaTeX captions only); WP18_FIG_TITLES=1 make figures restores them for previews.
  • Numbering history: WP 18 assigned by HARMONISATION.md §1; spbgit repository wp18_uqo.git.