SPB Git forge

spb/wp19_uqo

Public
0commits 0branches 0releases
0 Bsize
maindefault branch
—last push
9.4 KB · 157 lines markdown
Rendered Raw Blame History
1<!-- Author: Simon-Pierre Boucher — simon-pierre.boucher@uqo.ca -->2# 🏠 The Endogenous Housing Liquidity Premium34**UQO Working Paper No. 19** — *Search Frictions, Seller Urgency, and Price Discovery*56[![Paper](https://img.shields.io/badge/paper-PDF%20(60%20p.)-b31b1b?logo=latex&logoColor=white)](paper/main.pdf)7[![Python](https://img.shields.io/badge/python-3.11%2B-3776AB?logo=python&logoColor=white)](requirements.txt)8[![Data](https://img.shields.io/badge/data-none%20·%20model--generated-4051b5)](data/raw/README.md)9[![Reproducible](https://img.shields.io/badge/reproducible-end--to--end%20pipeline-2e7d32)](Makefile)10[![Institution](https://img.shields.io/badge/UQO-D%C3%A9pt.%20des%20sciences%20administratives-16365c)](https://uqo.ca)11[![Author](https://img.shields.io/badge/author-Simon--Pierre%20Boucher-16365c)](mailto:simon-pierre.boucher@uqo.ca)1213> **TL;DR** — A continuous-time search model of a local housing market with free entry of buyers, a continuous distribution of14> seller carrying costs (urgency), Nash bargaining, withdrawals, and a financing-contingency extension (cash vs mortgage buyers).15> Eight propositions (urgency discount, arrival rate with an exact Pareto counterexample, free entry, liquidity shocks without16> fundamentals, dispersion, sale selection in price indices with a distribution-dependent sign, the cash–mortgage gap in three17> terms, posted prices) and twelve pre-registered numerical experiments. Baseline: 2.2 months on market, 5.6 % urgency discount,18> 3.5 % price dispersion among identical houses; halving matching efficiency lowers prices 4.8 % and raises time on market to19> 3.4 months; the composition (selection) term of the observed index is ≤ 0.15 log-% against 2–10 % within-type effects.20> Theoretical paper: **no data are used**.2122---2324## 📌 Status2526| Item | Value |27|---|---|28| Version | 1.0 (October 2026) |29| SSRN | not yet submitted |30| Journal | — |31| Code & data | fully reproducible from `config/baseline.yaml` (see Quick start); no data |3233## 🎯 What this paper does3435The paper asks how market tightness, heterogeneous seller reservation values, financing frictions, time-on-market costs and36bargaining power jointly determine an endogenous housing liquidity discount, transaction prices, sale hazards and price37dispersion, and under which conditions a liquidity shock propagates when housing-service values are unchanged.3839Sellers of type $c$ (carrying cost) solve40```41(r+δ) V(c) = −c + δ w0 + Λ_s β H(V(c)+U),     H(v) = E[(w−v)^+],  Λ_s = φ A θ^α42```43with free entry of buyers ($U=k$), sale hazard $η(c)=Λ_s[1−G(V(c)+U)]$, Nash price $p=(1−β)V−βU+βw$, and stocks44$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$.4546## 🏆 Headline results4748| Object | Value (baseline, model-generated) |49|---|---|50| Tightness θ*, contact rates Λ_s / Λ_b | 4.39 buyers per listing; 8.0 / 1.8 per year |51| Time on market of sales; buyer search | 2.2 months; 10.8 months |52| Urgency discount, most urgent / transaction-weighted | 5.6 % / 2.0 % |53| Price s.d. among identical houses; between-type share | 3.5 %; 13 % |54| Halving matching efficiency (GE vs PE) | price −4.8 % vs −4.3 %; TOM 3.4 vs 3.2 months; θ 3.73 |55| Entry amplification d ln Λ_s / d ln φ | 1.10 |56| Transition, permanent −20 % A | price −1.46 % on impact; sales −13 % → −1.4 %; inventory +13 % (half-life 1.9 months) |57| Index composition term (selection) | ≤ 0.15 log-%; dampens for truncated normal/Weibull, amplifies for exponential/Pareto |58| Cash–mortgage gap (extension) | 1.73 % = 0.49 (delay-bargaining) + 1.61 (outside option) − 0.37 (selection); 1.1 % patient → 3.0 % urgent |59| Welfare-maximising β (flow criterion) | 0.55 (Hosios 0.50); planner gain 0.30 % |6061## 🗂 Repository layout6263```64endogenous-housing-liquidity-premium/        (spbgit: wp19_uqo.git)65├── CLAUDE.md                 # research brief and execution protocol66├── config/baseline.yaml      # the only input: parameters with units and justifications67├── src/68│   ├── model.py              # distributions (truncnorm, exponential, Pareto, Weibull), type grid, Params69│   ├── solver.py             # seller block, free-entry equilibrium, posted prices, financing extension, planner, transition70│   ├── simulation.py         # the 12 pre-registered experiments → results/processed, results/raw (hypothesis + env + hash)71│   ├── diagnostics.py        # Monte Carlo cross-check, residuals, bounds → results/logs/validation.json72│   ├── calibration.py        # illustrative-parameterisation report (no data)73│   ├── plotting.py           # 14 figures (PDF + PNG) → results/figures, paper/figures74│   ├── tables.py             # 23 LaTeX fragments + numbers.tex macros → results/tables, paper/tables75│   └── literature.py         # merges the verified literature parts, cross-checks Crossref JSON, writes references.bib76├── tests/                    # 24 pytest tests (closed forms, propositions, boundary cases, equilibrium, convergence)77├── research/                 # wp_style_audit, literature_matrix.csv (132 refs), literature_review, novelty_matrix,78│                             #   model_specification, proofs, validation, results_audit, limitations, progress, verification/79├── results/{raw,processed,figures,tables,logs}/80├── data/raw/README.md        # no data81└── paper/                    # main.tex + sections/ + appendix/ + tables/ + figures/ + references.bib → main.pdf82```8384## 🚀 Quick start8586```bash87python3 -m pip install -r requirements.txt88make test          # pytest (24 tests, ~20 s)89make simulate      # 12 experiments (~6 min on an Apple-silicon laptop)90make diagnostics   # Monte Carlo validation (~3 min)91make tables        # LaTeX fragments + numbers.tex92make figures       # 14 figures93make paper         # cd paper && latexmk → main.pdf94```95`python -m src.simulation --exp 3,9` runs a subset. Every result file carries the configuration hash (`0a165f317815d76c`),96seed (20261020), software versions and the pre-registered hypothesis.9798## 🗃 Data99100None. The parameterisation is illustrative (Table 1 of the paper, `config/baseline.yaml`); see `data/raw/README.md`.101102## 🔬 Methodology1031041. Seller value by Brent's method on the strictly decreasing Φ(V) (`solver.seller_value`).1052. Free-entry tightness by sign scan + Brent, multiplicity reported (`solver.solve_equilibrium`).1063. Posted prices (`solve_equilibrium_posted`), financing extension as a 3-equation root (`solve_equilibrium_financing`),107   planner's flow optimum (`planner_optimum`), transition by backward HJB / forward KFE / pointwise free entry (`transition`).1084. Experiments E1–E12 (`simulation.py`), Monte Carlo validation (`diagnostics.py`), figures and tables from stored CSVs only.109110## 🖼 Figures & tables inventory111112| Figure | Content |113|---|---|114| `fig01_equilibrium_matching` | free-entry residual and matching rates |115| `fig02_urgency_reservation_price`, `fig03_urgency_sale_hazard` | urgency gradients for five arrival rates |116| `fig04_liquidity_discount_vs_arrivals` | discount, price and Γ sign change |117| `fig05_financing_counterfactual` | cash–mortgage gap decomposition, φ_m and delay |118| `fig06_volume_vs_price`, `fig07_tom_survival`, `fig08_seller_type_price_distributions` | comovement, survival, mixture density |119| `fig09_observed_vs_latent_index` | index decomposition by G family and the h_G·M sign condition |120| `fig10_shock_impulse_responses` | transition paths |121| `fig11_welfare_friction_contours`, `fig12_sensitivity_tornado`, `fig13_numerical_convergence`, `fig14_posted_vs_nash` | welfare, sensitivity, convergence, protocols |122123Tables: `tab01_parameters`, `tab02_baseline_moments`, `tab02b_baseline_types`, `tab03_comparative_statics`, `tab04a–e` (financing),124`tab05`, `tab05b` (heterogeneity), `tab06`, `tab06b` (selection, dynamics), `tab07`, `tab07b–f` (robustness, convergence, entry,125uniqueness), `tab08`, `tab08b` (welfare, planner), `tab09_protocols`, `numbers.tex` (macros).126127## ⚠️ Limitations128129Theoretical, stationary, local; permanent nonnegative urgency; complete information; buyers never exit (financing extension130inadmissible for φ_m ≤ 0.6); flow welfare criterion; unanticipated shocks with instantaneous entry; no data. See131`research/limitations.md` and Section 10 of the paper.132133## 📖 Citation134135```bibtex136@techreport{boucher2026liquidity,137  author      = {Boucher, Simon-Pierre},138  title       = {The Endogenous Housing Liquidity Premium: Search Frictions, Seller Urgency, and Price Discovery},139  institution = {Universit\'e du Qu\'ebec en Outaouais, D\'epartement des sciences administratives},140  type        = {UQO Working Paper},141  number      = {19},142  year        = {2026},143  month       = {October}144}145```146147## 👤 Author & contact148149Simon-Pierre Boucher — simon-pierre.boucher@uqo.ca — Département des sciences administratives, Université du Québec en Outaouais.150151## 📝 Notes152153- Deviations from the series standard: theoretical paper (no Data section; a numerical-solution section instead); extended amsthm154  environments; `src/*.py` + `Makefile` + `config/` instead of numbered `scripts/`; `research/` directory kept in git.155- Pushed to spbgit `wp19_uqo.git` on 2026-10-20 (`origin`, branch `main`).156- Process record: `research/progress.md`; novelty audit: `research/novelty_matrix.csv`; claim audit: `research/results_audit.md`.157