révision scientifique complète (editorial board, 2026-10-17)
v1.2 → v1.3 : passage au pipeline reproductible (N 140 931 → 142 121), province dérivée de la RTA (11,7 % d'annonces mal étiquetées corrigées), décomposition Shapley–Owen, inférence alternative + bootstrap wild-cluster par province, spline, holdout spatial par RTA, sensibilité de Moran, effets type/tenure (Kennedy), 91 références vérifiées (Crossref), annexe (construction des variables, réconciliation v1.2/v1.3), README, docs/REVIEW-REPORT.md et docs/CHANGELOG-REVISION.md. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
78 changed files +4,381 −2,079
modified
README.md
+154 −134
@@ -1,23 +1,26 @@ | ||
| 1 | 1 | # 🏘️ A Grand Hedonic Model of the Canadian Housing Market |
| 2 | 2 | |
| 3 | 3 | **UQO Working Paper No. 9** — *Decomposing the Value of Structure and Location across |
| 4 | −140,931 MLS Listings with High-Dimensional Neighbourhood Fixed Effects* | |
| 4 | +142,121 MLS Listings with High-Dimensional Neighbourhood Fixed Effects* | |
| 5 | 5 | |
| 6 | −[-b31b1b?logo=latex&logoColor=white)](paper/main.pdf) | |
| 6 | +[-b31b1b?logo=latex&logoColor=white)](paper/main.pdf) | |
| 7 | 7 | [](requirements.txt) |
| 8 | 8 | [](data/raw/README.md) |
| 9 | 9 | [-4051b5)](src/wp9/models.py) |
| 10 | 10 | [](scripts/) |
| 11 | −[](docs/AUDIT.md) | |
| 11 | +[](docs/REVIEW-REPORT.md) | |
| 12 | 12 | [](https://uqo.ca) |
| 13 | 13 | [](mailto:simon-pierre.boucher@uqo.ca) |
| 14 | 14 | [](mailto:simon-pierre.boucher@uqo.ca) |
| 15 | 15 | |
| 16 | −> **TL;DR** — On 140,931 Canadian MLS listings, absorbing 1,153 neighbourhood (FSA) fixed | |
| 17 | −> effects lifts explained log-price variance from **46% → 77%**. Location alone is worth | |
| 18 | −> ~30 percentage points of R² — more than every structural attribute combined. The model | |
| 19 | −> values held-out homes with a median absolute error of **15.8%** (OOS R² = 0.764), | |
| 20 | −> competitive with commercial AVMs, while staying fully transparent. | |
| 16 | +> **TL;DR** — On 142,121 Canadian MLS listings (asking prices), absorbing 1,155 | |
| 17 | +> neighbourhood (FSA) fixed effects lifts explained log-price variance from **44% → 78%**. | |
| 18 | +> A Shapley–Owen decomposition assigns **≈34 pp to structure and ≈36 pp to location**: the | |
| 19 | +> two are of comparable importance, and location is the single largest block once province | |
| 20 | +> and neighbourhood are grouped (the sequential ladder would say 44 vs 32). Living-area | |
| 21 | +> elasticity 0.53, +12% per full bathroom, bedrooms ≈ 0. Out of sample: MdAPE **15.6%** | |
| 22 | +> (R² 0.77) in neighbourhoods seen in training, **17.3%** (R² 0.74) in neighbourhoods never | |
| 23 | +> seen when the FSA effect is interpolated from its neighbours. | |
| 21 | 24 | |
| 22 | 25 | --- |
| 23 | 26 | |
@@ -25,10 +28,10 @@ | ||
| 25 | 28 | |
| 26 | 29 | | Item | Value | |
| 27 | 30 | |---|---| |
| 28 | −| Version | 1.2 (May 2026) | | |
| 29 | −| SSRN | [7626678](https://ssrn.com/abstract=7626678) — submitted 2026-10-17 (preliminary upload) | | |
| 31 | +| Version | **1.3 (October 2026)** — revised 2026-10-17 by the editorial-board review ([`docs/REVIEW-REPORT.md`](docs/REVIEW-REPORT.md), [`docs/CHANGELOG-REVISION.md`](docs/CHANGELOG-REVISION.md)); v1.2 (May 2026) archived as `docs/main_pre-revision-20261017.pdf` and git tag `pre-revision-20261017` | | |
| 32 | +| SSRN | [7626678](https://ssrn.com/abstract=7626678) — v1.2 uploaded 2026-10-17; **v1.3 to be uploaded** (title N changed 140,931 → 142,121) | | |
| 30 | 33 | | Journal | not yet submitted | |
| 31 | −| Code & data | reproducible from `scripts/` (see Quick start); raw DuckDB snapshot not redistributed | | |
| 34 | +| Code & data | fully reproducible from `scripts/` on the committed `data/processed/analysis.parquet`; raw DuckDB snapshot not redistributed | | |
| 32 | 35 | |
| 33 | 36 | ## 📖 Table of contents |
| 34 | 37 | |
@@ -40,12 +43,11 @@ | ||
| 40 | 43 | 5. [The pipeline, step by step](#-the-pipeline-step-by-step) |
| 41 | 44 | 6. [Data](#-data) |
| 42 | 45 | 7. [Methodology](#-methodology) |
| 43 | −8. [The two results tiers (reference vs. reproduced)](#-the-two-results-tiers-reference-vs-reproduced) | |
| 46 | +8. [The two results tiers (reproduced vs. reference)](#-the-two-results-tiers-reproduced-vs-reference) | |
| 44 | 47 | 9. [Figures & tables inventory](#-figures--tables-inventory) |
| 45 | −10. [Reproduction verification](#-reproduction-verification) | |
| 46 | −11. [Limitations](#-limitations) | |
| 47 | −12. [Citation](#-citation) | |
| 48 | −13. [Author & contact](#-author--contact) | |
| 48 | +10. [Limitations](#-limitations) | |
| 49 | +11. [Citation](#-citation) | |
| 50 | +12. [Author & contact](#-author--contact) | |
| 49 | 51 | |
| 50 | 52 | --- |
| 51 | 53 | |
@@ -59,50 +61,60 @@ estimates a **semi-logarithmic hedonic price equation** at national scale for Ca | ||
| 59 | 61 | ln P_i = α + β·ln(Area_i) + x_i'γ + d_i'δ + μ_f(i) + ε_i |
| 60 | 62 | ``` |
| 61 | 63 | |
| 62 | −where `μ_f(i)` is a fixed effect for the **Forward Sortation Area** (FSA — the first three | |
| 63 | −characters of the postal code) of listing *i*. With 1,153 absorbed FSA intercepts, every | |
| 64 | +where `P_i` is the **asking price** of listing *i* and `μ_f(i)` is a fixed effect for its | |
| 65 | +**Forward Sortation Area** (FSA — the first three characters of the postal code). With 1,155 | |
| 66 | +absorbed FSA intercepts (1,146 FSAs + 9 province-level pools of small FSAs), every | |
| 64 | 67 | neighbourhood gets an arbitrary price level that soaks up schools, transit, coastline, |
| 65 | 68 | employment density — observed or not — and the structural implicit prices (β, γ) are |
| 66 | 69 | identified purely from **within-neighbourhood** variation. Estimation is by absorbing |
| 67 | −least squares (numerically identical to full-dummy OLS); inference is clustered by FSA. | |
| 68 | − | |
| 69 | −Beyond the headline decomposition the paper delivers: out-of-sample valuation accuracy | |
| 70 | −(80/20 split, Duan-smeared retransformation), robustness across six sample cuts, quantile | |
| 71 | −hedonic regressions, a quadratic test of diminishing returns to floor space, an urban | |
| 72 | −price gradient in distance to the nine major metros, Moran's I spatial diagnostics, | |
| 73 | −leave-one-province-out transferability, and a ranked map of Canada's most and least | |
| 74 | −expensive neighbourhoods net of structure. | |
| 70 | +least squares (numerically identical to full-dummy OLS); baseline inference is clustered by FSA. | |
| 71 | + | |
| 72 | +Beyond the headline decomposition the paper delivers: a **Shapley–Owen decomposition** of | |
| 73 | +R² across regressor blocks (order-free alternative to the sequential ladder); inference | |
| 74 | +under HC1 / FSA-cluster / province-cluster / two-way SEs and a **province-level wild-cluster | |
| 75 | +bootstrap**; out-of-sample valuation accuracy (repeated random 80/20 splits *and* a | |
| 76 | +**spatial holdout of entire FSAs** with interpolated effects, Duan-smeared retransformation); | |
| 77 | +robustness across eight sample cuts; quantile hedonic regressions; quadratic **and spline** | |
| 78 | +tests of diminishing returns to floor space; an urban price gradient in distance to nine | |
| 79 | +metros (pooled, metro intercepts, quadratic); Moran's I diagnostics with k-sensitivity; | |
| 80 | +leave-one-province-out transferability; dwelling-type/ownership effects with the Kennedy | |
| 81 | +correction; and a ranked map of Canada's most and least expensive neighbourhoods net of | |
| 82 | +structure. | |
| 75 | 83 | |
| 76 | 84 | ## 🏆 Headline results |
| 77 | 85 | |
| 78 | 86 | | Quantity | Value | |
| 79 | 87 | |---|---| |
| 80 | −| Estimation sample | **140,931** listings — 82,334 houses, 57,857 condos, 9 provinces | | |
| 81 | −| Absorbed neighbourhood effects | **1,153** FSAs | | |
| 82 | −| R²: structural only (M1) | 0.464 | | |
| 83 | −| R²: + dwelling type & ownership (M2) | 0.469 | | |
| 84 | −| R²: + province FE (M3) | 0.567 | | |
| 85 | −| R²: grand model, FSA FE (M5) | **0.767** | | |
| 86 | −| Living-area elasticity (M5) | **0.547** (cluster SE 0.009) | | |
| 87 | −| Full-bathroom premium | **0.109 log points ≈ +11%** per bathroom | | |
| 88 | −| Bedrooms, conditional on area | ≈ 0 (the textbook hedonic result) | | |
| 89 | −| Out-of-sample R² (log price) | **0.764** | | |
| 90 | −| Median absolute valuation error | **15.8%** (59% of homes priced within ±20%) | | |
| 91 | −| Moran's I of residuals, structural → grand | **0.46 → 0.08** (−82%) | | |
| 92 | −| Urban gradient | −8.5% location premium per doubling of distance to metro | | |
| 93 | −| Neighbourhood premia span | ×9 between the most and least expensive FSAs | | |
| 94 | − | |
| 95 | −The most expensive neighbourhoods net of structure are all in the **City of Vancouver** | |
| 96 | −(V6S, V8E, V6T: +150–200% vs. the national median); the cheapest are in rural | |
| 97 | −Saskatchewan, Manitoba and Newfoundland (−60 to −67%). | |
| 88 | +| Estimation sample | **142,121** listings — 83,524 houses, 57,853 condos, 744 other; 9 provinces (province from FSA letter) | | |
| 89 | +| Absorbed neighbourhood effects | **1,155** (1,146 FSAs ≥ 25 listings + 9 pooled residual categories) | | |
| 90 | +| R² houses: M1 structural / M2 +type / M3 +province / M4 +FSA | 0.467 / 0.470 / 0.605 / 0.769 | | |
| 91 | +| R²: grand model, all residential, FSA FE (M5) | **0.776** (structure-only on the same sample: 0.436) | | |
| 92 | +| Variance decomposition (pp of R², all residential) | sequential: structure 43.6, type 1.6, province 14.3, FSA 18.1 · **Shapley: 33.0 / 7.5 / 8.9 / 28.2** · **Owen: structure 34.0, type 7.3, location 36.3** | | |
| 93 | +| Living-area elasticity (M5) | **0.529** (FSA-cluster SE 0.009; province-cluster 0.037; wild-cluster p = 0.004) | | |
| 94 | +| Full-bathroom premium | **0.112 log points ≈ +11.9%** per bathroom (0.148 ≈ +16% on houses with province FE) | | |
| 95 | +| Bedrooms, half baths (conditional on area) | −0.006, −0.034 — not significant under province-level inference | | |
| 96 | +| Dwelling type (vs apartment, same size & FSA) | house +46%, triplex +43%, fourplex +39%, duplex +16%, townhouse ≈ 0 (Kennedy-corrected) | | |
| 97 | +| Out-of-sample, random 80/20 (within support) | R² **0.772**, MdAPE **15.6%**, 60% within ±20% (5 seeds: 0.769 ± 0.010, 15.5 ± 0.2%) | | |
| 98 | +| Out-of-sample, **held-out FSAs** (20% of neighbourhoods) | province-mean effect: R² 0.52, MdAPE 25% · **IDW of 5 nearest FSAs: R² 0.74, MdAPE 17.3%** | | |
| 99 | +| Moran's I of residuals, structural → grand (k = 10) | **0.50 → 0.06** (−87%); k = 5: 0.52 → 0.11; k = 20: 0.47 → 0.03 | | |
| 100 | +| Floor space | quadratic: elasticity 0.63 at 60 m² → 0.41 at 350 m²; spline: 0.57 / 0.65 / 0.58 / 0.41 / 0.48 by quintile; ΔR² = 0.001 | | |
| 101 | +| Urban gradient | −0.082 per log unit of distance ⇒ **−5.5% per doubling**; +21% within 5 km, −38% beyond 320 km | | |
| 102 | +| LOPO transfer (within-province R²) | mean 0.34; MB/AB/NB/ON/SK/NS 0.46–0.52; QC 0.19; **BC −0.49** | | |
| 103 | +| Neighbourhood premia span | ×10.5 between extremes (V6S +226% vs A0B −69%), ×6.7 between P99 and P1 | | |
| 104 | + | |
| 105 | +The most expensive neighbourhoods net of structure are on **Vancouver's west side** (V6S | |
| 106 | +Dunbar–Point Grey, V6T UBC), in **Whistler** (V8E) and **West Vancouver** (V7T); the first | |
| 107 | +Ontario FSA (M5R, the Annex) ranks 14th. The cheapest are in rural Newfoundland (A0B, A0G), | |
| 108 | +Saskatchewan (S0N, S0C, S0H, S0A), Manitoba and New Brunswick. | |
| 98 | 109 | |
| 99 | 110 | ## 📁 Repository layout |
| 100 | 111 | |
| 101 | 112 | ``` |
| 102 | 113 | wp9_uqo/ |
| 103 | 114 | ├── README.md ← you are here |
| 104 | −├── docs/ AUDIT.md (forensic audit + verification), CHANGES.md, | |
| 105 | −│ PAPER_REVIEW.md, UPGRADE_REPORT.md | |
| 115 | +├── docs/ REVIEW-REPORT.md + CHANGELOG-REVISION.md (editorial-board | |
| 116 | +│ revision, 2026-10-17), main_pre-revision-20261017.pdf (v1.2), | |
| 117 | +│ AUDIT.md, CHANGES.md, PAPER_REVIEW.md, UPGRADE_REPORT.md (history) | |
| 106 | 118 | ├── requirements.txt pinned Python dependencies |
| 107 | 119 | ├── .gitignore |
| 108 | 120 | ├── data/ |
@@ -121,19 +133,22 @@ wp9_uqo/ | ||
| 121 | 133 | │ ├── 01_build_sample.py |
| 122 | 134 | │ ├── 02_estimate_core.py |
| 123 | 135 | │ ├── 03_estimate_extended.py |
| 124 | −│ ├── 04_make_figures.py (--results reference|reproduced) | |
| 125 | −│ └── 05_make_tables.py (--results reference|reproduced) | |
| 136 | +│ ├── 04_make_figures.py (--results reproduced|reference; default reproduced) | |
| 137 | +│ ├── 05_make_tables.py (--results reproduced|reference; default reproduced) | |
| 138 | +│ └── 06_revision_analyses.py Shapley/Owen, SE comparison + wild bootstrap, spline, | |
| 139 | +│ spatial holdout, Moran sensitivity, metro gradient | |
| 126 | 140 | ├── figures/ all 17 paper figures (PNG, generated) |
| 127 | 141 | ├── results/ |
| 128 | −│ ├── reference/ ORIGINAL published outputs — canonical paper numbers | |
| 129 | −│ ├── reproduced/ outputs regenerated end-to-end by this pipeline | |
| 130 | −│ └── tables/ the 6 LaTeX tables consumed by the paper | |
| 142 | +│ ├── reference/ archived outputs of the May 2026 version (v1.2) | |
| 143 | +│ ├── reproduced/ outputs of the current pipeline — THE PAPER'S NUMBERS (v1.3) | |
| 144 | +│ └── tables/ the 13 LaTeX tables consumed by the paper | |
| 131 | 145 | └── paper/ |
| 132 | 146 | ├── main.tex preamble + metadata; \input's the sections |
| 133 | − ├── main.pdf compiled paper (34 pages) | |
| 147 | + ├── main.pdf compiled paper (52 pages) | |
| 134 | 148 | ├── sections/ titlepage, introduction, literature, data, |
| 135 | − │ methodology, results, robustness, conclusion | |
| 136 | − ├── references.bib 32 entries, natbib author-year, aer style | |
| 149 | + │ methodology, results, robustness, discussion, conclusion | |
| 150 | + ├── appendix/appendix.tex variable construction, Moran sensitivity, v1.2 ↔ v1.3 reconciliation | |
| 151 | + ├── references.bib 91 entries (all Crossref-verified, DOIs), natbib author-year, aer style | |
| 137 | 152 | ├── Makefile / .latexmkrc build config |
| 138 | 153 | └── uq_logo.jpg |
| 139 | 154 | ``` |
@@ -149,15 +164,17 @@ python3 -m pip install -r requirements.txt | ||
| 149 | 164 | python3 scripts/01_build_sample.py # duckdb → data/processed/analysis.parquet |
| 150 | 165 | python3 scripts/02_estimate_core.py # M1–M5 ladder → results/reproduced/ |
| 151 | 166 | python3 scripts/03_estimate_extended.py # OOS, robustness, quantile, Moran, LOPO… |
| 167 | +python3 scripts/06_revision_analyses.py # Shapley/Owen, SE comparison, spline, spatial holdout… | |
| 152 | 168 | python3 scripts/04_make_figures.py # figures/ (17 PNG) |
| 153 | −python3 scripts/05_make_tables.py # results/tables/ (6 .tex) | |
| 169 | +python3 scripts/05_make_tables.py # results/tables/ (13 .tex) | |
| 154 | 170 | |
| 155 | 171 | # Paper: |
| 156 | 172 | cd paper && latexmk -pdf main.tex # or `make` |
| 157 | 173 | ``` |
| 158 | 174 | |
| 159 | −Without the raw DuckDB you can still run steps **02→05**: the committed | |
| 175 | +Without the raw DuckDB you can still run steps **02→06**: the committed | |
| 160 | 176 | `data/processed/analysis.parquet` (6 MB) is the estimation sample produced by step 01. |
| 177 | +The whole pipeline (01→06) runs in about **2 minutes** on an Apple M5 Max. | |
| 161 | 178 | |
| 162 | 179 | ## 🔬 The pipeline, step by step |
| 163 | 180 | |
@@ -165,9 +182,10 @@ Without the raw DuckDB you can still run steps **02→05**: the committed | ||
| 165 | 182 | |---|---|---|---|---| |
| 166 | 183 | | 01 | `01_build_sample.py` | raw DuckDB (172,019 rows) | `analysis.parquet` (142k rows, 21 cols) | ~40 s | |
| 167 | 184 | | 02 | `02_estimate_core.py` | parquet | `fit.json`, `coef_M{1,2,3,5}.csv`, `grand_model.parquet`, `fsa_premia.csv` | ~1 min | |
| 168 | −| 03 | `03_estimate_extended.py` | parquet + step 02 | `oos.json`, `robustness.csv`, `heterogeneity.csv`, `quantile.csv`, `lopo.csv`, `ext2.json`, Moran arrays, gradient/nonlinearity bands | ~6 min | | |
| 185 | +| 03 | `03_estimate_extended.py` | parquet + step 02 | `oos.json`, `robustness.csv` (8 cuts), `heterogeneity.csv`, `quantile.csv`, `lopo.csv`, `ext2.json`, Moran arrays, gradient/nonlinearity bands | ~10 s | | |
| 186 | +| 06 | `06_revision_analyses.py` | parquet + step 02 | `shapley.csv`, `se_comparison.csv`, `spline.csv`, `spatial_holdout.json`, `moran_sensitivity.csv`, `gradient_metro.json` | ~35 s | | |
| 169 | 187 | | 04 | `04_make_figures.py` | results tier + parquet | 17 PNG figures | ~30 s | |
| 170 | −| 05 | `05_make_tables.py` | results tier | 6 LaTeX tables | ~5 s | | |
| 188 | +| 05 | `05_make_tables.py` | results tier | 13 LaTeX tables | ~5 s | | |
| 171 | 189 | |
| 172 | 190 | \* Apple Silicon, single process. |
| 173 | 191 | |
@@ -181,9 +199,13 @@ Without the raw DuckDB you can still run steps **02→05**: the committed | ||
| 181 | 199 | `"50 x 120"` frontage×depth) with a missingness indicator; the top 1% of positive |
| 182 | 200 | parsed lots (multi-acre rural acreage strings) treated as "no usable lot info"; |
| 183 | 201 | - dwelling type consolidated to 8 groups, ownership to 6 groups; |
| 184 | −- FSA from the postal code; FSAs with < 25 listings pooled into `<PROV>_other`; | |
| 202 | +- FSA from the postal code; **province from the first letter of the FSA** (Canada Post | |
| 203 | + convention; the scraper's `_province` seed mislabelled 11.7% of listings and is kept as | |
| 204 | + `prov_seed`); territories / invalid letters (27 records) dropped; FSAs with < 25 | |
| 205 | + listings pooled into `<PROV>_other`; | |
| 185 | 206 | - filters: strictly positive price, non-missing living area / bedrooms / bathrooms, |
| 186 | − valid FSA; then the extreme 1% tails of price and living area are trimmed. | |
| 207 | + valid FSA (147,236); then the extreme 1% tails of price and living area are trimmed | |
| 208 | + (142,121). | |
| 187 | 209 | |
| 188 | 210 | ## 📊 Data |
| 189 | 211 | |
@@ -197,89 +219,79 @@ file limit, plus its content is scraped listing data). It lives on the author's | ||
| 197 | 219 | place it at `data/raw/realtor_mls_unique.duckdb` to run step 01. All downstream artifacts |
| 198 | 220 | — including the committed estimation sample — derive from it programmatically. |
| 199 | 221 | |
| 200 | −Estimation-sample snapshot (Table 1 of the paper): median list price ≈ **$639,888**; | |
| 201 | −median living area ≈ **135 m²**; 3 bedrooms; 2 full bathrooms. Both price and price/m² | |
| 202 | −are strongly right-skewed, motivating the log transformation. Ontario, Quebec, BC and | |
| 203 | −Alberta dominate; PEI and the territories have no listings in this snapshot. | |
| 222 | +Estimation-sample snapshot (Table 1 of the paper): median asking price **$639,900**; | |
| 223 | +median living area **135 m²**; 3 bedrooms; 2 full bathrooms. Both price and price/m² are | |
| 224 | +strongly right-skewed, motivating the log transformation. ON 55,897 · BC 32,994 · QC 19,949 | |
| 225 | +· AB 19,463 · SK 3,458 · MB 3,062 · NS 3,044 · NB 2,980 · NL 1,274; PEI and the territories | |
| 226 | +have no listings. **Prices are asking prices, not transactions** — every coefficient is an | |
| 227 | +implicit *list* price. | |
| 204 | 228 | |
| 205 | 229 | ## 📐 Methodology |
| 206 | 230 | |
| 207 | 231 | - **Specification ladder** — M1 structural only → M2 + type/ownership → M3 + province FE |
| 208 | 232 | (house subsample) → M4 houses + FSA FE → M5 **grand model** (all residential, FSA FE). |
| 209 | − The M3→M5 gap ≈ 20 pp of R² *is* the value of resolving location at neighbourhood scale. | |
| 210 | −- **Absorbing least squares** (`linearmodels.AbsorbingLS`) sweeps out the 1,153 FSA | |
| 211 | − intercepts without materialising dummies; slopes are numerically identical to | |
| 212 | − full-dummy OLS. SEs clustered by FSA throughout. | |
| 213 | −- **Retransformation** — predictions in levels use Duan's (1983) smearing estimator (no | |
| 214 | − log-normality assumption). | |
| 215 | −- **Validation** — random 80/20 split, evaluation restricted to FSAs observed in | |
| 216 | − training (out-of-support FE are not identified); leave-one-province-out CV with | |
| 217 | − province-specific intercepts; Moran's I with row-standardised k-NN weights (k = 10, | |
| 218 | − 15,000-listing sample, 199 permutations). | |
| 219 | − | |
| 220 | −## 🧭 The two results tiers (reference vs. reproduced) | |
| 221 | − | |
| 222 | −The original upstream cleaning code (`RE_DB_QC/hedonic`) was **lost** before this | |
| 223 | −repository was assembled; `src/wp9/sample.py` is a careful reconstruction from the | |
| 224 | −paper's own data section, calibrated against every stored output (see `docs/AUDIT.md`). It | |
| 225 | −reproduces the published sample to **+0.86%** and all headline estimates closely — but | |
| 226 | −not to the last digit. To keep the published record intact: | |
| 227 | − | |
| 228 | −- **`results/reference/`** — the original outputs (verbatim files, plus values | |
| 229 | − transcribed from the published tables). **Default** source for figures/tables, so the | |
| 230 | − paper always shows exactly the published numbers. | |
| 231 | −- **`results/reproduced/`** — regenerated end-to-end by scripts 02–03 on the | |
| 232 | − reconstructed sample. | |
| 233 | − | |
| 234 | −```bash | |
| 235 | −python3 scripts/04_make_figures.py --results reproduced # opt in to regenerated numbers | |
| 236 | −python3 scripts/05_make_tables.py --results reproduced | |
| 237 | −``` | |
| 233 | +- **Variance decomposition** — sequential increments *and* Shapley values over the four | |
| 234 | + blocks (16 regressions) plus Owen values grouping province + FSA into one location block | |
| 235 | + (Israeli 2007; Huettner & Sunder 2012). The sequential ladder credits the ~10 pp shared by | |
| 236 | + structure and location to whichever enters first. | |
| 237 | +- **Absorbing least squares** (`linearmodels.AbsorbingLS`) sweeps out the 1,155 FSA | |
| 238 | + intercepts; slopes identical to full-dummy OLS. Baseline SEs clustered by FSA; also HC1, | |
| 239 | + province-cluster, two-way, and a restricted wild-cluster bootstrap-t at the province level | |
| 240 | + (Rademacher, full enumeration of 2⁹ = 512 draws). | |
| 241 | +- **Percentage effects** — e^γ − 1 for counts; Kennedy (1981) correction for indicators. | |
| 242 | +- **Functional form** — quadratic in ln(area) and a linear spline with quintile knots. | |
| 243 | +- **Retransformation** — Duan (1983) smearing. | |
| 244 | +- **Validation** — (i) random 80/20 splits × 5 seeds, evaluation on FSAs seen in training; | |
| 245 | + (ii) **spatial holdout**: 20% of FSAs held out entirely × 5 reps, FSA effect imputed as the | |
| 246 | + province mean or as the inverse-distance mean of the 5 nearest training FSAs; (iii) | |
| 247 | + leave-one-province-out with province intercepts. | |
| 248 | +- **Spatial diagnostics** — Moran's I, row-standardised k-NN weights (k = 5, 10, 20), two | |
| 249 | + 15,000-listing subsamples, 199 permutations. | |
| 250 | +- **Urban gradient** — location residual on ln(distance to nearest of 9 metros): pooled, | |
| 251 | + with nearest-metro intercepts, quadratic; FSA-clustered SEs. | |
| 252 | + | |
| 253 | +## 🧭 The two results tiers (reproduced vs. reference) | |
| 254 | + | |
| 255 | +- **`results/reproduced/`** — **the paper's numbers since v1.3.** Regenerated end-to-end by | |
| 256 | + scripts 01–06 on the committed sample, with the province derived from the FSA. | |
| 257 | +- **`results/reference/`** — the archived outputs of the May 2026 version (v1.2), whose | |
| 258 | + upstream cleaning code was lost (see `docs/AUDIT.md`). Kept for the reconciliation table | |
| 259 | + in Appendix C of the paper. `python3 scripts/0{4,5}_*.py --results reference` rebuilds | |
| 260 | + the v1.2 figures/tables (the six original tables only). | |
| 238 | 261 | |
| 239 | 262 | ## 🖼️ Figures & tables inventory |
| 240 | 263 | |
| 241 | −| # | Figure | Shows | Numbers from | | |
| 242 | −|---|---|---|---| | |
| 243 | −| 1 | `fig_price_dist` | raw vs. log price distribution | micro sample | | |
| 244 | −| 2 | `fig_province_ppm2` | median $/m² by province | micro sample | | |
| 245 | −| 3 | `fig_r2` | R² across the M1–M5 ladder | reference | | |
| 246 | −| 4 | `fig_forest` | structural implicit prices, 95% CI (M3) | reference | | |
| 247 | −| 5 | `fig_size_gradient` | median price by size bin × dwelling type | micro sample | | |
| 248 | −| 6a/6b | `fig_map` / `fig_fsa_map` | listing map & FSA medians, coloured by ln $/m² | micro sample | | |
| 249 | −| 7 | `fig_premia` | top/bottom 12 FSA premia vs. national median | reference | | |
| 250 | −| 8 | `fig_decomp` | variance decomposition bar | reference | | |
| 251 | −| 9 | `fig_nonlinear` | marginal elasticity vs. size (quadratic model) | reproduced band + reference anchor | | |
| 252 | −| 10 | `fig_gradient` | location premium vs. distance to metro | reproduced | | |
| 253 | −| 11 | `fig_quantile` | quantile coefficients τ = 0.1…0.9 | reference | | |
| 254 | −| 12 | `fig_moran` | Moran scatterplots, structural vs. grand | reproduced clouds, reference I | | |
| 255 | −| 13 | `fig_heterogeneity` | size elasticity by province, 95% CI | reference | | |
| 256 | −| 14 | `fig_oos` | OOS error buckets (±10/±20%) | reference | | |
| 257 | −| 15/16 | `fig_fit` / `fig_resid` | predicted vs. actual; residual diagnostics | reproduced | | |
| 258 | − | |
| 259 | −(The leave-one-province-out results appear as a table only.) | |
| 260 | − | |
| 261 | −Tables (`results/tables/`): `summary_stats`, `regression` (M1/M2/M3/M5), | |
| 262 | −`robustness` (6 sample cuts), `quantile`, `lopo`, `oos` — all six verified | |
| 263 | −**numerically identical** to the originally published tables. | |
| 264 | − | |
| 265 | −## ✅ Reproduction verification | |
| 266 | − | |
| 267 | −Full side-by-side in [`docs/AUDIT.md`](docs/AUDIT.md) §5. Highlights (original → reproduced): | |
| 268 | − | |
| 269 | −- Sample: 140,931 → 142,146 (+0.86%); condos match to 3 listings. | |
| 270 | −- R² ladder: 0.464/0.469/0.567/0.762/0.767 → 0.467/0.470/0.569/0.766/0.770. | |
| 271 | −- OOS: R² 0.764 → 0.770; median APE 15.8% → 15.6%. | |
| 272 | −- Moran's I: 0.459→0.082 vs. 0.494→0.072 (same −82~85% conclusion). | |
| 273 | −- Known gaps (flagged, not hidden): M5 living elasticity 0.547 vs. 0.530; lot-field | |
| 274 | − coefficients differ (the original free-text lot parser could not be fully recovered); | |
| 275 | − LOPO mean 0.362 vs. 0.315 with identical province ranking. | |
| 264 | +| # | Figure | Shows | | |
| 265 | +|---|---|---| | |
| 266 | +| 1 | `fig_price_dist` | raw vs. log asking price | | |
| 267 | +| 2 | `fig_province_ppm2` | median $/m² by province (FSA-derived) | | |
| 268 | +| 3 | `fig_r2` | R² across the M1–M5 ladder | | |
| 269 | +| 4 | `fig_decomp` | sequential vs. Shapley variance decomposition | | |
| 270 | +| 5 | `fig_forest` | structural implicit prices, 95% CI (M3) | | |
| 271 | +| 6 | `fig_size_gradient` | median price by size bin × dwelling type | | |
| 272 | +| 7a/7b | `fig_map` / `fig_fsa_map` | listing map & FSA medians, ln $/m² | | |
| 273 | +| 8 | `fig_premia` | top/bottom 12 FSA premia vs. median FSA | | |
| 274 | +| 9 | `fig_nonlinear` | marginal elasticity vs. size: quadratic + spline | | |
| 275 | +| 10 | `fig_gradient` | location premium by distance band to metro | | |
| 276 | +| 11 | `fig_quantile` | quantile coefficients τ = 0.1…0.9 | | |
| 277 | +| 12 | `fig_moran` | Moran scatterplots, structural vs. grand | | |
| 278 | +| 13 | `fig_heterogeneity` | size elasticity by province, 95% CI | | |
| 279 | +| 14 | `fig_oos` | OOS error buckets (±10/±20%) | | |
| 280 | +| 15 | `fig_fit` / `fig_resid` | predicted vs. actual; residual diagnostics | | |
| 281 | + | |
| 282 | +Tables (`results/tables/`, 13): `summary_stats`, `shapley`, `regression` (M1/M2/M3/M5), | |
| 283 | +`type_effects`, `spline`, `gradient`, `robustness` (8 cuts), `se_comparison`, `quantile`, | |
| 284 | +`lopo`, `oos`, `spatial_holdout`, `moran_sensitivity` (appendix). | |
| 276 | 285 | |
| 277 | 286 | ## ⚠️ Limitations |
| 278 | 287 | |
| 279 | −List prices, not transactions; no construction year / renovation status / interior | |
| 280 | −quality (absorbed into FSA effects and the residual); lot information sparse and noisy; | |
| 281 | −a single cross-section — levels, not dynamics. See the paper's conclusion for the | |
| 282 | −research agenda these imply. | |
| 288 | +Asking prices, not transactions (implicit *list* prices; accuracy is an upper bound for | |
| 289 | +transaction-price models); no construction year / renovation / interior quality (within-FSA | |
| 290 | +sorting remains); noisy fields (lot parsed from free text, storeys/parking with implausible | |
| 291 | +extremes and zero when unreported, province reconstructed from the postal code); a single | |
| 292 | +cross-section of one platform; FSAs are postal, not planning, units and 9 pooled residual | |
| 293 | +categories are not neighbourhoods; structural prices do not transfer to BC (LOPO R² < 0). | |
| 294 | +See §7 of the paper. | |
| 283 | 295 | |
| 284 | 296 | ## 📚 Citation |
| 285 | 297 | |
@@ -288,14 +300,15 @@ research agenda these imply. | ||
| 288 | 300 | author = {Boucher, Simon-Pierre}, |
| 289 | 301 | title = {A Grand Hedonic Model of the Canadian Housing Market: |
| 290 | 302 | Decomposing the Value of Structure and Location across |
| 291 | − 140,931 MLS Listings with High-Dimensional Neighbourhood | |
| 303 | + 142,121 MLS Listings with High-Dimensional Neighbourhood | |
| 292 | 304 | Fixed Effects}, |
| 293 | 305 | institution = {Universit\'e du Qu\'ebec en Outaouais, |
| 294 | 306 | D\'epartement des sciences administratives}, |
| 295 | 307 | type = {Working Paper}, |
| 296 | 308 | number = {9}, |
| 297 | 309 | year = {2026}, |
| 298 | − month = {May} | |
| 310 | + month = {October}, | |
| 311 | + note = {Version 1.3} | |
| 299 | 312 | } |
| 300 | 313 | ``` |
| 301 | 314 | |
@@ -317,3 +330,10 @@ redistributed; code and paper are shared for research reproducibility. | ||
| 317 | 330 | - Numbering: UQO Working Paper No. 9 since the first version (May 2026). |
| 318 | 331 | - The original flat May 2026 project (`immo-wp9-spb-20260529`) is archived in `Recherche-UQO/_archives/versions-mai-2026/grand-hedonic-model-canada--immo-wp9-20260529`; `docs/AUDIT.md` and `docs/CHANGES.md` describe how this repository was rebuilt from it. |
| 319 | 332 | - Cover page, metadata and layout follow `Recherche-UQO/HARMONISATION.md` (2026-10-17). |
| 333 | +- **Revision 2026-10-17 (v1.2 → v1.3)**: full scientific revision by the editorial-board | |
| 334 | + protocol (`Recherche-UQO/REVISION-MASTER-PROMPT.md`). Report: `docs/REVIEW-REPORT.md`; | |
| 335 | + audit trail of every change (old → new numbers, reasons, verification sources): | |
| 336 | + `docs/CHANGELOG-REVISION.md`. The paper now reports the fully reproducible pipeline | |
| 337 | + (`results/reproduced/`) with FSA-derived provinces; the N in the subtitle changed from | |
| 338 | + 140,931 to 142,121 accordingly. The pre-revision PDF is `docs/main_pre-revision-20261017.pdf`. | |
| 339 | + Deviation from the standard: none (appendix added per the template). | |
modified
data/processed/analysis.parquet
+0 −0
Binary file not shown.
added
docs/CHANGELOG-REVISION.md
+91 −0
@@ -0,0 +1,91 @@ | ||
| 1 | +# CHANGELOG-REVISION — Audit trail of the 2026-10-17 editorial-board revision (v1.2 → v1.3) | |
| 2 | + | |
| 3 | +All original files are preserved under git tag `pre-revision-20261017`; the v1.2 PDF is | |
| 4 | +`docs/main_pre-revision-20261017.pdf`; the v1.2 numerical outputs remain in | |
| 5 | +`results/reference/` (untouched). Every number in the v1.3 paper comes from | |
| 6 | +`results/reproduced/` produced by `scripts/01…06`. | |
| 7 | + | |
| 8 | +## 1. Decision to switch the paper to the reproduced tier | |
| 9 | + | |
| 10 | +**Why.** (a) The v1.2 numbers came from an upstream pipeline that no longer exists | |
| 11 | +(`docs/AUDIT.md`); the shipped code reproduced them only approximately (+0.86 % sample). | |
| 12 | +(b) The province variable used by v1.2 (`_province`, the scraper's regional seed) mislabels | |
| 13 | +16,558 of 142,121 listings (11.7 %): e.g. 13,600 listings with A/B/E/K/P FSAs (NL, NS, NB, | |
| 14 | +Ottawa-area and northern ON) labelled "QC"; 4,278 V-FSAs (BC) labelled "AB"; 1,326 T-FSAs | |
| 15 | +(AB) labelled "BC". This affected M3 (province FE), LOPO, provincial heterogeneity, the | |
| 16 | +ON/QC/BC cut, the `<PROV>_other` pooling, and the province labels in the premia figure | |
| 17 | +(v1.2 showed "E2A (QC)", "R0M (SK)"). (c) Fixing (b) requires re-running everything, which | |
| 18 | +is only possible on the reconstructed sample. **Evidence:** cross-tab FSA letter × seed | |
| 19 | +province, 2026-10-17 (reproduced in `scripts/01_build_sample.py` logic; see §2). | |
| 20 | + | |
| 21 | +**Consequence.** N changes 140,931 → 142,121 (title, abstract, README, BibTeX). All | |
| 22 | +headline magnitudes preserved (Appendix C of the paper, Table A2). | |
| 23 | + | |
| 24 | +## 2. Code changes | |
| 25 | + | |
| 26 | +| File | Change | | |
| 27 | +|---|---| | |
| 28 | +| `src/wp9/config.py` | `FSA_PROVINCE` map (Canada Post first letter → province) | | |
| 29 | +| `src/wp9/sample.py` | `prov` derived from FSA letter; seed kept as `prov_seed`; FSAs with letters O/W/X/Y → dropped (27 records) | | |
| 30 | +| `scripts/02_estimate_core.py` | records `n_fe` in `fit.json` | | |
| 31 | +| `scripts/03_estimate_extended.py` | 2 robustness rows added (storeys/parking capped at P99; excl. pooled residual FSAs); quantile vcov made explicit (`robust`, Epanechnikov, Hall–Sheather) | | |
| 32 | +| `scripts/06_revision_analyses.py` | **new**: Shapley/Owen decomposition; SE comparison (HC1, FSA, province, two-way) + restricted wild-cluster bootstrap-t at province level (Rademacher, 512 enumerated draws); spline elasticities; spatial holdout (20 % of FSAs × 5 reps, province-mean vs IDW-5 imputation) + 5 random seeds; Moran sensitivity (k = 5/10/20 × 2 subsamples); gradient with metro intercepts and quadratic | | |
| 33 | +| `scripts/04_make_figures.py` | default tier `reproduced`; `fig_decomp` = sequential vs Shapley; `fig_nonlinear` adds spline segments | | |
| 34 | +| `scripts/05_make_tables.py` | default tier `reproduced`; 7 new tables (`shapley`, `se_comparison`, `spline`, `spatial_holdout`, `moran_sensitivity`, `type_effects`, `gradient`); notes corrected (quantile SEs, regression N of FE, robustness) ; `[t]` → `[htbp]` | | |
| 35 | +| `paper/main.tex` | v1.3, October 2026, subtitle N, abstract, keywords (8), `multirow`, `appendix`, float parameters, `\clearpage` before bibliography, appendix input | | |
| 36 | +| `paper/sections/*.tex` | all eight sections rewritten (see §3) | | |
| 37 | +| `paper/appendix/appendix.tex` | **new** (variable construction; Moran sensitivity; reconciliation v1.2 ↔ v1.3) | | |
| 38 | +| `paper/references.bib` | 64 → 91 entries (§4) | | |
| 39 | +| `README.md` | Status, TL;DR, headline table, pipeline, tiers, inventory, limitations, citation, notes | | |
| 40 | + | |
| 41 | +## 3. Major corrections (where · before · after · why · evidence) | |
| 42 | + | |
| 43 | +| # | Where | Before (v1.2) | After (v1.3) | Why / evidence | | |
| 44 | +|---|---|---|---|---| | |
| 45 | +| 1 | Title, abstract, data | N = 140,931; 1,153 FSAs | N = 142,121; 1,155 effects = 1,146 FSAs + 9 pooled | §1; `01_build_sample.py` log | | |
| 46 | +| 2 | Data §3.2 | province = scraper seed | province = FSA letter; 27 territory/invalid records dropped | §1 | | |
| 47 | +| 3 | Data §3.3 text | median "$565,000 / 125 m²" | $639,900 / 135.3 m² | text contradicted Table 1 even in v1.2 ($639,888 / 134.6) | | |
| 48 | +| 4 | Data | "nine provinces" with NB absent from tables | NB 2,980 listings (was hidden under "QC") | cross-tab | | |
| 49 | +| 5 | Results §5.1 | R² M1/M2/M3/M4/M5 = 0.464/0.469/0.567/0.762/0.767 | 0.467/0.470/0.605/0.769/0.776 | re-estimation; M3 rises because provinces are now correct | | |
| 50 | +| 6 | Results §5.2 (new) | "location alone ≈ 30 pp, more than all structure" (sequential only) | sequential 43.6/1.6/14.3/18.1; Shapley 33.0/7.5/8.9/28.2; Owen structure 34.0, type 7.3, location 36.3 | `shapley.csv`; order-dependence of sequential R² (Israeli 2007; Huettner & Sunder 2012) | | |
| 51 | +| 7 | Results §5.3 | elasticity 0.547 (0.009); bath 0.109 (+11 %) | 0.529 (0.009); bath 0.112 (+11.9 %); M3 0.148 (+16 %) | `coef_M5.csv`, `coef_M3.csv` | | |
| 52 | +| 8 | Results §5.3 | half-baths "proxy for older floor plans"; bedrooms "textbook ≈ 0" | half-baths −0.034 and bedrooms −0.006 **not significant under province-level inference** (wild p = 0.52 / 0.58); described as negligible | `se_comparison.csv` | | |
| 53 | +| 9 | Results §5.3 | has_lot −0.196, ln lot 0.030 read separately | −0.459 / 0.067 read jointly (≈ −0.02 at median lot); indicator ≈ dwelling-type marker (84 % of condos, 7 % of houses lack lot) | `coef_M5.csv`; has_lot by category | | |
| 54 | +| 10 | Results §5.4 (new) | type/ownership effects never shown | Table 4 with Kennedy %: house +45.7 %, triplex +43.0 %, fourplex +38.7 %, duplex +15.8 %, townhouse +0.1 %; freehold +10.7 %, condo +10.2 %, leasehold −12.2 % vs co-op | `coef_M5.csv` | | |
| 55 | +| 11 | Results §5.5 | top FSAs "all in the City of Vancouver" (+150–200 %); intro: "Vancouver and GTA" | V6S +226 %, V6T +201 %, V8E Whistler +197 %, V6G +185 %, V7T West Vancouver +179 %; first ON (M5R) 14th at +142 %; ratio ×10.5 extremes, ×6.7 P99/P1 | `fsa_premia.csv` | | |
| 56 | +| 12 | Results §5.5 | bottom FSAs "rural SK, MB, NL"; labels E2A (QC), R0M (SK) | A0B −69 %, A0G −64 %, S0N/S0C/S0H/S0A ≈ −62 %, R2W Winnipeg −62 %, E3Y/E2A (NB), V0C | `fsa_premia.csv` | | |
| 57 | +| 13 | Results §5.6 | quadratic b1 1.06, b2 −0.053; elasticity 0.65 → 0.45 | b1 1.147, b2 −0.063; 0.63 at 60 m² → 0.41 at 350 m²; spline 0.57/0.65/0.58/0.41/0.48; ΔR² 0.001 | `ext2.json`, `spline.csv` | | |
| 58 | +| 14 | Results §5.7 | "a doubling of distance → 8.5 % lower premium" | slope −0.082 per log unit ⇒ **−5.5 % per doubling**; metro-FE slope −0.079; quadratic steepening; bands +21 % (<5 km) → −38 % (>320 km); non-monotone 10–40 km | 2^λ − 1; `gradient_metro.json`, `gradient_bins.csv` | | |
| 59 | +| 15 | Robustness §6.1 | 6 cuts; elasticity 0.51–0.62 | 8 cuts; 0.49 (houses) – 0.62 (condos); capped counts 0.513; excl. pooled 0.522 | `robustness.csv` | | |
| 60 | +| 16 | Robustness §6.2 (new) | FSA-cluster SEs only | HC1 0.0037 / FSA 0.0094 / province 0.037 / two-way 0.0375 for ln area; wild p 0.004 for area, bath, lot | `se_comparison.csv` | | |
| 61 | +| 17 | Robustness §6.3 | "elasticity rises 0.56 → 0.60; bath stable 0.10–0.13" (table showed 0.18 → 0.07) | elasticity flat 0.57–0.59; bath declines 0.19 → 0.10; lot rises 0.006 → 0.053 | `quantile.csv` | | |
| 62 | +| 18 | Robustness §6.4 | Moran 0.46 → 0.08 (−82 %), z 145/23, "p < 0.01" | 0.50 → 0.06 (−87 %), z 141/16, p = 0.005 (minimum with 199 perms); k = 5: 0.52 → 0.11; k = 20: 0.47 → 0.03 | `ext2.json`, `moran_sensitivity.csv` | | |
| 63 | +| 19 | Robustness §6.5 | heterogeneity BC 0.49 … MB 0.66; NL 0.44 | NL 0.41, ON 0.47, BC 0.49, NS 0.50, QC 0.57, AB 0.59, NB 0.61, MB 0.66, SK 0.73 | `heterogeneity.csv` | | |
| 64 | +| 20 | Robustness §6.6 | LOPO mean 0.36; "above 0.40 for large central and western markets"; AB −0.10 | mean 0.34; MB/AB/NB/ON/SK/NS 0.46–0.52; NL 0.40; QC 0.19; **BC −0.49** | `lopo.csv` | | |
| 65 | +| 21 | Robustness §6.7 | OOS R² 0.764, MdAPE 15.8 %, 59.5 % within ±20 % | 0.772, 15.6 %, 60.1 %; 5 seeds 0.769 ± 0.010, 15.5 ± 0.2 %; **FSA holdout**: province-mean R² 0.52 / MdAPE 25 %; IDW-5 R² 0.74 / 17.3 % | `oos.json`, `spatial_holdout.json` | | |
| 66 | +| 22 | Abstract/intro/conclusion | "elasticity 0.51–0.62", "11–15 % per bathroom", "×9" | 0.53 (0.49–0.62), ≈12 %, ×10 | consistency with tables | | |
| 67 | +| 23 | Throughout | "list price" / "price" interchangeably | "asking price" / "implicit list price" consistently; limitation (i) expanded with mechanisms | master prompt priority | | |
| 68 | + | |
| 69 | +## 4. References added (29) — verification source | |
| 70 | + | |
| 71 | +Crossref REST API `works?query.bibliographic=` on 2026-10-17 unless noted; DOI recorded in `.bib`. | |
| 72 | + | |
| 73 | +allen2009canadian 10.1111/j.1540-5982.2009.01541.x · sheppard1999hedonic 10.1016/S1574-0080(99)80010-8 · bishop2020best 10.1093/reep/reaa001 · bishop2019estimating 10.1016/j.jue.2018.11.006 · sirmans2006value 10.1007/s11146-006-9983-5 · kennedy1981estimation (AER 71(4):801; RePEc `aea:aecrev:v:71:y:1981:i:4:p:801`) · abadie2023when 10.1093/qje/qjac038 · mackinnon2017wild 10.1002/jae.2508 · israeli2007shapley 10.1007/s10888-006-9036-6 · gromping2007estimators 10.1198/000313007X188252 · huettner2012axiomatic 10.1214/12-EJS710 · kelejian1998generalized 10.1023/A:1007707430416 · kelejian2001asymptotic 10.1016/S0304-4076(01)00064-1 · hill2018geospatial 10.1111/roiw.12303 · bogin2019local 10.1111/1540-6229.12233 · roberts2017cross 10.1111/ecog.02881 · combes2019costs 10.1093/restud/rdy063 · davis2008price 10.1016/j.jue.2007.02.003 · albouy2018metropolitan 10.1162/rest_a_00710 · diewert2015hedonic 10.1080/07474938.2014.944791 · horowitz1992role 10.1002/jae.3950070202 · merlo2004bargaining 10.1016/j.jue.2004.05.004 (DOI record fetched) · anglin2003tradeoff 10.1023/A:1021526332732 · han2016what 10.1016/j.jue.2016.03.008 · genesove2012search 10.1016/j.jue.2012.01.002 · hossain2009determinants 10.1080/00036840701522861 · dube2013commuter 10.1016/j.tra.2013.07.015 · theriault2003modelling 10.1108/02637470310464472 · statcan2022fsa (Statistics Canada catalogue 92-179-G2021001, release 2022-09-21, catalogue page fetched). | |
| 74 | + | |
| 75 | +**Removed:** cmhc2018canadian (unverifiable), gabaix2016power (uncited). | |
| 76 | +**Corrected:** sirmans2005composition pages 3–43 → 1–44 (+DOI); Court 1939, Griliches 1961, Combes & Gobillon 2015 → `@incollection`; Correia 2017 → `@unpublished`; DOIs added to rosen1974, lancaster1966, malpezzi2003, can1992, bourassa2007, case2004, kuminoff2010, glaeser2005, duan1983, cameron2015, mullainathan2017, ekeland2004, bajari2005, black1999, chay2005, linden2008, gibbons2012, moran1950, koenker1978, zietz2008, mcmillen2010, pace1998. | |
| 77 | + | |
| 78 | +## 5. Re-analyses executed | |
| 79 | + | |
| 80 | +See `REVIEW-REPORT.md` §5. Total wall-clock ≈ 2.5 min (Apple M5 Max). Seeds: `SEED_OOS=12345`, `SEED_MORAN=3`, `SEED_EXT2=7`, `SEED_REV=2026`; random-split repeats use seeds 12345, 1, 2, 3, 4. | |
| 81 | + | |
| 82 | +## 6. Items for the author's attention | |
| 83 | + | |
| 84 | +1. **Title N on SSRN** (7626678): v1.2 says 140,931; v1.3 says 142,121 — upload v1.3 and update the title there. | |
| 85 | +2. The repository's `.gitignore` excludes `data/processed/*.parquet` but the file is tracked (6 MB) — intentional for reproducibility; left as is. | |
| 86 | +3. The scraper seed is retained as `prov_seed` in the parquet for audit only; it is not used anywhere. | |
| 87 | +4. Historical docs (`AUDIT.md`, `CHANGES.md`, `PAPER_REVIEW.md`, `UPGRADE_REPORT.md`) describe the August 2026 rebuild and v1.2 upgrade; they are kept unchanged as history and some of their statements (e.g. "paper uses results/reference") no longer hold. | |
| 88 | + | |
| 89 | +## 7. Not modified for lack of data | |
| 90 | + | |
| 91 | +Transaction prices, time on market, age/renovation/quality fields, finer-than-FSA geography, amenity data for premium decomposition, additional snapshots for dynamics. | |
added
docs/REVIEW-REPORT.md
+103 −0
@@ -0,0 +1,103 @@ | ||
| 1 | +# REVIEW-REPORT — Editorial-board revision of UQO WP 9 (2026-10-17) | |
| 2 | + | |
| 3 | +**Paper:** *A Grand Hedonic Model of the Canadian Housing Market: Decomposing the Value of | |
| 4 | +Structure and Location across 142,121 MLS Listings with High-Dimensional Neighbourhood | |
| 5 | +Fixed Effects* — v1.2 (May 2026, 34 pp., 64 refs) → **v1.3 (October 2026, 52 pp., 91 refs)**. | |
| 6 | +Protocol: `Recherche-UQO/REVISION-MASTER-PROMPT.md` + `REVISION-PROTOCOLE.md`. Pre-revision | |
| 7 | +state: git tag `pre-revision-20261017`, `docs/main_pre-revision-20261017.pdf`. | |
| 8 | +Companion audit trail: `docs/CHANGELOG-REVISION.md`. | |
| 9 | + | |
| 10 | +## 0. Summary verdict | |
| 11 | + | |
| 12 | +A well-executed national measurement paper whose v1.2 had three structural problems that a | |
| 13 | +referee would have caught: (1) the headline "location ≈ 30 pp, more than all structure" | |
| 14 | +rested on a sequential R² ladder whose attribution is order-dependent; (2) ~12 % of listings | |
| 15 | +carried the wrong province (the scraper seed, not the postal code), visible on the published | |
| 16 | +premia figure ("E2A (QC)", "R0M (SK)"); (3) the paper's numbers came from a lost pipeline | |
| 17 | +that the shipped code reproduced only approximately. All three are fixed in v1.3: the paper | |
| 18 | +now reports the fully reproducible pipeline with FSA-derived provinces, complements the | |
| 19 | +ladder with a Shapley–Owen decomposition, and adds inference, functional-form and | |
| 20 | +spatial-validation analyses. The contribution survives in a more defensible form: | |
| 21 | +**structure and location are of comparable importance (≈34 vs ≈36 pp of R²), and location | |
| 22 | +is the largest block only once province and FSA are grouped.** | |
| 23 | + | |
| 24 | +## 1. Diagnosis by section (v1.2 → action in v1.3) | |
| 25 | + | |
| 26 | +| Section | Strengths | Weaknesses / errors found | Action | | |
| 27 | +|---|---|---|---| | |
| 28 | +| Abstract | Clear, quantified | "location alone ≈ 30 pp … dominant" unqualified; elasticity range 0.51–0.62 mixes samples; list-price nature not stated | Rewritten with attribution rule, inference caveat, within/out-of-support accuracy, explicit asking-price statement | | |
| 29 | +| Introduction | Good motivation, 3 contributions | Novelty claim unsupported by Canadian lit; "GTA among top premia" false (all top-12 are BC); no statement of list-price caveat | Rewritten; Canadian lit cited (Allen et al. 2009; Hossain & Latif 2009; Dubé et al. 2013; Thériault et al. 2003); design caveats stated upfront | | |
| 30 | +| Literature | 7 thematic subsections | Missing: Sheppard 1999, Sirmans et al. 2006 meta-analysis, Bishop et al. 2020, Bishop–Timmins 2019, Kennedy 1981, Kelejian–Prucha 1998/2001, Abadie et al. 2023, MacKinnon–Webb 2017, Shapley/Owen refs, Davis–Palumbo 2008, Albouy–Ehrlich–Shin 2018, Combes–Duranton–Gobillon 2019, Diewert et al. 2015, Hill–Scholz 2018, Bogin et al. 2019, list-price literature (Horowitz 1992, Merlo & Ortalo-Magné 2004, Anglin et al. 2003, Han–Strange 2016, Genesove–Han 2012), spatial CV (Roberts et al. 2017); one unverifiable reference (Mok & Chan 2018) | 27 verified refs added, 2 removed, 23 DOIs added; new subsection "List prices and the Canadian evidence" | | |
| 31 | +| Data | Transparent parsing | Median price "$565,000 / 125 m²" in text vs $639,888 / 134.6 in table; province = scraper seed (11.7 % mislabelled); NB present but reported as absent; territories listed as absent though 22 records existed; storeys/parking zero-fill and extreme values undocumented; "1,153 FSAs" counted 9 pooled province categories as FSAs | Province rebuilt from FSA letter; territories/invalid letters dropped; all counts recomputed and reported (147,236 → 142,121; 1,146 FSAs + 9 pools); StatCan FSA definition cited | | |
| 32 | +| Methodology | Correct equation, HDFE well explained | No equation for decomposition, inference, quantile, Moran, gradient, Duan; "ladder" as bullet list; Halvorsen–Palmquist cited but Kennedy correction absent; clustering level not discussed | Six numbered equations added (Kennedy, Shapley, quantile, Moran, Duan, gradient reading); inference subsection (FSA vs province, wild-cluster bootstrap); validation designs defined | | |
| 33 | +| Results | Clear figures | Order-dependent decomposition presented as fact; "doubling of distance → −8.5 %" wrong (slope −0.085 per log unit = −5.7 % per doubling); half-bath/bedroom effects over-interpreted; has_lot coefficient read in isolation; type/ownership effects never reported though invoked; gradient non-monotonicity unmentioned; Whistler (V8E) called "City of Vancouver" | Shapley/Owen table + figure; gradient table (bands, metro FE, quadratic) and correct per-doubling reading; type/ownership table with Kennedy %; joint reading of lot variables; spline table; geography paragraph corrected | | |
| 34 | +| Robustness | Six cuts, quantiles, Moran, LOPO, OOS | Quantile text claimed bathroom premium "stable 0.10–0.13" while table showed 0.18 → 0.07; LOPO text claimed ">0.40 for large central and western markets" while BC 0.32, QC 0.30, AB −0.10; Moran p "<0.01" with 199 permutations (min 0.005); OOS random split only; "analytical SEs" for quantiles undefined | Text rewritten to match recomputed tables; SE-comparison table (HC1/FSA/province/two-way + wild bootstrap); spatial holdout table (FSA-level, province-mean vs IDW); Moran sensitivity (k = 5/10/20, two subsamples); two robustness rows added (capped counts; excl. pooled FSAs) | | |
| 35 | +| Discussion | Good engagement with literature | Repeated v1.2 overstatements; "upper end of published estimates" for bathrooms unsupported | Rewritten; new "Inference" paragraph; six limitations incl. list-to-sale wedge mechanics; methodological message on sequential ladders | | |
| 36 | +| Conclusion | Modest tone | Numbers inconsistent with new results | Rewritten (four conclusions) | | |
| 37 | +| Appendix | none | — | Added: variable construction, Moran sensitivity, v1.2 ↔ v1.3 reconciliation table | | |
| 38 | + | |
| 39 | +## 2. Methodology — verdict on each point of §3 of the master prompt | |
| 40 | + | |
| 41 | +- **Specification justified:** yes; semi-log with log area; constant elasticity tested by quadratic and spline (ΔR² ≤ 0.001; curvature concentrated above 150 m²). | |
| 42 | +- **Estimation assumptions explicit:** now yes (conditional mean zero given attributes and FSA; within-FSA sorting of unobserved quality acknowledged as the residual threat). | |
| 43 | +- **Variables correctly defined:** yes after revision (zero-fill of storeys/parking, lot indicator + ln(1+lot), province from FSA all documented, Appendix A). | |
| 44 | +- **Fixed effects appropriate:** yes. One-way FSA FE, exact demeaning. Note: 9 "pooled residual" categories are not neighbourhoods; dropping them changes nothing (Table 7). | |
| 45 | +- **Spatial dependence defensible:** FE remove 87 % of Moran's I; residual I = 0.03–0.11 significant → clustered inference required; result robust to k and subsample. | |
| 46 | +- **Standard errors:** baseline FSA-cluster (G = 1,155) appropriate; province-cluster SEs ×4 larger; restricted wild-cluster bootstrap at province level (G = 9, 512 enumerated draws) → area, bathrooms, lot robust (p = 0.004 = minimum); half-baths and bedrooms not (p = 0.52, 0.58). Text revised accordingly. | |
| 47 | +- **Sample construction transparent:** yes (raw 172,019 → core 147,236 → trimmed 142,121; Appendix A). | |
| 48 | +- **Robustness addresses genuine threats:** 8 cuts incl. capped counts and no pooled FSAs; quantiles; functional form; alternative SEs; spatial holdout; LOPO. | |
| 49 | +- **Coefficient interpretation:** e^γ−1 for counts (11.9 % per bathroom), Kennedy (1981) for indicators (house +45.7 % vs apartment), gradient per doubling 2^λ−1 (−5.5 %). The v1.2 "−8.5 % per doubling" was a mathematical error. | |
| 50 | +- **Statistical vs economic significance:** distinguished (bedrooms −0.6 %: statistically significant under FSA clustering only, economically nil). | |
| 51 | +- **Causal claims:** none; FE described as measurement device; premia as composite capitalisation. | |
| 52 | + | |
| 53 | +## 3. Literature | |
| 54 | + | |
| 55 | +- **Existing references verified:** all 62 retained entries checked against Crossref (query + DOI) or publisher/RePEc records; DOIs added to 23 entries that lacked one; Sirmans et al. (2005) pages corrected to 1–44 (Crossref); Court (1939), Griliches (1961), Combes & Gobillon (2015) retyped as `@incollection`; Correia (2017) as `@unpublished`. | |
| 56 | +- **Removed (2):** `cmhc2018canadian` (Mok & Chan, "House Prices and the Geography of the Canadian Housing Market", CJUR 2018 — no Crossref/Scholar record; treated as unverifiable) → replaced by Allen, Amano, Byrne & Gregory (2009, CJE); `gabaix2016power` (orphan, never cited). | |
| 57 | +- **Added (29, all Crossref-verified with DOI except Kennedy 1981 verified via RePEc/AER and the StatCan catalogue record):** Sheppard 1999; Bishop et al. 2020; Bishop & Timmins 2019; Sirmans et al. 2006; Kennedy 1981; Abadie et al. 2023; MacKinnon & Webb 2017; Israeli 2007; Grömping 2007; Huettner & Sunder 2012; Kelejian & Prucha 1998, 2001; Hill & Scholz 2018; Bogin, Doerner & Larson 2019; Roberts et al. 2017; Combes, Duranton & Gobillon 2019; Davis & Palumbo 2008; Albouy, Ehrlich & Shin 2018; Diewert, de Haan & Hendriks 2015; Horowitz 1992; Merlo & Ortalo-Magné 2004; Anglin, Rutherford & Springer 2003; Han & Strange 2016; Genesove & Han 2012; Allen et al. 2009; Hossain & Latif 2009; Dubé, Thériault & Des Rosiers 2013; Thériault et al. 2003; Statistics Canada 2022 (FSA reference guide). Full list with DOIs in `CHANGELOG-REVISION.md` §4. | |
| 58 | +- **Count:** 64 → 91 entries, 91/91 cited, 0 unverified. | |
| 59 | + | |
| 60 | +## 4. Results — inconsistencies found and resolved | |
| 61 | + | |
| 62 | +1. Text vs table medians (price, area) — fixed by regeneration from the sample. | |
| 63 | +2. Quantile bathroom premium "stable" vs declining 0.18 → 0.07 — text corrected (now 0.19 → 0.10). | |
| 64 | +3. LOPO narrative vs table — corrected (new ranking: BC −0.49, QC 0.19). | |
| 65 | +4. Gradient per doubling −8.5 % → −5.5 % (correct transformation). | |
| 66 | +5. "All top FSAs in the City of Vancouver" — V8E is Whistler, V7T West Vancouver; corrected. | |
| 67 | +6. "GTA among the highest" — first ON FSA ranks 14th; corrected. | |
| 68 | +7. Premia labelled with wrong provinces (E2A "QC", R0M "SK") — fixed at source. | |
| 69 | +8. Moran p "<0.01" — reported as 0.005 (minimum attainable). | |
| 70 | +9. "1,153 FSAs" — 1,146 FSAs + 9 pooled categories; stated. | |
| 71 | +10. Storeys coefficient 0.001*** driven by a 593-storey record — explained; capped-row robustness. | |
| 72 | +11. Mean APE in repeated splits dominated by one listing with 3,620 parking spaces — trimmed mean reported with note. | |
| 73 | + | |
| 74 | +## 5. Re-analyses executed (all on this Mac, total < 3 min; scripts versioned) | |
| 75 | + | |
| 76 | +| Analysis | Script | Output | Runtime | | |
| 77 | +|---|---|---|---| | |
| 78 | +| Sample rebuild with FSA-derived province | `01_build_sample.py` | `data/processed/analysis.parquet` | 40 s | | |
| 79 | +| Ladder M1–M5, premia | `02_estimate_core.py` | `results/reproduced/{fit.json,coef_M*.csv,fsa_premia.csv,grand_model.parquet}` | 5 s | | |
| 80 | +| OOS, 8 robustness cuts, heterogeneity, quantiles, quadratic, gradient, Moran, LOPO | `03_estimate_extended.py` | `results/reproduced/*` | 8 s | | |
| 81 | +| Shapley/Owen (16 regressions ×2 samples), SE comparison + wild-cluster bootstrap (512 draws × 5 coefs), spline, spatial holdout (5 FSA reps + 5 random seeds), Moran sensitivity (12 configs), metro gradient | `06_revision_analyses.py` (new) | `shapley.csv`, `se_comparison.csv`, `spline.csv`, `spatial_holdout.json`, `moran_sensitivity.csv`, `gradient_metro.json` | 33 s | | |
| 82 | +| 13 tables, 17 figures | `05_make_tables.py`, `04_make_figures.py` | `results/tables/`, `figures/` | 35 s | | |
| 83 | + | |
| 84 | +## 6. Recommended analyses NOT executed (data unavailable or out of scope) | |
| 85 | + | |
| 86 | +- Linking listings to transaction prices / time on market (no sales data in the snapshot). | |
| 87 | +- Age, renovation and interior-quality controls (fields absent). | |
| 88 | +- Explicit spatial error model (Kelejian–Prucha GS2SLS) on the within-FSA residuals — feasible but adds complexity without changing conclusions; left for future work. | |
| 89 | +- Fully interacted submarket-specific coefficient systems (province × attribute slopes) — partially covered by province-by-province estimation. | |
| 90 | +- Finer geography (6-character postal codes or dissemination areas) — requires a boundary file / geocoding of ~140k points to census units; not attempted. | |
| 91 | +- Panel of snapshots for dynamics — single cross-section only. | |
| 92 | +- Decomposition of FSA premia into amenities (schools, transit) — requires external amenity data. | |
| 93 | +- ML benchmark (XGBoost/LightGBM) against the hedonic model — dead code in the original project was dropped in Aug 2026; not revived (would need `xgboost`, `lightgbm`). | |
| 94 | + | |
| 95 | +## 7. Remaining limitations (stated in §7.4 of the paper) | |
| 96 | + | |
| 97 | +Asking prices; unobserved quality and within-FSA sorting; noisy lot/storey/parking fields and reconstructed province; single cross-section of one platform; postal (not planning) geography and 9 pooled pseudo-neighbourhoods; structural prices do not transfer to BC. | |
| 98 | + | |
| 99 | +## 8. Publication maturity | |
| 100 | + | |
| 101 | +- **Target journals:** *Journal of Housing Economics*, *Journal of Real Estate Finance and Economics*, *Regional Science and Urban Economics* (empirical note), *Canadian Journal of Economics* (Canadian scope), *Journal of Property Research*. | |
| 102 | +- **Readiness:** suitable for submission as a measurement/benchmark paper after the author checks the items flagged in `CHANGELOG-REVISION.md` §6 (title N change on SSRN; wording of the novelty claim). | |
| 103 | +- **Main rejection risks:** (i) asking prices rather than transactions — the central vulnerability; now framed honestly but a referee at a top field journal may still ask for a list-to-sale validation on a subsample; (ii) descriptive rather than causal contribution — framed as measurement; (iii) FSA geography as "neighbourhood"; (iv) single snapshot, unknown platform coverage; (v) the two lot coefficients are hard to interpret and depend on a free-text parser. | |
modified
figures/fig_decomp.png
+0 −0
Binary file not shown.
modified
figures/fig_fit.png
+0 −0
Binary file not shown.
modified
figures/fig_forest.png
+0 −0
Binary file not shown.
modified
figures/fig_fsa_map.png
+0 −0
Binary file not shown.
modified
figures/fig_gradient.png
+0 −0
Binary file not shown.
modified
figures/fig_heterogeneity.png
+0 −0
Binary file not shown.
modified
figures/fig_map.png
+0 −0
Binary file not shown.
modified
figures/fig_moran.png
+0 −0
Binary file not shown.
modified
figures/fig_nonlinear.png
+0 −0
Binary file not shown.
modified
figures/fig_oos.png
+0 −0
Binary file not shown.
modified
figures/fig_premia.png
+0 −0
Binary file not shown.
modified
figures/fig_price_dist.png
+0 −0
Binary file not shown.
modified
figures/fig_province_ppm2.png
+0 −0
Binary file not shown.
modified
figures/fig_quantile.png
+0 −0
Binary file not shown.
modified
figures/fig_r2.png
+0 −0
Binary file not shown.
modified
figures/fig_resid.png
+0 −0
Binary file not shown.
modified
figures/fig_size_gradient.png
+0 −0
Binary file not shown.
added
paper/appendix/appendix.tex
+125 −0
@@ -0,0 +1,125 @@ | ||
| 1 | +% Author: Simon-Pierre Boucher — contact@spboucher.ai | |
| 2 | +% ============================================================================ | |
| 3 | +% Appendix | |
| 4 | +% ============================================================================ | |
| 5 | +\newpage | |
| 6 | +\begin{appendices} | |
| 7 | + | |
| 8 | +\renewcommand{\thetable}{A\arabic{table}} | |
| 9 | +\renewcommand{\thefigure}{A\arabic{figure}} | |
| 10 | +\setcounter{table}{0} | |
| 11 | +\setcounter{figure}{0} | |
| 12 | + | |
| 13 | +\section{Variable construction} | |
| 14 | +\label{app:variables} | |
| 15 | + | |
| 16 | +The raw \texttt{listings} table stores every attribute as text. The estimation sample is | |
| 17 | +built by the first script of the pipeline (\texttt{01\_build\_sample.py}) from the rules | |
| 18 | +below, which were reconstructed from the description of the original (May 2026) pipeline and validated | |
| 19 | +against its stored outputs; the original cleaning code was not preserved. | |
| 20 | + | |
| 21 | +\paragraph{Bedrooms.} The integer components of the raw string are summed, so that | |
| 22 | +``3~+~1'' (three bedrooms on the main level and one below grade) is coded as four. | |
| 23 | + | |
| 24 | +\paragraph{Living area.} The explicit floor-area measurement is preferred. Exact entries | |
| 25 | +are used as reported; banded entries such as ``1100--1500 sqft'' are mapped to the upper | |
| 26 | +bound of the band, the convention that reproduces the published living-area distribution. | |
| 27 | +When the field is absent the interior-size field is used. Square feet are converted at | |
| 28 | +$1\text{ ft}^2 = 0.0929\text{ m}^2$; entries labelled m$^2$ are used as such. | |
| 29 | + | |
| 30 | +\paragraph{Lot area.} The free-text lot field is parsed when it contains a number with a | |
| 31 | +recognisable unit (square feet, square metres, acres or hectares), a phrase of the form | |
| 32 | +``under $x$ acre'', an acreage range (mapped to its upper bound), or a frontage-by-depth | |
| 33 | +pair in feet. Parsed lots above the 99th percentile of positive values are treated as | |
| 34 | +unparsed, because they are dominated by multi-acre acreage strings whose relationship to | |
| 35 | +the dwelling is unclear. The variable entering the regressions is $\ln(1+\text{lot area})$ | |
| 36 | +together with an indicator equal to one when a positive lot area was parsed. | |
| 37 | + | |
| 38 | +\paragraph{Counts.} Full bathrooms, half bathrooms, parking spaces and storeys are taken as | |
| 39 | +reported; half bathrooms, parking and storeys are set to zero when absent. No cap is | |
| 40 | +applied in the baseline; Table~\ref{tab:robustness} caps storeys and parking at their 99th | |
| 41 | +percentiles. | |
| 42 | + | |
| 43 | +\paragraph{Dwelling type and ownership.} The raw building type is consolidated into eight | |
| 44 | +groups (house; apartment; row or townhouse; duplex; triplex; fourplex; manufactured home, | |
| 45 | +which pools manufactured, mobile and park-model homes; other), and the ownership type into | |
| 46 | +six (freehold; condominium or strata; leasehold; co-operative or co-ownership; other; not | |
| 47 | +reported). The broad listing category (house, condominium, plex, townhouse, apartment) is | |
| 48 | +also retained as a control. | |
| 49 | + | |
| 50 | +\paragraph{Neighbourhood and province.} The FSA is the first three characters of the postal | |
| 51 | +code, retained when it matches the pattern letter--digit--letter. The province is the | |
| 52 | +Canada Post region of the first letter: A, Newfoundland and Labrador; B, Nova Scotia; C, | |
| 53 | +Prince Edward Island; E, New Brunswick; G, H and J, Quebec; K, L, M, N and P, Ontario; R, | |
| 54 | +Manitoba; S, Saskatchewan; T, Alberta; V, British Columbia \citep{statcan2022fsa}. The | |
| 55 | +letters X and Y (territories) and the unassigned letters O and W (27 records in total) are | |
| 56 | +dropped. The scraper's own province field, which records the regional seed of the | |
| 57 | +extraction, is retained for reference only; it disagrees with the FSA-based province for | |
| 58 | +11.7\% of the estimation sample. | |
| 59 | + | |
| 60 | +\paragraph{Filters.} Listings are kept when the asking price is strictly positive, living | |
| 61 | +area, bedrooms and bathrooms are non-missing and the FSA is valid (147{,}236 of 172{,}019 | |
| 62 | +raw records); the 1st and 99th percentiles of price and living area are then applied as | |
| 63 | +inclusive bounds, leaving 142{,}121 listings. FSAs with fewer than 25 listings are pooled | |
| 64 | +into one residual category per province. | |
| 65 | + | |
| 66 | +\section{Additional results} | |
| 67 | +\label{app:tables} | |
| 68 | + | |
| 69 | +\input{../results/tables/moran_sensitivity} | |
| 70 | + | |
| 71 | +\section{Reconciliation with the May 2026 version} | |
| 72 | +\label{app:reconciliation} | |
| 73 | + | |
| 74 | +The May 2026 version of this paper (v1.2) reported estimates from an upstream pipeline that | |
| 75 | +was not preserved. The present version re-estimates every result from the reconstructed | |
| 76 | +pipeline described in Appendix~\ref{app:variables}, with two substantive differences: the | |
| 77 | +province of each listing is derived from its FSA rather than from the scraper's regional | |
| 78 | +seed, and the reconstructed trimming rule retains 142{,}121 rather than 140{,}931 listings | |
| 79 | +(a difference of 0.8\%, concentrated at the upper living-area bound). All headline | |
| 80 | +magnitudes are preserved (Table~\ref{tab:reconciliation}); the estimates that changed | |
| 81 | +materially are those that use the province variable---the province-effects $R^2$, the | |
| 82 | +leave-one-province-out ranking and the provincial heterogeneity---and the two lot | |
| 83 | +coefficients, whose free-text parser could not be recovered exactly. The variance | |
| 84 | +decomposition, the inference comparison, the spline, the spatial holdout and the Moran | |
| 85 | +sensitivity analysis are new to this version. | |
| 86 | + | |
| 87 | +\begin{table}[htbp]\centering | |
| 88 | +\caption{Headline estimates: May 2026 version (v1.2) and present version (v1.3)} | |
| 89 | +\label{tab:reconciliation} | |
| 90 | +\begin{threeparttable} | |
| 91 | +\begin{tabular}{lcc} | |
| 92 | +\toprule | |
| 93 | +Quantity & v1.2 (May 2026) & v1.3 (this version) \\ | |
| 94 | +\midrule | |
| 95 | +Estimation sample & 140{,}931 & 142{,}121 \\ | |
| 96 | +Absorbed location effects & 1{,}153 & 1{,}155 \\ | |
| 97 | +$R^2$: M1 / M2 / M3 (houses) & 0.464 / 0.469 / 0.567 & 0.467 / 0.470 / 0.605 \\ | |
| 98 | +$R^2$: M4 (houses, FSA) / M5 (grand) & 0.762 / 0.767 & 0.769 / 0.776 \\ | |
| 99 | +Living-area elasticity, M5 (SE) & 0.547 (0.009) & 0.529 (0.009) \\ | |
| 100 | +Full-bathroom coefficient, M5 (SE) & 0.109 (0.004) & 0.112 (0.004) \\ | |
| 101 | +Bedrooms, M5 & $-0.002$ & $-0.006$ \\ | |
| 102 | +$\ln$ lot / lot indicator, M5 & 0.030 / $-0.196$ & 0.067 / $-0.459$ \\ | |
| 103 | +Out-of-sample $R^2$ / MdAPE & 0.764 / 15.8\% & 0.772 / 15.6\% \\ | |
| 104 | +Moran's $I$, structure $\to$ grand ($k=10$) & 0.46 $\to$ 0.08 & 0.50 $\to$ 0.06 \\ | |
| 105 | +Gradient slope on $\ln$ distance & $-0.085$ & $-0.082$ \\ | |
| 106 | +Quadratic in $\ln$ area: $\beta_1$ / $\beta_2$ & 1.065 / $-0.053$ & 1.147 / $-0.063$ \\ | |
| 107 | +LOPO mean within-province $R^2$ & 0.362 (AB negative) & 0.341 (BC negative) \\ | |
| 108 | +Size elasticity range across provinces & 0.44 (NL)--0.66 (MB) & 0.41 (NL)--0.73 (SK) \\ | |
| 109 | +Premium ratio, most / least expensive FSA & $\approx 9$ & $\approx 10$ \\ | |
| 110 | +\bottomrule | |
| 111 | +\end{tabular} | |
| 112 | +\begin{tablenotes}\footnotesize | |
| 113 | +\item Notes: v1.2 values are the published numbers of the May 2026 version, archived in | |
| 114 | +\texttt{results/reference/}; v1.3 values are produced by the current pipeline | |
| 115 | +(\texttt{results/reproduced/}). The v1.2 province variable was the scraper's regional seed, | |
| 116 | +which mislabelled about 12\% of listings; the v1.2 statement that the lowest-premium FSAs | |
| 117 | +included ``E2A (QC)'' and ``R0M (SK)'' reflected this error (E is New Brunswick and R is | |
| 118 | +Manitoba). In v1.2 a doubling of distance was described as lowering the location premium by | |
| 119 | +8.5\%; the correct reading of a slope of $-0.085$ on $\ln$ distance is $-5.7\%$ per | |
| 120 | +doubling. | |
| 121 | +\end{tablenotes} | |
| 122 | +\end{threeparttable} | |
| 123 | +\end{table} | |
| 124 | + | |
| 125 | +\end{appendices} | |
modified
paper/main.pdf
+0 −0
Binary file not shown.
modified
paper/main.tex
+42 −23
@@ -4,6 +4,7 @@ | ||
| 4 | 4 | % A Grand Hedonic Model of the Canadian Housing Market |
| 5 | 5 | % |
| 6 | 6 | % Build: latexmk -pdf main.tex (or `make` in this directory) |
| 7 | +% Revised by the editorial-board review of 2026-10-17 (v1.3): see docs/REVIEW-REPORT.md. | |
| 7 | 8 | % Figures are read from ../figures/, tables from ../results/tables/. |
| 8 | 9 | % ============================================================================ |
| 9 | 10 | \documentclass[12pt,letterpaper]{article} |
@@ -29,11 +30,18 @@ | ||
| 29 | 30 | \usepackage{booktabs} |
| 30 | 31 | \usepackage{threeparttable} |
| 31 | 32 | \usepackage{makecell} |
| 33 | +\usepackage{multirow} | |
| 32 | 34 | |
| 33 | 35 | % ---------------------------------------------------------------- figures |
| 34 | 36 | \usepackage{graphicx} |
| 35 | 37 | \usepackage{subcaption} |
| 36 | 38 | \graphicspath{{../figures/}{./}} |
| 39 | +\renewcommand{\topfraction}{0.9} | |
| 40 | +\renewcommand{\bottomfraction}{0.6} | |
| 41 | +\renewcommand{\textfraction}{0.07} | |
| 42 | +\renewcommand{\floatpagefraction}{0.75} | |
| 43 | +\setcounter{topnumber}{3} | |
| 44 | +\setcounter{totalnumber}{4} | |
| 37 | 45 | |
| 38 | 46 | % ---------------------------------------------------------------- captions |
| 39 | 47 | \usepackage[font=small,labelfont=bf,labelsep=period,justification=justified,singlelinecheck=false]{caption} |
@@ -58,16 +66,19 @@ | ||
| 58 | 66 | \usepackage{enumitem} |
| 59 | 67 | \setlist{nosep,leftmargin=*} |
| 60 | 68 | |
| 69 | +% ---------------------------------------------------------------- appendix | |
| 70 | +\usepackage[toc,page]{appendix} | |
| 71 | + | |
| 61 | 72 | % ============================================================================ |
| 62 | 73 | % METADATA |
| 63 | 74 | % ============================================================================ |
| 64 | 75 | \newcommand{\WPnumber}{9} |
| 65 | 76 | \newcommand{\WPtitle}{A Grand Hedonic Model of the Canadian Housing Market} |
| 66 | 77 | \newcommand{\WPsubtitle}{Decomposing the Value of Structure and Location across |
| 67 | − 140{,}931 MLS Listings with High-Dimensional Neighbourhood Fixed Effects} | |
| 68 | −\newcommand{\WPdate}{May 2026} | |
| 69 | −\newcommand{\WPversion}{1.2} | |
| 70 | −\newcommand{\WPkeywords}{hedonic pricing, housing markets, Canada, fixed effects, spatial heterogeneity, automated valuation} | |
| 78 | + 142{,}121 MLS Listings with High-Dimensional Neighbourhood Fixed Effects} | |
| 79 | +\newcommand{\WPdate}{October 2026} | |
| 80 | +\newcommand{\WPversion}{1.3} | |
| 81 | +\newcommand{\WPkeywords}{hedonic pricing, housing markets, Canada, high-dimensional fixed effects, neighbourhood effects, spatial autocorrelation, automated valuation model, list prices} | |
| 71 | 82 | \newcommand{\WPjel}{R31, R21, C21, C55} |
| 72 | 83 | |
| 73 | 84 | \newcommand{\WPauthor}{Simon-Pierre Boucher} |
@@ -78,24 +89,30 @@ | ||
| 78 | 89 | 283, boulevard Alexandre-Tach\'e\\ Gatineau, Qu\'ebec, Canada J9A 1L8} |
| 79 | 90 | |
| 80 | 91 | \newcommand{\WPabstract}{% |
| 81 | −We estimate a large-scale hedonic price model for the Canadian residential real-estate | |
| 82 | −market using a cross-section of 140{,}931 active MLS listings drawn from the nine provinces | |
| 83 | −present in the data. A semi-logarithmic specification decomposes dwelling prices into | |
| 84 | −structural attributes, dwelling type and ownership form, and 1{,}153 neighbourhood | |
| 85 | −(Forward Sortation Area) fixed effects estimated by absorbing least squares. Moving from a | |
| 86 | −purely structural model to the full specification raises the explained share of price | |
| 87 | −variation from 46\% to 77\%, establishing that location is the dominant price determinant | |
| 88 | −in Canada: neighbourhood effects alone account for roughly thirty percentage points of | |
| 89 | −explanatory power. The living-area elasticity is 0.51--0.62, each full bathroom commands a | |
| 90 | −premium of about 11--15\%, and---conditional on floor space---bedroom counts are | |
| 91 | −economically negligible. The implicit prices are stable across alternative samples and | |
| 92 | −trimming rules, and the model delivers strong out-of-sample valuation accuracy (held-out | |
| 93 | −$R^2=0.76$; median absolute error of 16\%). The neighbourhood effects absorb the bulk of | |
| 94 | −the spatial dependence in prices---Moran's~$I$ falls from 0.46 to 0.08---and we further | |
| 95 | −document diminishing returns to floor space, an urban price gradient that decays with | |
| 96 | −distance to major metros, and quantile and cross-province heterogeneity in the implicit | |
| 97 | −prices. We map the resulting neighbourhood premia, which span a factor of roughly nine | |
| 98 | −between the most and least expensive areas.} | |
| 92 | +We estimate a national hedonic price function for the Canadian residential market on a | |
| 93 | +cross-section of 142{,}121 active MLS listings from nine provinces. A semi-logarithmic | |
| 94 | +specification relates the log list price to structural attributes, dwelling type and | |
| 95 | +ownership form, and 1{,}155 absorbed neighbourhood (Forward Sortation Area) fixed effects | |
| 96 | +estimated by absorbing least squares with neighbourhood-clustered inference. Moving from a | |
| 97 | +structural model to the full specification raises the explained share of log-price | |
| 98 | +variation from 44\% to 78\%. Because structure and location are correlated, the attribution | |
| 99 | +of this gain depends on the order in which blocks enter: a Shapley--Owen decomposition | |
| 100 | +assigns about 34 percentage points to structure and 36 to location, so that the two are of | |
| 101 | +comparable importance and the neighbourhood is the single largest block once province and | |
| 102 | +neighbourhood are grouped. Conditional on location, the living-area elasticity is 0.53 | |
| 103 | +(0.49--0.62 across samples), each full bathroom adds about 12\%, and bedroom counts are | |
| 104 | +economically negligible. The implicit prices of area and bathrooms survive province-level | |
| 105 | +wild-cluster bootstrap inference, whereas the small half-bathroom and bedroom effects do not. | |
| 106 | +Neighbourhood effects remove 87\% of the spatial autocorrelation in residuals (Moran's~$I$ | |
| 107 | +0.50 to 0.06). The model values held-out listings in neighbourhoods seen in training with | |
| 108 | +an out-of-sample $R^2$ of 0.77 and a median absolute percentage error of 15.6\%; for | |
| 109 | +neighbourhoods never seen in training, spatial interpolation of the neighbourhood effect | |
| 110 | +still yields $R^2=0.74$ and a median error of 17\%. Floor space displays mild diminishing | |
| 111 | +returns, the location premium falls by about 5.5\% per doubling of distance to the nearest | |
| 112 | +metropolitan centre, and implicit prices vary across the price distribution and across | |
| 113 | +provinces. Neighbourhood premia span a factor of about ten between the most and least | |
| 114 | +expensive areas. Because the dependent variable is the asking price rather than the | |
| 115 | +transaction price, all estimates describe the pricing of listings, not of sales.} | |
| 99 | 116 | |
| 100 | 117 | \hypersetup{pdftitle={A Grand Hedonic Model of the Canadian Housing Market}, pdfauthor={Simon-Pierre Boucher}} |
| 101 | 118 | |
@@ -113,7 +130,9 @@ between the most and least expensive areas.} | ||
| 113 | 130 | \input{sections/discussion} |
| 114 | 131 | \input{sections/conclusion} |
| 115 | 132 | |
| 116 | −\newpage | |
| 133 | +\clearpage | |
| 117 | 134 | \bibliography{references} |
| 118 | 135 | |
| 136 | +\input{appendix/appendix} | |
| 137 | + | |
| 119 | 138 | \end{document} |
modified
paper/references.bib
+382 −63
@@ -9,7 +9,8 @@ | ||
| 9 | 9 | volume = {82}, |
| 10 | 10 | number = {1}, |
| 11 | 11 | pages = {34--55}, |
| 12 | − year = {1974} | |
| 12 | + year = {1974}, | |
| 13 | + doi = {10.1086/260169} | |
| 13 | 14 | } |
| 14 | 15 | |
| 15 | 16 | @article{lancaster1966new, |
@@ -19,23 +20,28 @@ | ||
| 19 | 20 | volume = {74}, |
| 20 | 21 | number = {2}, |
| 21 | 22 | pages = {132--157}, |
| 22 | − year = {1966} | |
| 23 | + year = {1966}, | |
| 24 | + doi = {10.1086/259131} | |
| 23 | 25 | } |
| 24 | 26 | |
| 25 | −@article{court1939hedonic, | |
| 26 | − author = {Court, Andrew T.}, | |
| 27 | − title = {Hedonic Price Indexes with Automotive Examples}, | |
| 28 | − journal = {The Dynamics of Automobile Demand, General Motors}, | |
| 29 | − pages = {99--117}, | |
| 30 | − year = {1939} | |
| 27 | +@incollection{court1939hedonic, | |
| 28 | + author = {Court, Andrew T.}, | |
| 29 | + title = {Hedonic Price Indexes with Automotive Examples}, | |
| 30 | + booktitle = {The Dynamics of Automobile Demand}, | |
| 31 | + publisher = {General Motors Corporation}, | |
| 32 | + address = {New York}, | |
| 33 | + pages = {99--117}, | |
| 34 | + year = {1939} | |
| 31 | 35 | } |
| 32 | 36 | |
| 33 | −@article{griliches1961hedonic, | |
| 34 | − author = {Griliches, Zvi}, | |
| 35 | − title = {Hedonic Price Indexes for Automobiles: An Econometric Analysis of Quality Change}, | |
| 36 | − journal = {The Price Statistics of the Federal Government, NBER}, | |
| 37 | − pages = {173--196}, | |
| 38 | − year = {1961} | |
| 37 | +@incollection{griliches1961hedonic, | |
| 38 | + author = {Griliches, Zvi}, | |
| 39 | + title = {Hedonic Price Indexes for Automobiles: An Econometric Analysis of Quality Change}, | |
| 40 | + booktitle = {The Price Statistics of the Federal Government}, | |
| 41 | + publisher = {National Bureau of Economic Research}, | |
| 42 | + address = {New York}, | |
| 43 | + pages = {173--196}, | |
| 44 | + year = {1961} | |
| 39 | 45 | } |
| 40 | 46 | |
| 41 | 47 | @article{halvorsen1980interpretation, |
@@ -54,8 +60,9 @@ | ||
| 54 | 60 | journal = {Journal of Real Estate Literature}, |
| 55 | 61 | volume = {13}, |
| 56 | 62 | number = {1}, |
| 57 | − pages = {3--43}, | |
| 58 | − year = {2005} | |
| 63 | + pages = {1--44}, | |
| 64 | + year = {2005}, | |
| 65 | + doi = {10.1080/10835547.2005.12090154} | |
| 59 | 66 | } |
| 60 | 67 | |
| 61 | 68 | @incollection{malpezzi2003hedonic, |
@@ -65,7 +72,8 @@ | ||
| 65 | 72 | editor = {O'Sullivan, Tony and Gibb, Kenneth}, |
| 66 | 73 | publisher = {Blackwell}, |
| 67 | 74 | pages = {67--89}, |
| 68 | − year = {2003} | |
| 75 | + year = {2003}, | |
| 76 | + doi = {10.1002/9780470690680.ch5} | |
| 69 | 77 | } |
| 70 | 78 | |
| 71 | 79 | @article{can1992specification, |
@@ -75,7 +83,8 @@ | ||
| 75 | 83 | volume = {22}, |
| 76 | 84 | number = {3}, |
| 77 | 85 | pages = {453--474}, |
| 78 | − year = {1992} | |
| 86 | + year = {1992}, | |
| 87 | + doi = {10.1016/0166-0462(92)90039-4} | |
| 79 | 88 | } |
| 80 | 89 | |
| 81 | 90 | @book{anselin1988spatial, |
@@ -92,7 +101,8 @@ | ||
| 92 | 101 | volume = {35}, |
| 93 | 102 | number = {2}, |
| 94 | 103 | pages = {143--160}, |
| 95 | − year = {2007} | |
| 104 | + year = {2007}, | |
| 105 | + doi = {10.1007/s11146-007-9036-8} | |
| 96 | 106 | } |
| 97 | 107 | |
| 98 | 108 | @article{case2004modeling, |
@@ -102,7 +112,8 @@ | ||
| 102 | 112 | volume = {29}, |
| 103 | 113 | number = {2}, |
| 104 | 114 | pages = {167--191}, |
| 105 | − year = {2004} | |
| 115 | + year = {2004}, | |
| 116 | + doi = {10.1023/B:REAL.0000035309.60607.53} | |
| 106 | 117 | } |
| 107 | 118 | |
| 108 | 119 | @article{kuminoff2010which, |
@@ -112,7 +123,8 @@ | ||
| 112 | 123 | volume = {60}, |
| 113 | 124 | number = {3}, |
| 114 | 125 | pages = {145--160}, |
| 115 | − year = {2010} | |
| 126 | + year = {2010}, | |
| 127 | + doi = {10.1016/j.jeem.2010.06.001} | |
| 116 | 128 | } |
| 117 | 129 | |
| 118 | 130 | @article{glaeser2005why, |
@@ -122,7 +134,8 @@ | ||
| 122 | 134 | volume = {95}, |
| 123 | 135 | number = {2}, |
| 124 | 136 | pages = {329--333}, |
| 125 | − year = {2005} | |
| 137 | + year = {2005}, | |
| 138 | + doi = {10.1257/000282805774669961} | |
| 126 | 139 | } |
| 127 | 140 | |
| 128 | 141 | @article{duan1983smearing, |
@@ -132,7 +145,8 @@ | ||
| 132 | 145 | volume = {78}, |
| 133 | 146 | number = {383}, |
| 134 | 147 | pages = {605--610}, |
| 135 | − year = {1983} | |
| 148 | + year = {1983}, | |
| 149 | + doi = {10.1080/01621459.1983.10478017} | |
| 136 | 150 | } |
| 137 | 151 | |
| 138 | 152 | @article{cameron2015practitioner, |
@@ -142,25 +156,17 @@ | ||
| 142 | 156 | volume = {50}, |
| 143 | 157 | number = {2}, |
| 144 | 158 | pages = {317--372}, |
| 145 | − year = {2015} | |
| 159 | + year = {2015}, | |
| 160 | + doi = {10.3368/jhr.50.2.317} | |
| 146 | 161 | } |
| 147 | 162 | |
| 148 | −@article{correia2017reghdfe, | |
| 163 | +@unpublished{correia2017reghdfe, | |
| 149 | 164 | author = {Correia, Sergio}, |
| 150 | 165 | title = {Linear Models with High-Dimensional Fixed Effects: An Efficient and Feasible Estimator}, |
| 151 | − journal = {Working Paper}, | |
| 166 | + note = {Working paper, Duke University}, | |
| 152 | 167 | year = {2017} |
| 153 | 168 | } |
| 154 | 169 | |
| 155 | −@article{gabaix2016power, | |
| 156 | − author = {Gabaix, Xavier}, | |
| 157 | − title = {Power Laws in Economics: An Introduction}, | |
| 158 | − journal = {Journal of Economic Perspectives}, | |
| 159 | − volume = {30}, | |
| 160 | − number = {1}, | |
| 161 | − pages = {185--206}, | |
| 162 | − year = {2016} | |
| 163 | −} | |
| 164 | 170 | |
| 165 | 171 | @article{mullainathan2017machine, |
| 166 | 172 | author = {Mullainathan, Sendhil and Spiess, Jann}, |
@@ -169,18 +175,10 @@ | ||
| 169 | 175 | volume = {31}, |
| 170 | 176 | number = {2}, |
| 171 | 177 | pages = {87--106}, |
| 172 | − year = {2017} | |
| 178 | + year = {2017}, | |
| 179 | + doi = {10.1257/jep.31.2.87} | |
| 173 | 180 | } |
| 174 | 181 | |
| 175 | −@article{cmhc2018canadian, | |
| 176 | − author = {Mok, Diana and Chan, Sheryl}, | |
| 177 | − title = {House Prices and the Geography of the Canadian Housing Market}, | |
| 178 | − journal = {Canadian Journal of Urban Research}, | |
| 179 | − volume = {27}, | |
| 180 | − number = {1}, | |
| 181 | − pages = {1--18}, | |
| 182 | − year = {2018} | |
| 183 | −} | |
| 184 | 182 | |
| 185 | 183 | @article{ekeland2004identification, |
| 186 | 184 | author = {Ekeland, Ivar and Heckman, James J. and Nesheim, Lars}, |
@@ -189,7 +187,8 @@ | ||
| 189 | 187 | volume = {112}, |
| 190 | 188 | number = {S1}, |
| 191 | 189 | pages = {S60--S109}, |
| 192 | − year = {2004} | |
| 190 | + year = {2004}, | |
| 191 | + doi = {10.1086/379947} | |
| 193 | 192 | } |
| 194 | 193 | |
| 195 | 194 | @article{bajari2005hedonic, |
@@ -199,7 +198,8 @@ | ||
| 199 | 198 | volume = {113}, |
| 200 | 199 | number = {6}, |
| 201 | 200 | pages = {1239--1276}, |
| 202 | − year = {2005} | |
| 201 | + year = {2005}, | |
| 202 | + doi = {10.1086/498586} | |
| 203 | 203 | } |
| 204 | 204 | |
| 205 | 205 | @article{black1999better, |
@@ -209,7 +209,8 @@ | ||
| 209 | 209 | volume = {114}, |
| 210 | 210 | number = {2}, |
| 211 | 211 | pages = {577--599}, |
| 212 | − year = {1999} | |
| 212 | + year = {1999}, | |
| 213 | + doi = {10.1162/003355399556070} | |
| 213 | 214 | } |
| 214 | 215 | |
| 215 | 216 | @article{chay2005does, |
@@ -219,7 +220,8 @@ | ||
| 219 | 220 | volume = {113}, |
| 220 | 221 | number = {2}, |
| 221 | 222 | pages = {376--424}, |
| 222 | − year = {2005} | |
| 223 | + year = {2005}, | |
| 224 | + doi = {10.1086/427462} | |
| 223 | 225 | } |
| 224 | 226 | |
| 225 | 227 | @article{linden2008estimates, |
@@ -229,7 +231,8 @@ | ||
| 229 | 231 | volume = {98}, |
| 230 | 232 | number = {3}, |
| 231 | 233 | pages = {1103--1127}, |
| 232 | − year = {2008} | |
| 234 | + year = {2008}, | |
| 235 | + doi = {10.1257/aer.98.3.1103} | |
| 233 | 236 | } |
| 234 | 237 | |
| 235 | 238 | @book{lesage2009introduction, |
@@ -246,16 +249,20 @@ | ||
| 246 | 249 | volume = {52}, |
| 247 | 250 | number = {2}, |
| 248 | 251 | pages = {172--191}, |
| 249 | − year = {2012} | |
| 252 | + year = {2012}, | |
| 253 | + doi = {10.1111/j.1467-9787.2012.00760.x} | |
| 250 | 254 | } |
| 251 | 255 | |
| 252 | −@article{combes2015empirics, | |
| 253 | − author = {Combes, Pierre-Philippe and Gobillon, Laurent}, | |
| 254 | − title = {The Empirics of Agglomeration Economies}, | |
| 255 | − journal = {Handbook of Regional and Urban Economics}, | |
| 256 | − volume = {5}, | |
| 257 | − pages = {247--348}, | |
| 258 | − year = {2015} | |
| 256 | +@incollection{combes2015empirics, | |
| 257 | + author = {Combes, Pierre-Philippe and Gobillon, Laurent}, | |
| 258 | + title = {The Empirics of Agglomeration Economies}, | |
| 259 | + booktitle = {Handbook of Regional and Urban Economics}, | |
| 260 | + editor = {Duranton, Gilles and Henderson, J. Vernon and Strange, William C.}, | |
| 261 | + volume = {5}, | |
| 262 | + publisher = {Elsevier}, | |
| 263 | + pages = {247--348}, | |
| 264 | + year = {2015}, | |
| 265 | + doi = {10.1016/B978-0-444-59517-1.00005-2} | |
| 259 | 266 | } |
| 260 | 267 | |
| 261 | 268 | @article{moran1950notes, |
@@ -265,7 +272,8 @@ | ||
| 265 | 272 | volume = {37}, |
| 266 | 273 | number = {1/2}, |
| 267 | 274 | pages = {17--23}, |
| 268 | − year = {1950} | |
| 275 | + year = {1950}, | |
| 276 | + doi = {10.1093/biomet/37.1-2.17} | |
| 269 | 277 | } |
| 270 | 278 | |
| 271 | 279 | @article{koenker1978regression, |
@@ -275,7 +283,8 @@ | ||
| 275 | 283 | volume = {46}, |
| 276 | 284 | number = {1}, |
| 277 | 285 | pages = {33--50}, |
| 278 | − year = {1978} | |
| 286 | + year = {1978}, | |
| 287 | + doi = {10.2307/1913643} | |
| 279 | 288 | } |
| 280 | 289 | |
| 281 | 290 | @article{zietz2008determinants, |
@@ -285,7 +294,8 @@ | ||
| 285 | 294 | volume = {37}, |
| 286 | 295 | number = {4}, |
| 287 | 296 | pages = {317--333}, |
| 288 | − year = {2008} | |
| 297 | + year = {2008}, | |
| 298 | + doi = {10.1007/s11146-007-9053-7} | |
| 289 | 299 | } |
| 290 | 300 | |
| 291 | 301 | @article{mcmillen2010issues, |
@@ -295,7 +305,8 @@ | ||
| 295 | 305 | volume = {50}, |
| 296 | 306 | number = {3}, |
| 297 | 307 | pages = {712--733}, |
| 298 | − year = {2010} | |
| 308 | + year = {2010}, | |
| 309 | + doi = {10.1111/j.1467-9787.2010.00664.x} | |
| 299 | 310 | } |
| 300 | 311 | |
| 301 | 312 | @article{pace1998spatiotemporal, |
@@ -305,7 +316,8 @@ | ||
| 305 | 316 | volume = {17}, |
| 306 | 317 | number = {1}, |
| 307 | 318 | pages = {15--33}, |
| 308 | − year = {1998} | |
| 319 | + year = {1998}, | |
| 320 | + doi = {10.1023/A:1007799028599} | |
| 309 | 321 | } |
| 310 | 322 | |
| 311 | 323 | % ============================================================================ |
@@ -648,3 +660,310 @@ | ||
| 648 | 660 | pages = {628--649}, |
| 649 | 661 | doi = {10.1177/1536867X1001000406} |
| 650 | 662 | } |
| 663 | + | |
| 664 | +% ============================================================================ | |
| 665 | +% Added in the October 2026 editorial-board revision (v1.3). | |
| 666 | +% Every entry verified against Crossref (query + DOI) on 2026-10-17; see | |
| 667 | +% docs/CHANGELOG-REVISION.md for the verification record. | |
| 668 | +% ============================================================================ | |
| 669 | + | |
| 670 | +% ---- Hedonic surveys and best practice ---- | |
| 671 | +@incollection{sheppard1999hedonic, | |
| 672 | + author = {Sheppard, Stephen}, | |
| 673 | + title = {Hedonic Analysis of Housing Markets}, | |
| 674 | + booktitle = {Handbook of Regional and Urban Economics}, | |
| 675 | + editor = {Cheshire, Paul and Mills, Edwin S.}, | |
| 676 | + volume = {3}, | |
| 677 | + publisher = {Elsevier}, | |
| 678 | + pages = {1595--1635}, | |
| 679 | + year = {1999}, | |
| 680 | + doi = {10.1016/S1574-0080(99)80010-8} | |
| 681 | +} | |
| 682 | +@article{bishop2020best, | |
| 683 | + author = {Bishop, Kelly C. and Kuminoff, Nicolai V. and Banzhaf, H. Spencer and Boyle, Kevin J. and von Gravenitz, Kathrine and Pope, Jaren C. and Smith, V. Kerry and Timmins, Christopher D.}, | |
| 684 | + title = {Best Practices for Using Hedonic Property Value Models to Measure Willingness to Pay for Environmental Quality}, | |
| 685 | + journal = {Review of Environmental Economics and Policy}, | |
| 686 | + volume = {14}, | |
| 687 | + number = {2}, | |
| 688 | + pages = {260--281}, | |
| 689 | + year = {2020}, | |
| 690 | + doi = {10.1093/reep/reaa001} | |
| 691 | +} | |
| 692 | +@article{bishop2019estimating, | |
| 693 | + author = {Bishop, Kelly C. and Timmins, Christopher}, | |
| 694 | + title = {Estimating the Marginal Willingness to Pay Function Without Instrumental Variables}, | |
| 695 | + journal = {Journal of Urban Economics}, | |
| 696 | + volume = {109}, | |
| 697 | + pages = {66--83}, | |
| 698 | + year = {2019}, | |
| 699 | + doi = {10.1016/j.jue.2018.11.006} | |
| 700 | +} | |
| 701 | +@article{sirmans2006value, | |
| 702 | + author = {Sirmans, G. Stacy and MacDonald, Lynn and Macpherson, David A. and Zietz, Emily Norman}, | |
| 703 | + title = {The Value of Housing Characteristics: A Meta Analysis}, | |
| 704 | + journal = {Journal of Real Estate Finance and Economics}, | |
| 705 | + volume = {33}, | |
| 706 | + number = {3}, | |
| 707 | + pages = {215--240}, | |
| 708 | + year = {2006}, | |
| 709 | + doi = {10.1007/s11146-006-9983-5} | |
| 710 | +} | |
| 711 | + | |
| 712 | +% ---- Interpretation of semilogarithmic coefficients ---- | |
| 713 | +@article{kennedy1981estimation, | |
| 714 | + author = {Kennedy, Peter E.}, | |
| 715 | + title = {Estimation with Correctly Interpreted Dummy Variables in Semilogarithmic Equations}, | |
| 716 | + journal = {American Economic Review}, | |
| 717 | + volume = {71}, | |
| 718 | + number = {4}, | |
| 719 | + pages = {801}, | |
| 720 | + year = {1981} | |
| 721 | +} | |
| 722 | + | |
| 723 | +% ---- Inference with clustered data ---- | |
| 724 | +@article{abadie2023when, | |
| 725 | + author = {Abadie, Alberto and Athey, Susan and Imbens, Guido W. and Wooldridge, Jeffrey M.}, | |
| 726 | + title = {When Should You Adjust Standard Errors for Clustering?}, | |
| 727 | + journal = {Quarterly Journal of Economics}, | |
| 728 | + volume = {138}, | |
| 729 | + number = {1}, | |
| 730 | + pages = {1--35}, | |
| 731 | + year = {2023}, | |
| 732 | + doi = {10.1093/qje/qjac038} | |
| 733 | +} | |
| 734 | +@article{mackinnon2017wild, | |
| 735 | + author = {MacKinnon, James G. and Webb, Matthew D.}, | |
| 736 | + title = {Wild Bootstrap Inference for Wildly Different Cluster Sizes}, | |
| 737 | + journal = {Journal of Applied Econometrics}, | |
| 738 | + volume = {32}, | |
| 739 | + number = {2}, | |
| 740 | + pages = {233--254}, | |
| 741 | + year = {2017}, | |
| 742 | + doi = {10.1002/jae.2508} | |
| 743 | +} | |
| 744 | + | |
| 745 | +% ---- Variance decomposition (relative importance) ---- | |
| 746 | +@article{israeli2007shapley, | |
| 747 | + author = {Israeli, Osnat}, | |
| 748 | + title = {A {S}hapley-Based Decomposition of the {R}-Square of a Linear Regression}, | |
| 749 | + journal = {Journal of Economic Inequality}, | |
| 750 | + volume = {5}, | |
| 751 | + number = {2}, | |
| 752 | + pages = {199--212}, | |
| 753 | + year = {2007}, | |
| 754 | + doi = {10.1007/s10888-006-9036-6} | |
| 755 | +} | |
| 756 | +@article{gromping2007estimators, | |
| 757 | + author = {Gr{\"o}mping, Ulrike}, | |
| 758 | + title = {Estimators of Relative Importance in Linear Regression Based on Variance Decomposition}, | |
| 759 | + journal = {The American Statistician}, | |
| 760 | + volume = {61}, | |
| 761 | + number = {2}, | |
| 762 | + pages = {139--147}, | |
| 763 | + year = {2007}, | |
| 764 | + doi = {10.1198/000313007X188252} | |
| 765 | +} | |
| 766 | +@article{huettner2012axiomatic, | |
| 767 | + author = {Huettner, Frank and Sunder, Marco}, | |
| 768 | + title = {Axiomatic Arguments for Decomposing Goodness of Fit According to {S}hapley and {O}wen Values}, | |
| 769 | + journal = {Electronic Journal of Statistics}, | |
| 770 | + volume = {6}, | |
| 771 | + pages = {1239--1250}, | |
| 772 | + year = {2012}, | |
| 773 | + doi = {10.1214/12-EJS710} | |
| 774 | +} | |
| 775 | + | |
| 776 | +% ---- Spatial econometrics ---- | |
| 777 | +@article{kelejian1998generalized, | |
| 778 | + author = {Kelejian, Harry H. and Prucha, Ingmar R.}, | |
| 779 | + title = {A Generalized Spatial Two-Stage Least Squares Procedure for Estimating a Spatial Autoregressive Model with Autoregressive Disturbances}, | |
| 780 | + journal = {Journal of Real Estate Finance and Economics}, | |
| 781 | + volume = {17}, | |
| 782 | + number = {1}, | |
| 783 | + pages = {99--121}, | |
| 784 | + year = {1998}, | |
| 785 | + doi = {10.1023/A:1007707430416} | |
| 786 | +} | |
| 787 | +@article{kelejian2001asymptotic, | |
| 788 | + author = {Kelejian, Harry H. and Prucha, Ingmar R.}, | |
| 789 | + title = {On the Asymptotic Distribution of the {M}oran {I} Test Statistic with Applications}, | |
| 790 | + journal = {Journal of Econometrics}, | |
| 791 | + volume = {104}, | |
| 792 | + number = {2}, | |
| 793 | + pages = {219--257}, | |
| 794 | + year = {2001}, | |
| 795 | + doi = {10.1016/S0304-4076(01)00064-1} | |
| 796 | +} | |
| 797 | +@article{hill2018geospatial, | |
| 798 | + author = {Hill, Robert J. and Scholz, Michael}, | |
| 799 | + title = {Can Geospatial Data Improve House Price Indexes? {A} Hedonic Imputation Approach with Splines}, | |
| 800 | + journal = {Review of Income and Wealth}, | |
| 801 | + volume = {64}, | |
| 802 | + number = {4}, | |
| 803 | + pages = {737--756}, | |
| 804 | + year = {2018}, | |
| 805 | + doi = {10.1111/roiw.12303} | |
| 806 | +} | |
| 807 | +@article{bogin2019local, | |
| 808 | + author = {Bogin, Alexander and Doerner, William and Larson, William}, | |
| 809 | + title = {Local House Price Dynamics: New Indices and Stylized Facts}, | |
| 810 | + journal = {Real Estate Economics}, | |
| 811 | + volume = {47}, | |
| 812 | + number = {2}, | |
| 813 | + pages = {365--398}, | |
| 814 | + year = {2019}, | |
| 815 | + doi = {10.1111/1540-6229.12233} | |
| 816 | +} | |
| 817 | +@article{roberts2017cross, | |
| 818 | + author = {Roberts, David R. and Bahn, Volker and Ciuti, Simone and Boyce, Mark S. and Elith, Jane and Guillera-Arroita, Gurutzeta and Hauenstein, Severin and Lahoz-Monfort, Jos{\'e} J. and Schr{\"o}der, Boris and Thuiller, Wilfried and Warton, David I. and Wintle, Brendan A. and Hartig, Florian and Dormann, Carsten F.}, | |
| 819 | + title = {Cross-Validation Strategies for Data with Temporal, Spatial, Hierarchical, or Phylogenetic Structure}, | |
| 820 | + journal = {Ecography}, | |
| 821 | + volume = {40}, | |
| 822 | + number = {8}, | |
| 823 | + pages = {913--929}, | |
| 824 | + year = {2017}, | |
| 825 | + doi = {10.1111/ecog.02881} | |
| 826 | +} | |
| 827 | + | |
| 828 | +% ---- Land, location and agglomeration ---- | |
| 829 | +@article{combes2019costs, | |
| 830 | + author = {Combes, Pierre-Philippe and Duranton, Gilles and Gobillon, Laurent}, | |
| 831 | + title = {The Costs of Agglomeration: House and Land Prices in {F}rench Cities}, | |
| 832 | + journal = {Review of Economic Studies}, | |
| 833 | + volume = {86}, | |
| 834 | + number = {4}, | |
| 835 | + pages = {1556--1589}, | |
| 836 | + year = {2019}, | |
| 837 | + doi = {10.1093/restud/rdy063} | |
| 838 | +} | |
| 839 | +@article{davis2008price, | |
| 840 | + author = {Davis, Morris A. and Palumbo, Michael G.}, | |
| 841 | + title = {The Price of Residential Land in Large {US} Cities}, | |
| 842 | + journal = {Journal of Urban Economics}, | |
| 843 | + volume = {63}, | |
| 844 | + number = {1}, | |
| 845 | + pages = {352--384}, | |
| 846 | + year = {2008}, | |
| 847 | + doi = {10.1016/j.jue.2007.02.003} | |
| 848 | +} | |
| 849 | +@article{albouy2018metropolitan, | |
| 850 | + author = {Albouy, David and Ehrlich, Gabriel and Shin, Minchul}, | |
| 851 | + title = {Metropolitan Land Values}, | |
| 852 | + journal = {Review of Economics and Statistics}, | |
| 853 | + volume = {100}, | |
| 854 | + number = {3}, | |
| 855 | + pages = {454--466}, | |
| 856 | + year = {2018}, | |
| 857 | + doi = {10.1162/rest_a_00710} | |
| 858 | +} | |
| 859 | +@article{diewert2015hedonic, | |
| 860 | + author = {Diewert, W. Erwin and de Haan, Jan and Hendriks, Rens}, | |
| 861 | + title = {Hedonic Regressions and the Decomposition of a House Price Index into Land and Structure Components}, | |
| 862 | + journal = {Econometric Reviews}, | |
| 863 | + volume = {34}, | |
| 864 | + number = {1--2}, | |
| 865 | + pages = {106--126}, | |
| 866 | + year = {2015}, | |
| 867 | + doi = {10.1080/07474938.2014.944791} | |
| 868 | +} | |
| 869 | + | |
| 870 | +% ---- List prices, search and bargaining ---- | |
| 871 | +@article{horowitz1992role, | |
| 872 | + author = {Horowitz, Joel L.}, | |
| 873 | + title = {The Role of the List Price in Housing Markets: Theory and an Econometric Model}, | |
| 874 | + journal = {Journal of Applied Econometrics}, | |
| 875 | + volume = {7}, | |
| 876 | + number = {2}, | |
| 877 | + pages = {115--129}, | |
| 878 | + year = {1992}, | |
| 879 | + doi = {10.1002/jae.3950070202} | |
| 880 | +} | |
| 881 | +@article{merlo2004bargaining, | |
| 882 | + author = {Merlo, Antonio and Ortalo-Magn{\'e}, Fran{\c c}ois}, | |
| 883 | + title = {Bargaining over Residential Real Estate: Evidence from {E}ngland}, | |
| 884 | + journal = {Journal of Urban Economics}, | |
| 885 | + volume = {56}, | |
| 886 | + number = {2}, | |
| 887 | + pages = {192--216}, | |
| 888 | + year = {2004}, | |
| 889 | + doi = {10.1016/j.jue.2004.05.004} | |
| 890 | +} | |
| 891 | +@article{anglin2003tradeoff, | |
| 892 | + author = {Anglin, Paul M. and Rutherford, Ronald and Springer, Thomas M.}, | |
| 893 | + title = {The Trade-off Between the Selling Price of Residential Properties and Time-on-the-Market: The Impact of Price Setting}, | |
| 894 | + journal = {Journal of Real Estate Finance and Economics}, | |
| 895 | + volume = {26}, | |
| 896 | + number = {1}, | |
| 897 | + pages = {95--111}, | |
| 898 | + year = {2003}, | |
| 899 | + doi = {10.1023/A:1021526332732} | |
| 900 | +} | |
| 901 | +@article{han2016what, | |
| 902 | + author = {Han, Lu and Strange, William C.}, | |
| 903 | + title = {What Is the Role of the Asking Price for a House?}, | |
| 904 | + journal = {Journal of Urban Economics}, | |
| 905 | + volume = {93}, | |
| 906 | + pages = {115--130}, | |
| 907 | + year = {2016}, | |
| 908 | + doi = {10.1016/j.jue.2016.03.008} | |
| 909 | +} | |
| 910 | +@article{genesove2012search, | |
| 911 | + author = {Genesove, David and Han, Lu}, | |
| 912 | + title = {Search and Matching in the Housing Market}, | |
| 913 | + journal = {Journal of Urban Economics}, | |
| 914 | + volume = {72}, | |
| 915 | + number = {1}, | |
| 916 | + pages = {31--45}, | |
| 917 | + year = {2012}, | |
| 918 | + doi = {10.1016/j.jue.2012.01.002} | |
| 919 | +} | |
| 920 | + | |
| 921 | +% ---- Canadian evidence ---- | |
| 922 | +@article{allen2009canadian, | |
| 923 | + author = {Allen, Jason and Amano, Robert and Byrne, David P. and Gregory, Allan W.}, | |
| 924 | + title = {Canadian City Housing Prices and Urban Market Segmentation}, | |
| 925 | + journal = {Canadian Journal of Economics}, | |
| 926 | + volume = {42}, | |
| 927 | + number = {3}, | |
| 928 | + pages = {1132--1149}, | |
| 929 | + year = {2009}, | |
| 930 | + doi = {10.1111/j.1540-5982.2009.01541.x} | |
| 931 | +} | |
| 932 | +@article{hossain2009determinants, | |
| 933 | + author = {Hossain, Belayet and Latif, Ehsan}, | |
| 934 | + title = {Determinants of Housing Price Volatility in {C}anada: A Dynamic Analysis}, | |
| 935 | + journal = {Applied Economics}, | |
| 936 | + volume = {41}, | |
| 937 | + number = {27}, | |
| 938 | + pages = {3521--3531}, | |
| 939 | + year = {2009}, | |
| 940 | + doi = {10.1080/00036840701522861} | |
| 941 | +} | |
| 942 | +@article{dube2013commuter, | |
| 943 | + author = {Dub{\'e}, Jean and Th{\'e}riault, Marius and Des Rosiers, Fran{\c c}ois}, | |
| 944 | + title = {Commuter Rail Accessibility and House Values: The Case of the {M}ontreal {S}outh {S}hore, {C}anada, 1992--2009}, | |
| 945 | + journal = {Transportation Research Part A: Policy and Practice}, | |
| 946 | + volume = {54}, | |
| 947 | + pages = {49--66}, | |
| 948 | + year = {2013}, | |
| 949 | + doi = {10.1016/j.tra.2013.07.015} | |
| 950 | +} | |
| 951 | +@article{theriault2003modelling, | |
| 952 | + author = {Th{\'e}riault, Marius and Des Rosiers, Fran{\c c}ois and Villeneuve, Paul and Kestens, Yan}, | |
| 953 | + title = {Modelling Interactions of Location with Specific Value of Housing Attributes}, | |
| 954 | + journal = {Property Management}, | |
| 955 | + volume = {21}, | |
| 956 | + number = {1}, | |
| 957 | + pages = {25--62}, | |
| 958 | + year = {2003}, | |
| 959 | + doi = {10.1108/02637470310464472} | |
| 960 | +} | |
| 961 | +@techreport{statcan2022fsa, | |
| 962 | + author = {{Statistics Canada}}, | |
| 963 | + title = {Census Forward Sortation Area Boundary File, Reference Guide, Census Year 2021}, | |
| 964 | + institution = {Statistics Canada}, | |
| 965 | + type = {Catalogue no.}, | |
| 966 | + number = {92-179-G2021001}, | |
| 967 | + address = {Ottawa}, | |
| 968 | + year = {2022} | |
| 969 | +} | |
modified
paper/sections/conclusion.tex
+46 −37
@@ -4,44 +4,53 @@ | ||
| 4 | 4 | \label{sec:conclusion} |
| 5 | 5 | % ============================================================================ |
| 6 | 6 | |
| 7 | −Using a nationwide cross-section of 140{,}931 MLS listings and 1{,}153 absorbed | |
| 8 | −neighbourhood fixed effects, we estimate a grand hedonic model of the Canadian | |
| 9 | −residential housing market. The exercise yields three robust conclusions. First, | |
| 10 | −location dominates: resolving geography from the provincial to the neighbourhood scale | |
| 11 | −raises explained price variation from 57\% to 77\%, and location as a whole accounts for | |
| 12 | −roughly thirty percentage points of $R^2$---more than every structural attribute | |
| 13 | −combined, and a listing-level counterpart to the large land shares documented in | |
| 14 | −aggregate data \citep{davis2007price,knoll2017no}. Second, the structural implicit | |
| 15 | −prices behave as hedonic theory predicts and are strikingly stable across samples: | |
| 16 | −living area carries an elasticity near 0.55, each full bathroom adds about 11--15\%, and | |
| 17 | −bedroom counts are economically negligible once floor space is held | |
| 18 | −fixed---magnitudes squarely within the range catalogued by decades of hedonic work | |
| 19 | −\citep{sirmans2005composition}. Third, the neighbourhood premia are vast---a factor of | |
| 20 | −roughly nine separates the most and least expensive FSAs---and the model translates into | |
| 21 | −a credible valuation tool, predicting held-out prices with an out-of-sample $R^2$ of | |
| 22 | −0.76 and a median error of 16\%. These conclusions survive an extensive battery of | |
| 23 | −checks: the implicit prices are stable across subsamples and across the price | |
| 24 | −distribution, the neighbourhood effects absorb 82\% of the spatial autocorrelation in | |
| 25 | −residuals, floor space displays diminishing returns, value decays with distance to major | |
| 26 | −metros as the monocentric tradition predicts, and the structural prices transfer across | |
| 27 | −provinces in leave-one-province-out cross-validation. | |
| 7 | +Using a nationwide cross-section of 142{,}121 MLS listings and 1{,}155 absorbed | |
| 8 | +neighbourhood fixed effects, we estimate a hedonic price function for the Canadian | |
| 9 | +residential market and decompose the variance of log asking prices into structure and | |
| 10 | +location. The exercise yields four conclusions. First, location and structure are of | |
| 11 | +comparable importance: resolving geography from the provincial to the neighbourhood scale | |
| 12 | +raises explained variation from 60\% to 77\%, and a Shapley--Owen decomposition assigns | |
| 13 | +about 34 percentage points of $R^2$ to structure and 36 to location, so that the | |
| 14 | +neighbourhood is the single largest block once province and neighbourhood are grouped, | |
| 15 | +while the sequential ladder that most hedonic papers report would credit structure with 44 | |
| 16 | +points and location with 32. The answer to ``how much is location worth?'' is therefore | |
| 17 | +inseparable from the attribution rule, and we have made that rule explicit. Second, the | |
| 18 | +structural implicit list prices behave as hedonic theory predicts and are stable across | |
| 19 | +eight samples: living area carries an elasticity of 0.53, each full bathroom adds about | |
| 20 | +12\%, and bedroom counts are economically negligible once floor space is held fixed. The | |
| 21 | +area and bathroom effects survive province-level wild-cluster bootstrap inference; the | |
| 22 | +small half-bathroom and bedroom effects do not. Third, the neighbourhood premia are | |
| 23 | +vast---a factor of about ten separates Vancouver's west side from rural Newfoundland for an | |
| 24 | +identical dwelling---and the neighbourhood effects remove 87\% of the spatial | |
| 25 | +autocorrelation in residuals. Fourth, the model is a credible valuation tool whose accuracy | |
| 26 | +depends on spatial support: it values held-out listings in known neighbourhoods with an | |
| 27 | +out-of-sample $R^2$ of 0.77 and a median absolute error of 15.6\%, and listings in | |
| 28 | +neighbourhoods never observed with an $R^2$ of 0.74 and a median error of 17\% when the | |
| 29 | +neighbourhood effect is interpolated from adjacent FSAs. Floor space displays mild | |
| 30 | +diminishing returns concentrated above 150~m$^2$, the location premium declines by about | |
| 31 | +5.5\% per doubling of distance to the nearest metropolitan centre, implicit prices vary | |
| 32 | +sensibly across the price distribution and across provinces, and the structural prices | |
| 33 | +transfer across most provinces but not to British Columbia. | |
| 28 | 34 | |
| 29 | −The reading we propose is deliberately modest and, we believe, well supported: in | |
| 30 | −Canada, the single largest priced component of a home is its neighbourhood. That fact | |
| 31 | −is simultaneously a measurement result (for assessment, taxation and index | |
| 32 | −construction), a validation result (a transparent fixed-effects design removes the | |
| 33 | −spatial dependence that motivates far more elaborate machinery), and a policy result | |
| 34 | −(the premium dispersion that supply constraints and agglomeration generate is the | |
| 35 | −dominant term in the decomposition). Section~\ref{sec:discussion} details the | |
| 36 | −limitations---list prices, unobserved quality, noisy lot data, a single | |
| 37 | −cross-section---and the research agenda they imply. Even within those bounds, the model | |
| 38 | −provides a transparent, reproducible benchmark for automated valuation, market | |
| 39 | −monitoring and the welfare analysis of local amenities across the Canadian residential | |
| 40 | −market. | |
| 35 | +The reading we propose is deliberately modest. In Canada, the neighbourhood is at least as | |
| 36 | +large a component of a dwelling's asking price as the dwelling itself, and it is the | |
| 37 | +component whose dispersion is greatest. That fact is simultaneously a measurement result | |
| 38 | +(for assessment, taxation and index construction), a validation result (a transparent | |
| 39 | +fixed-effects design removes most of the spatial dependence that motivates far more | |
| 40 | +elaborate machinery, and its fixed effects are smooth enough to be interpolated), and a | |
| 41 | +policy result (the premium dispersion that supply constraints and agglomeration generate is | |
| 42 | +largest precisely in the most expensive markets). Section~\ref{sec:discussion} details the | |
| 43 | +limitations---asking rather than transaction prices, unobserved quality, noisy fields, a | |
| 44 | +single cross-section, postal rather than planning geography---and the research agenda they | |
| 45 | +imply. Within those bounds, the model provides a transparent and reproducible benchmark for | |
| 46 | +automated valuation, market monitoring and the analysis of location value across the | |
| 47 | +Canadian residential market. | |
| 41 | 48 | |
| 42 | 49 | \vspace{0.6em} |
| 43 | 50 | \noindent\textbf{Reproducibility.} Data engineering was performed in \texttt{DuckDB} and |
| 44 | −\texttt{pandas}; estimation used \texttt{statsmodels} (cluster-robust OLS) and | |
| 45 | −\texttt{linearmodels} (absorbing least squares); figures were produced in | |
| 46 | −\texttt{matplotlib}. All tables and figures are generated programmatically from the | |
| 47 | −source database by the numbered scripts in the accompanying repository. | |
| 51 | +\texttt{pandas}; estimation used \texttt{statsmodels} for cluster-robust OLS and quantile | |
| 52 | +regression and \texttt{linearmodels} for absorbing least squares; figures were produced | |
| 53 | +in \texttt{matplotlib}. All tables and figures are generated programmatically from the source | |
| 54 | +database by the numbered scripts in the accompanying repository, and | |
| 55 | +Appendix~\ref{app:reconciliation} reconciles the present estimates with those of the May | |
| 56 | +2026 version of this paper. | |
modified
paper/sections/data.tex
+85 −47
Large diff (157 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/sections/discussion.tex
+159 −114
Large diff (290 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/sections/introduction.tex
+99 −80
Large diff (189 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/sections/literature.tex
+161 −136
Large diff (316 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/sections/methodology.tex
+167 −52
Large diff (246 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/sections/results.tex
+220 −123
Large diff (398 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/sections/robustness.tex
+159 −93
Large diff (307 lines) is not loaded by default to keep the page fast.Load diff
modified
results/reproduced/coef_M1.csv
+9 −9
Large diff (19 lines) is not loaded by default to keep the page fast.Load diff
modified
results/reproduced/coef_M2.csv
+14 −14
Large diff (29 lines) is not loaded by default to keep the page fast.Load diff
modified
results/reproduced/coef_M3.csv
+22 −22
Large diff (45 lines) is not loaded by default to keep the page fast.Load diff
modified
results/reproduced/coef_M5.csv
+25 −25
Large diff (51 lines) is not loaded by default to keep the page fast.Load diff
modified
results/reproduced/ext2.json
+11 −11
Large diff (33 lines) is not loaded by default to keep the page fast.Load diff
modified
results/reproduced/fit.json
+12 −10
Large diff (35 lines) is not loaded by default to keep the page fast.Load diff
modified
results/reproduced/fsa_premia.csv
+870 −869
Large diff (1,740 lines) is not loaded by default to keep the page fast.Load diff
modified
results/reproduced/gradient_bins.csv
+8 −8
Large diff (17 lines) is not loaded by default to keep the page fast.Load diff
added
results/reproduced/gradient_metro.json
+59 −0
Large diff (60 lines) is not loaded by default to keep the page fast.Load diff
modified
results/reproduced/grand_model.parquet
+0 −0
Binary file not shown.
modified
results/reproduced/heterogeneity.csv
+9 −8
Large diff (18 lines) is not loaded by default to keep the page fast.Load diff
modified
results/reproduced/lopo.csv
+9 −8
Large diff (18 lines) is not loaded by default to keep the page fast.Load diff
modified
results/reproduced/moran_coords.npy
+0 −0
Binary file not shown.
modified
results/reproduced/moran_resid_grand.npy
+0 −0
Binary file not shown.
modified
results/reproduced/moran_resid_struct.npy
+0 −0
Binary file not shown.
added
results/reproduced/moran_sensitivity.csv
+13 −0
Large diff (13 lines) is not loaded by default to keep the page fast.Load diff
modified
results/reproduced/nonlinear_band.csv
+60 −60
Large diff (121 lines) is not loaded by default to keep the page fast.Load diff
modified
results/reproduced/oos.json
+9 −9
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
modified
results/reproduced/quantile.csv
+6 −6
Large diff (13 lines) is not loaded by default to keep the page fast.Load diff
modified
results/reproduced/robustness.csv
+8 −6
Large diff (15 lines) is not loaded by default to keep the page fast.Load diff
added
results/reproduced/se_comparison.csv
+6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
added
results/reproduced/shapley.csv
+9 −0
Large diff (9 lines) is not loaded by default to keep the page fast.Load diff
added
results/reproduced/spatial_holdout.json
+236 −0
Large diff (237 lines) is not loaded by default to keep the page fast.Load diff
added
results/reproduced/spline.csv
+6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
added
results/reproduced/summary_stats.csv
+10 −0
Large diff (10 lines) is not loaded by default to keep the page fast.Load diff
added
results/tables/gradient.tex
+31 −0
Large diff (31 lines) is not loaded by default to keep the page fast.Load diff
modified
results/tables/lopo.tex
+11 −10
Large diff (27 lines) is not loaded by default to keep the page fast.Load diff
added
results/tables/moran_sensitivity.tex
+19 −0
Large diff (19 lines) is not loaded by default to keep the page fast.Load diff
modified
results/tables/oos.tex
+10 −10
Large diff (31 lines) is not loaded by default to keep the page fast.Load diff
modified
results/tables/quantile.tex
+8 −8
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
modified
results/tables/regression.tex
+11 −11
Large diff (39 lines) is not loaded by default to keep the page fast.Load diff
modified
results/tables/robustness.tex
+10 −8
Large diff (29 lines) is not loaded by default to keep the page fast.Load diff
added
results/tables/se_comparison.tex
+21 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
added
results/tables/shapley.tex
+27 −0
Large diff (27 lines) is not loaded by default to keep the page fast.Load diff
added
results/tables/spatial_holdout.tex
+22 −0
Large diff (22 lines) is not loaded by default to keep the page fast.Load diff
added
results/tables/spline.tex
+21 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
modified
results/tables/summary_stats.tex
+11 −11
Large diff (33 lines) is not loaded by default to keep the page fast.Load diff
added
results/tables/type_effects.tex
+29 −0
Large diff (29 lines) is not loaded by default to keep the page fast.Load diff
modified
scripts/02_estimate_core.py
+2 −0
Large diff (8 lines) is not loaded by default to keep the page fast.Load diff
modified
scripts/03_estimate_extended.py
+13 −1
Large diff (26 lines) is not loaded by default to keep the page fast.Load diff
modified
scripts/04_make_figures.py
+49 −26
Large diff (113 lines) is not loaded by default to keep the page fast.Load diff
modified
scripts/05_make_tables.py
+270 −23
Large diff (385 lines) is not loaded by default to keep the page fast.Load diff
added
scripts/06_revision_analyses.py
+393 −0
Large diff (393 lines) is not loaded by default to keep the page fast.Load diff
modified
src/wp9/config.py
+9 −0
Large diff (15 lines) is not loaded by default to keep the page fast.Load diff
modified
src/wp9/sample.py
+10 −4
Large diff (39 lines) is not loaded by default to keep the page fast.Load diff