SPB Git forge

spb/wp19_uqo

Public
0commits 0branches 0releases
0 Bsize
maindefault branch
—last push
9.4 KB

# 🏠 The Endogenous Housing Liquidity Premium

UQO Working Paper No. 19 — Search Frictions, Seller Urgency, and Price Discovery

Paper Python Data Reproducible Institution Author

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

text
(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

text
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

bash
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.pdf

python -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

  1. Seller value by Brent's method on the strictly decreasing Φ(V) (solver.seller_value).
  2. Free-entry tightness by sign scan + Brent, multiplicity reported (solver.solve_equilibrium).
  3. 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).
  4. 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

bibtex
@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 numbered scripts/; research/ directory kept in git.
  • Pushed to spbgit wp19_uqo.git on 2026-10-20 (origin, branch main).
  • Process record: research/progress.md; novelty audit: research/novelty_matrix.csv; claim audit: research/results_audit.md.