🏠 The Endogenous Housing Liquidity Premium
UQO Working Paper No. 19 — Search Frictions, Seller Urgency, and Price Discovery
TL;DR — A continuous-time search model of a local housing market with free entry of buyers, a continuous distribution of seller carrying costs (urgency), Nash bargaining, withdrawals, and a financing-contingency extension (cash vs mortgage buyers). Eight propositions (urgency discount, arrival rate with an exact Pareto counterexample, free entry, liquidity shocks without fundamentals, dispersion, sale selection in price indices with a distribution-dependent sign, the cash–mortgage gap in three terms, posted prices) and twelve pre-registered numerical experiments. Baseline: 2.2 months on market, 5.6 % urgency discount, 3.5 % price dispersion among identical houses; halving matching efficiency lowers prices 4.8 % and raises time on market to 3.4 months; the composition (selection) term of the observed index is ≤ 0.15 log-% against 2–10 % within-type effects. Theoretical paper: no data are used.
📌 Status
| Item | Value |
|---|---|
| Version | 1.0 (October 2026) |
| SSRN | not yet submitted |
| Journal | — |
| Code & data | fully reproducible from config/baseline.yaml (see Quick start); no data |
🎯 What this paper does
The paper asks how market tightness, heterogeneous seller reservation values, financing frictions, time-on-market costs and bargaining power jointly determine an endogenous housing liquidity discount, transaction prices, sale hazards and price dispersion, and under which conditions a liquidity shock propagates when housing-service values are unchanged.
Sellers of type $c$ (carrying cost) solve
(r+δ) V(c) = −c + δ w0 + Λ_s β H(V(c)+U), H(v) = E[(w−v)^+], Λ_s = φ A θ^αwith free entry of buyers ($U=k$), sale hazard $η(c)=Λ_s[1−G(V(c)+U)]$, Nash price $p=(1−β)V−βU+βw$, and stocks $n(c)=s f(c)/(η(c)+δ)$. The urgency discount is $D(c)=1−\bar p(c)/\bar p(c_L)$; the Walrasian free-entry price $p^$ solves $H(p^)=rk$.
🏆 Headline results
| Object | Value (baseline, model-generated) |
|---|---|
| Tightness θ*, contact rates Λ_s / Λ_b | 4.39 buyers per listing; 8.0 / 1.8 per year |
| Time on market of sales; buyer search | 2.2 months; 10.8 months |
| Urgency discount, most urgent / transaction-weighted | 5.6 % / 2.0 % |
| Price s.d. among identical houses; between-type share | 3.5 %; 13 % |
| Halving matching efficiency (GE vs PE) | price −4.8 % vs −4.3 %; TOM 3.4 vs 3.2 months; θ 3.73 |
| Entry amplification d ln Λ_s / d ln φ | 1.10 |
| Transition, permanent −20 % A | price −1.46 % on impact; sales −13 % → −1.4 %; inventory +13 % (half-life 1.9 months) |
| Index composition term (selection) | ≤ 0.15 log-%; dampens for truncated normal/Weibull, amplifies for exponential/Pareto |
| Cash–mortgage gap (extension) | 1.73 % = 0.49 (delay-bargaining) + 1.61 (outside option) − 0.37 (selection); 1.1 % patient → 3.0 % urgent |
| Welfare-maximising β (flow criterion) | 0.55 (Hosios 0.50); planner gain 0.30 % |
🗂 Repository layout
endogenous-housing-liquidity-premium/ (spbgit: wp19_uqo.git)
├── CLAUDE.md # research brief and execution protocol
├── config/baseline.yaml # the only input: parameters with units and justifications
├── src/
│ ├── model.py # distributions (truncnorm, exponential, Pareto, Weibull), type grid, Params
│ ├── solver.py # seller block, free-entry equilibrium, posted prices, financing extension, planner, transition
│ ├── simulation.py # the 12 pre-registered experiments → results/processed, results/raw (hypothesis + env + hash)
│ ├── diagnostics.py # Monte Carlo cross-check, residuals, bounds → results/logs/validation.json
│ ├── calibration.py # illustrative-parameterisation report (no data)
│ ├── plotting.py # 14 figures (PDF + PNG) → results/figures, paper/figures
│ ├── tables.py # 23 LaTeX fragments + numbers.tex macros → results/tables, paper/tables
│ └── literature.py # merges the verified literature parts, cross-checks Crossref JSON, writes references.bib
├── tests/ # 24 pytest tests (closed forms, propositions, boundary cases, equilibrium, convergence)
├── research/ # wp_style_audit, literature_matrix.csv (132 refs), literature_review, novelty_matrix,
│ # model_specification, proofs, validation, results_audit, limitations, progress, verification/
├── results/{raw,processed,figures,tables,logs}/
├── data/raw/README.md # no data
└── paper/ # main.tex + sections/ + appendix/ + tables/ + figures/ + references.bib → main.pdf🚀 Quick start
python3 -m pip install -r requirements.txt
make test # pytest (24 tests, ~20 s)
make simulate # 12 experiments (~6 min on an Apple-silicon laptop)
make diagnostics # Monte Carlo validation (~3 min)
make tables # LaTeX fragments + numbers.tex
make figures # 14 figures
make paper # cd paper && latexmk → main.pdfpython -m src.simulation --exp 3,9 runs a subset. Every result file carries the configuration hash (0a165f317815d76c),
seed (20261020), software versions and the pre-registered hypothesis.
🗃 Data
None. The parameterisation is illustrative (Table 1 of the paper, config/baseline.yaml); see data/raw/README.md.
🔬 Methodology
- Seller value by Brent's method on the strictly decreasing Φ(V) (
solver.seller_value). - Free-entry tightness by sign scan + Brent, multiplicity reported (
solver.solve_equilibrium). - Posted prices (
solve_equilibrium_posted), financing extension as a 3-equation root (solve_equilibrium_financing), planner's flow optimum (planner_optimum), transition by backward HJB / forward KFE / pointwise free entry (transition). - Experiments E1–E12 (
simulation.py), Monte Carlo validation (diagnostics.py), figures and tables from stored CSVs only.
🖼 Figures & tables inventory
| Figure | Content |
|---|---|
fig01_equilibrium_matching |
free-entry residual and matching rates |
fig02_urgency_reservation_price, fig03_urgency_sale_hazard |
urgency gradients for five arrival rates |
fig04_liquidity_discount_vs_arrivals |
discount, price and Γ sign change |
fig05_financing_counterfactual |
cash–mortgage gap decomposition, φ_m and delay |
fig06_volume_vs_price, fig07_tom_survival, fig08_seller_type_price_distributions |
comovement, survival, mixture density |
fig09_observed_vs_latent_index |
index decomposition by G family and the h_G·M sign condition |
fig10_shock_impulse_responses |
transition paths |
fig11_welfare_friction_contours, fig12_sensitivity_tornado, fig13_numerical_convergence, fig14_posted_vs_nash |
welfare, sensitivity, convergence, protocols |
Tables: tab01_parameters, tab02_baseline_moments, tab02b_baseline_types, tab03_comparative_statics, tab04a–e (financing),
tab05, tab05b (heterogeneity), tab06, tab06b (selection, dynamics), tab07, tab07b–f (robustness, convergence, entry,
uniqueness), tab08, tab08b (welfare, planner), tab09_protocols, numbers.tex (macros).
⚠️ Limitations
Theoretical, stationary, local; permanent nonnegative urgency; complete information; buyers never exit (financing extension
inadmissible for φ_m ≤ 0.6); flow welfare criterion; unanticipated shocks with instantaneous entry; no data. See
research/limitations.md and Section 10 of the paper.
📖 Citation
@techreport{boucher2026liquidity,
author = {Boucher, Simon-Pierre},
title = {The Endogenous Housing Liquidity Premium: Search Frictions, Seller Urgency, and Price Discovery},
institution = {Universit\'e du Qu\'ebec en Outaouais, D\'epartement des sciences administratives},
type = {UQO Working Paper},
number = {19},
year = {2026},
month = {October}
}👤 Author & contact
Simon-Pierre Boucher — simon-pierre.boucher@uqo.ca — Département des sciences administratives, Université du Québec en Outaouais.
📝 Notes
- Deviations from the series standard: theoretical paper (no Data section; a numerical-solution section instead); extended amsthm
environments;
src/*.py+Makefile+config/instead of numberedscripts/;research/directory kept in git. - Pushed to spbgit
wp19_uqo.giton 2026-10-20 (origin, branchmain). - Process record:
research/progress.md; novelty audit:research/novelty_matrix.csv; claim audit:research/results_audit.md.