# 🌍 The Global Evidence on Housing Price Determinants **UQO Working Paper No. 21** β€” *A Meta-Analysis of Hedonic Pricing Models, 1970–2026* [![Paper](https://img.shields.io/badge/paper-PDF%20(51%20p.)-b31b1b?logo=latex&logoColor=white)](paper/main.pdf) [![Python](https://img.shields.io/badge/python-3.11%2B-3776AB?logo=python&logoColor=white)](requirements.txt) [![Data](https://img.shields.io/badge/data-103%2C011%20records%20Β·%2018%2C831%20coefficients-4051b5)](data/metadata/) [![Reproducible](https://img.shields.io/badge/reproducible-end--to--end%20pipeline-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** β€” PRISMA-style systematic search (103,011 records β†’ 56,727 unique β†’ 7,083 agent-screened β†’ 2,249 hedonic studies > included at stage 1), open-access retrieval (501 PDFs, 18.8 %), LLM-assisted extraction of 297 papers (242 eligible, 2,022 > model columns, 18,831 coefficient rows; 20-paper independent double extraction: 100 % numerical agreement on 647 matched > coefficients), harmonisation into % premiums / semi-elasticities / elasticities (7,693 usable estimates from 149 studies), and > REML, three-level, cluster-robust, PET-PEESE, selection-model, Bayesian and ML meta-analyses of 67 characteristic–family > combinations. Living-area elasticity 0.65 [0.61, 0.69]; bathroom +5.9 %; age βˆ’0.24 %/yr; CBD distance βˆ’3.1 %/km; waterfront > +32.5 %; IΒ² β‰ˆ 100 % everywhere; moderators explain little. Extends Sirmans et al. (2005, 2006). --- ## πŸ“Œ Status | Item | Value | |---|---| | Version | 1.0 (October 2026) | | SSRN | not yet submitted | | Journal | β€” | | Code & data | reproducible from `Makefile`; raw PDFs not redistributed (retrieval log allows re-download) | ## 🎯 What this paper does Global, harmonised, uncertainty-aware synthesis of hedonic housing price models with a reproducible pipeline (discovery β†’ screening β†’ retrieval β†’ extraction β†’ validation β†’ harmonisation β†’ meta-analysis β†’ manuscript). Eight research questions (consistency, magnitude, geography, time, estimators, AI-derived characteristics, heterogeneity vs selection, gaps). ## πŸ† Headline results | Object | Estimate (REML, 95 % CI; k studies) | |---|---| | Living-area elasticity | 0.65 [0.61, 0.69]; k = 46 | | Bathroom semi-elasticity | +5.9 % per bathroom; k = 51 | | Bedroom (conditional on area) | +3.0 % per bedroom; k = 60 | | Age | βˆ’0.24 % per year; k = 54 | | Distance to CBD | βˆ’3.1 % per km; k = 23 | | Garage / pool / AC / view / waterfront premiums | 5.4 / 4.9 / 10.8 / 8.2 / 32.5 % | | Heterogeneity | median IΒ² = 100 %; prediction intervals span zero for most characteristics | | Moderators | 12 of 182 terms significant (RVE); ML meta-regression out-of-study RΒ² < 0 | | AI synthesis (40 studies) | ML beats hedonic benchmark in most same-test-set comparisons (median MAPE 9.0 vs 12.4); 9 studies report incremental gains from AI features | ## πŸ—‚ Repository layout ``` hedonic-meta-analysis-global/ (spbgit: wp21_uqo.git) β”œβ”€β”€ CLAUDE.md Β· protocol/{preregistration,eligibility,search_strategy}.md β”œβ”€β”€ data/metadata/ (records, screening decisions, retrieval log, PRISMA counts, competing reviews) β”œβ”€β”€ data/extracted/ (dumps, json/ per paper, ai/ light extractions) Β· data/validated/ (double extraction + comparison) β”œβ”€β”€ data/final/ (studies.csv, coefficients_raw.csv, effects_all.csv, effects.csv, ai_studies.csv) β”œβ”€β”€ scripts/{discovery,screening,extraction,harmonization,validation,econometrics,visualization}/ β”œβ”€β”€ results/{econometrics,figures,logs}/ Β· reports/{foundations,search_audit,extraction_audit,methodological_decisions,limitations}.md β”œβ”€β”€ paper/ (main.tex, sections/, appendices/, tables/, figures/, references.bib β†’ main.pdf) └── tests/ Β· requirements.txt Β· Makefile ``` ## πŸš€ Quick start ```bash python3 -m pip install -r requirements.txt # + R: install.packages(c("metafor","clubSandwich")) make screen # deduplicate, rule-screen, audit (from stored records) make effects # build studies/coefficients/effects + validation comparison make models # R metafor + clubSandwich; Python REML/PET-PEESE/Bayes/ML make tables figures paper ``` Discovery (`make discover`) and retrieval (`make fetch`) re-query live services and are slow (rate limits); the stored records and logs reproduce the paper as is. Extraction JSONs are stored artefacts of the agent protocol (`scripts/extraction/EXTRACTION_PROTOCOL.md`). ## πŸ—ƒ Data Bibliographic records from Semantic Scholar bulk API, Crossref, arXiv, OpenAlex (2026-10-20); open-access PDFs via Unpaywall, Semantic Scholar and arXiv (not redistributed; `data/metadata/retrieval_log.csv`). No proprietary data. ## πŸ”¬ Methodology 1. Discovery (67 queries, multilingual) and deduplication (DOI + normalised title). 2. Rule-based + agent screening with coded reasons (PRISMA flow generated from logs). 3. PyMuPDF page scoring β†’ dumps β†’ agent extraction (JSON schema) β†’ independent double extraction of 20 papers. 4. Harmonisation: Kennedy-corrected premiums, unit-harmonised semi-elasticities, elasticities, partial correlations; flags. 5. metafor `rma.uni`/`rma.mv` + clubSandwich CR2; Egger, PET-PEESE, step selection model; Gibbs Bayesian; grouped RF/GBM. ## πŸ–Ό Figures & tables inventory 14 figures (`fig01_prisma_flow` … `fig14_summary_evidence`) and 23 table fragments (`tab01_coverage` … `tab15_gaps`) plus `numbers.tex` (913 macros), all generated by `scripts/visualization/`. ## ⚠️ Limitations See `reports/limitations.md` and Section 15 of the paper (open-access retrieval bound, agent-based extraction, heterogeneity). ## πŸ“– Citation ```bibtex @techreport{boucher2026global, author = {Boucher, Simon-Pierre}, title = {The Global Evidence on Housing Price Determinants: A Meta-Analysis of Hedonic Pricing Models, 1970--2026}, institution = {Universit\'e du Qu\'ebec en Outaouais, D\'epartement des sciences administratives}, type = {UQO Working Paper}, number = {21}, year = {2026}, month = {October} } ``` ## πŸ‘€ Author & contact Simon-Pierre Boucher β€” simon-pierre.boucher@uqo.ca. ## πŸ“ Notes Deviations from the series standard: `scripts//` instead of numbered scripts; `protocol/`, `reports/` directories; longtables for the diagnostics tables. Numbering: WP21 (WP20 reserved elsewhere).