# 🏠 Housing, Leverage, and Intergenerational Wealth Inequality **UQO Working Paper No. 18** — *A Dynamic General Equilibrium Theory* [![Paper](https://img.shields.io/badge/paper-PDF%20(65%20p.)-b31b1b?logo=latex&logoColor=white)](paper/main.pdf) [![Python](https://img.shields.io/badge/python-3.14-3776AB?logo=python&logoColor=white)](requirements.txt) [![Data](https://img.shields.io/badge/data-illustrative%20calibration%20·%20no%20microdata-4051b5)](results/data/calibration_targets.csv) [![Reproducible](https://img.shields.io/badge/reproducible-make%20all-2e7d32)](Makefile) [![Institution](https://img.shields.io/badge/UQO-D%C3%A9pt.%20des%20sciences%20administratives-16365c)](https://uqo.ca) [![Author](https://img.shields.io/badge/author-Simon--Pierre%20Boucher-16365c)](mailto:simon-pierre.boucher@uqo.ca) > **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 ``` ├── 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](mailto: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`.