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 | # 🏘️ A Grand Hedonic Model of the Canadian Housing Market | 1 | # 🏘️ A Grand Hedonic Model of the Canadian Housing Market | ||
| 2 | 2 | ||||
| 3 | **UQO Working Paper No. 9** — *Decomposing the Value of Structure and Location across | 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 | [](requirements.txt) | 7 | [](requirements.txt) | ||
| 8 | [](data/raw/README.md) | 8 | [](data/raw/README.md) | ||
| 9 | [-4051b5)](src/wp9/models.py) | 9 | [-4051b5)](src/wp9/models.py) | ||
| 10 | [](scripts/) | 10 | [](scripts/) | ||
| 11 | −[](docs/AUDIT.md) | 11 | +[](docs/REVIEW-REPORT.md) | ||
| 12 | [](https://uqo.ca) | 12 | [](https://uqo.ca) | ||
| 13 | [](mailto:simon-pierre.boucher@uqo.ca) | 13 | [](mailto:simon-pierre.boucher@uqo.ca) | ||
| 14 | [](mailto:simon-pierre.boucher@uqo.ca) | 14 | [](mailto:simon-pierre.boucher@uqo.ca) | ||
| 15 | 15 | ||||
| 16 | −> **TL;DR** — On 140,931 Canadian MLS listings, absorbing 1,153 neighbourhood (FSA) fixed | 16 | +> **TL;DR** — On 142,121 Canadian MLS listings (asking prices), absorbing 1,155 | ||
| 17 | −> effects lifts explained log-price variance from **46% → 77%**. Location alone is worth | 17 | +> neighbourhood (FSA) fixed effects lifts explained log-price variance from **44% → 78%**. | ||
| 18 | −> ~30 percentage points of R² — more than every structural attribute combined. The model | 18 | +> A Shapley–Owen decomposition assigns **≈34 pp to structure and ≈36 pp to location**: the | ||
| 19 | −> values held-out homes with a median absolute error of **15.8%** (OOS R² = 0.764), | 19 | +> two are of comparable importance, and location is the single largest block once province | ||
| 20 | −> competitive with commercial AVMs, while staying fully transparent. | 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 | | Item | Value | | 29 | | Item | Value | | ||
| 27 | |---|---| | 30 | |---|---| | ||
| 28 | −| Version | 1.2 (May 2026) | | 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` | | ||
| 29 | −| SSRN | [7626678](https://ssrn.com/abstract=7626678) — submitted 2026-10-17 (preliminary upload) | | 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 | | Journal | not yet submitted | | 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 | ## 📖 Table of contents | 36 | ## 📖 Table of contents | ||
| 34 | 37 | ||||
@@ -40,12 +43,11 @@ | |||||
| 40 | 5. [The pipeline, step by step](#-the-pipeline-step-by-step) | 43 | 5. [The pipeline, step by step](#-the-pipeline-step-by-step) | ||
| 41 | 6. [Data](#-data) | 44 | 6. [Data](#-data) | ||
| 42 | 7. [Methodology](#-methodology) | 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 | 9. [Figures & tables inventory](#-figures--tables-inventory) | 47 | 9. [Figures & tables inventory](#-figures--tables-inventory) | ||
| 45 | −10. [Reproduction verification](#-reproduction-verification) | 48 | +10. [Limitations](#-limitations) | ||
| 46 | −11. [Limitations](#-limitations) | 49 | +11. [Citation](#-citation) | ||
| 47 | −12. [Citation](#-citation) | 50 | +12. [Author & contact](#-author--contact) | ||
| 48 | −13. [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 | ln P_i = α + β·ln(Area_i) + x_i'γ + d_i'δ + μ_f(i) + ε_i | 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 | 64 | +where `P_i` is the **asking price** of listing *i* and `μ_f(i)` is a fixed effect for its | ||
| 63 | −characters of the postal code) of listing *i*. With 1,153 absorbed FSA intercepts, every | 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 | neighbourhood gets an arbitrary price level that soaks up schools, transit, coastline, | 67 | neighbourhood gets an arbitrary price level that soaks up schools, transit, coastline, | ||
| 65 | employment density — observed or not — and the structural implicit prices (β, γ) are | 68 | employment density — observed or not — and the structural implicit prices (β, γ) are | ||
| 66 | identified purely from **within-neighbourhood** variation. Estimation is by absorbing | 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. | 70 | +least squares (numerically identical to full-dummy OLS); baseline inference is clustered by FSA. | ||
| 68 | − | 71 | + | ||
| 69 | −Beyond the headline decomposition the paper delivers: out-of-sample valuation accuracy | 72 | +Beyond the headline decomposition the paper delivers: a **Shapley–Owen decomposition** of | ||
| 70 | −(80/20 split, Duan-smeared retransformation), robustness across six sample cuts, quantile | 73 | +R² across regressor blocks (order-free alternative to the sequential ladder); inference | ||
| 71 | −hedonic regressions, a quadratic test of diminishing returns to floor space, an urban | 74 | +under HC1 / FSA-cluster / province-cluster / two-way SEs and a **province-level wild-cluster | ||
| 72 | −price gradient in distance to the nine major metros, Moran's I spatial diagnostics, | 75 | +bootstrap**; out-of-sample valuation accuracy (repeated random 80/20 splits *and* a | ||
| 73 | −leave-one-province-out transferability, and a ranked map of Canada's most and least | 76 | +**spatial holdout of entire FSAs** with interpolated effects, Duan-smeared retransformation); | ||
| 74 | −expensive neighbourhoods net of structure. | 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 | ## 🏆 Headline results | 84 | ## 🏆 Headline results | ||
| 77 | 85 | ||||
| 78 | | Quantity | Value | | 86 | | Quantity | Value | | ||
| 79 | |---|---| | 87 | |---|---| | ||
| 80 | −| Estimation sample | **140,931** listings — 82,334 houses, 57,857 condos, 9 provinces | | 88 | +| Estimation sample | **142,121** listings — 83,524 houses, 57,853 condos, 744 other; 9 provinces (province from FSA letter) | | ||
| 81 | −| Absorbed neighbourhood effects | **1,153** FSAs | | 89 | +| Absorbed neighbourhood effects | **1,155** (1,146 FSAs ≥ 25 listings + 9 pooled residual categories) | | ||
| 82 | −| R²: structural only (M1) | 0.464 | | 90 | +| R² houses: M1 structural / M2 +type / M3 +province / M4 +FSA | 0.467 / 0.470 / 0.605 / 0.769 | | ||
| 83 | −| R²: + dwelling type & ownership (M2) | 0.469 | | 91 | +| R²: grand model, all residential, FSA FE (M5) | **0.776** (structure-only on the same sample: 0.436) | | ||
| 84 | −| R²: + province FE (M3) | 0.567 | | 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** | | ||
| 85 | −| R²: grand model, FSA FE (M5) | **0.767** | | 93 | +| Living-area elasticity (M5) | **0.529** (FSA-cluster SE 0.009; province-cluster 0.037; wild-cluster p = 0.004) | | ||
| 86 | −| Living-area elasticity (M5) | **0.547** (cluster SE 0.009) | | 94 | +| Full-bathroom premium | **0.112 log points ≈ +11.9%** per bathroom (0.148 ≈ +16% on houses with province FE) | | ||
| 87 | −| Full-bathroom premium | **0.109 log points ≈ +11%** per bathroom | | 95 | +| Bedrooms, half baths (conditional on area) | −0.006, −0.034 — not significant under province-level inference | | ||
| 88 | −| Bedrooms, conditional on area | ≈ 0 (the textbook hedonic result) | | 96 | +| Dwelling type (vs apartment, same size & FSA) | house +46%, triplex +43%, fourplex +39%, duplex +16%, townhouse ≈ 0 (Kennedy-corrected) | | ||
| 89 | −| Out-of-sample R² (log price) | **0.764** | | 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%) | | ||
| 90 | −| Median absolute valuation error | **15.8%** (59% of homes priced within ±20%) | | 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%** | | ||
| 91 | −| Moran's I of residuals, structural → grand | **0.46 → 0.08** (−82%) | | 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 | | ||
| 92 | −| Urban gradient | −8.5% location premium per doubling of distance to metro | | 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 | | ||
| 93 | −| Neighbourhood premia span | ×9 between the most and least expensive FSAs | | 101 | +| Urban gradient | −0.082 per log unit of distance ⇒ **−5.5% per doubling**; +21% within 5 km, −38% beyond 320 km | | ||
| 94 | − | 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** | | ||
| 95 | −The most expensive neighbourhoods net of structure are all in the **City of Vancouver** | 103 | +| Neighbourhood premia span | ×10.5 between extremes (V6S +226% vs A0B −69%), ×6.7 between P99 and P1 | | ||
| 96 | −(V6S, V8E, V6T: +150–200% vs. the national median); the cheapest are in rural | 104 | + | ||
| 97 | −Saskatchewan, Manitoba and Newfoundland (−60 to −67%). | 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 | ## 📁 Repository layout | 110 | ## 📁 Repository layout | ||
| 100 | 111 | ||||
| 101 | ``` | 112 | ``` | ||
| 102 | wp9_uqo/ | 113 | wp9_uqo/ | ||
| 103 | ├── README.md ← you are here | 114 | ├── README.md ← you are here | ||
| 104 | −├── docs/ AUDIT.md (forensic audit + verification), CHANGES.md, | 115 | +├── docs/ REVIEW-REPORT.md + CHANGELOG-REVISION.md (editorial-board | ||
| 105 | −│ PAPER_REVIEW.md, UPGRADE_REPORT.md | 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 | ├── requirements.txt pinned Python dependencies | 118 | ├── requirements.txt pinned Python dependencies | ||
| 107 | ├── .gitignore | 119 | ├── .gitignore | ||
| 108 | ├── data/ | 120 | ├── data/ | ||
@@ -121,19 +133,22 @@ wp9_uqo/ | |||||
| 121 | │ ├── 01_build_sample.py | 133 | │ ├── 01_build_sample.py | ||
| 122 | │ ├── 02_estimate_core.py | 134 | │ ├── 02_estimate_core.py | ||
| 123 | │ ├── 03_estimate_extended.py | 135 | │ ├── 03_estimate_extended.py | ||
| 124 | −│ ├── 04_make_figures.py (--results reference|reproduced) | 136 | +│ ├── 04_make_figures.py (--results reproduced|reference; default reproduced) | ||
| 125 | −│ └── 05_make_tables.py (--results reference|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 | ├── figures/ all 17 paper figures (PNG, generated) | 140 | ├── figures/ all 17 paper figures (PNG, generated) | ||
| 127 | ├── results/ | 141 | ├── results/ | ||
| 128 | −│ ├── reference/ ORIGINAL published outputs — canonical paper numbers | 142 | +│ ├── reference/ archived outputs of the May 2026 version (v1.2) | ||
| 129 | −│ ├── reproduced/ outputs regenerated end-to-end by this pipeline | 143 | +│ ├── reproduced/ outputs of the current pipeline — THE PAPER'S NUMBERS (v1.3) | ||
| 130 | −│ └── tables/ the 6 LaTeX tables consumed by the paper | 144 | +│ └── tables/ the 13 LaTeX tables consumed by the paper | ||
| 131 | └── paper/ | 145 | └── paper/ | ||
| 132 | ├── main.tex preamble + metadata; \input's the sections | 146 | ├── main.tex preamble + metadata; \input's the sections | ||
| 133 | − ├── main.pdf compiled paper (34 pages) | 147 | + ├── main.pdf compiled paper (52 pages) | ||
| 134 | ├── sections/ titlepage, introduction, literature, data, | 148 | ├── sections/ titlepage, introduction, literature, data, | ||
| 135 | − │ methodology, results, robustness, conclusion | 149 | + │ methodology, results, robustness, discussion, conclusion | ||
| 136 | − ├── references.bib 32 entries, natbib author-year, aer style | 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 | ├── Makefile / .latexmkrc build config | 152 | ├── Makefile / .latexmkrc build config | ||
| 138 | └── uq_logo.jpg | 153 | └── uq_logo.jpg | ||
| 139 | ``` | 154 | ``` | ||
@@ -149,15 +164,17 @@ python3 -m pip install -r requirements.txt | |||||
| 149 | python3 scripts/01_build_sample.py # duckdb → data/processed/analysis.parquet | 164 | python3 scripts/01_build_sample.py # duckdb → data/processed/analysis.parquet | ||
| 150 | python3 scripts/02_estimate_core.py # M1–M5 ladder → results/reproduced/ | 165 | python3 scripts/02_estimate_core.py # M1–M5 ladder → results/reproduced/ | ||
| 151 | python3 scripts/03_estimate_extended.py # OOS, robustness, quantile, Moran, LOPO… | 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 | python3 scripts/04_make_figures.py # figures/ (17 PNG) | 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 | # Paper: | 171 | # Paper: | ||
| 156 | cd paper && latexmk -pdf main.tex # or `make` | 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 | `data/processed/analysis.parquet` (6 MB) is the estimation sample produced by step 01. | 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 | ## 🔬 The pipeline, step by step | 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 | | 01 | `01_build_sample.py` | raw DuckDB (172,019 rows) | `analysis.parquet` (142k rows, 21 cols) | ~40 s | | 183 | | 01 | `01_build_sample.py` | raw DuckDB (172,019 rows) | `analysis.parquet` (142k rows, 21 cols) | ~40 s | | ||
| 167 | | 02 | `02_estimate_core.py` | parquet | `fit.json`, `coef_M{1,2,3,5}.csv`, `grand_model.parquet`, `fsa_premia.csv` | ~1 min | | 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 | | 04 | `04_make_figures.py` | results tier + parquet | 17 PNG figures | ~30 s | | 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 | \* Apple Silicon, single process. | 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 | `"50 x 120"` frontage×depth) with a missingness indicator; the top 1% of positive | 199 | `"50 x 120"` frontage×depth) with a missingness indicator; the top 1% of positive | ||
| 182 | parsed lots (multi-acre rural acreage strings) treated as "no usable lot info"; | 200 | parsed lots (multi-acre rural acreage strings) treated as "no usable lot info"; | ||
| 183 | - dwelling type consolidated to 8 groups, ownership to 6 groups; | 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 | - filters: strictly positive price, non-missing living area / bedrooms / bathrooms, | 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 | ## 📊 Data | 210 | ## 📊 Data | ||
| 189 | 211 | ||||
@@ -197,89 +219,79 @@ file limit, plus its content is scraped listing data). It lives on the author's | |||||
| 197 | place it at `data/raw/realtor_mls_unique.duckdb` to run step 01. All downstream artifacts | 219 | place it at `data/raw/realtor_mls_unique.duckdb` to run step 01. All downstream artifacts | ||
| 198 | — including the committed estimation sample — derive from it programmatically. | 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**; | 222 | +Estimation-sample snapshot (Table 1 of the paper): median asking price **$639,900**; | ||
| 201 | −median living area ≈ **135 m²**; 3 bedrooms; 2 full bathrooms. Both price and price/m² | 223 | +median living area **135 m²**; 3 bedrooms; 2 full bathrooms. Both price and price/m² are | ||
| 202 | −are strongly right-skewed, motivating the log transformation. Ontario, Quebec, BC and | 224 | +strongly right-skewed, motivating the log transformation. ON 55,897 · BC 32,994 · QC 19,949 | ||
| 203 | −Alberta dominate; PEI and the territories have no listings in this snapshot. | 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 | ## 📐 Methodology | 229 | ## 📐 Methodology | ||
| 206 | 230 | ||||
| 207 | - **Specification ladder** — M1 structural only → M2 + type/ownership → M3 + province FE | 231 | - **Specification ladder** — M1 structural only → M2 + type/ownership → M3 + province FE | ||
| 208 | (house subsample) → M4 houses + FSA FE → M5 **grand model** (all residential, FSA FE). | 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. | 233 | +- **Variance decomposition** — sequential increments *and* Shapley values over the four | ||
| 210 | −- **Absorbing least squares** (`linearmodels.AbsorbingLS`) sweeps out the 1,153 FSA | 234 | + blocks (16 regressions) plus Owen values grouping province + FSA into one location block | ||
| 211 | − intercepts without materialising dummies; slopes are numerically identical to | 235 | + (Israeli 2007; Huettner & Sunder 2012). The sequential ladder credits the ~10 pp shared by | ||
| 212 | − full-dummy OLS. SEs clustered by FSA throughout. | 236 | + structure and location to whichever enters first. | ||
| 213 | −- **Retransformation** — predictions in levels use Duan's (1983) smearing estimator (no | 237 | +- **Absorbing least squares** (`linearmodels.AbsorbingLS`) sweeps out the 1,155 FSA | ||
| 214 | − log-normality assumption). | 238 | + intercepts; slopes identical to full-dummy OLS. Baseline SEs clustered by FSA; also HC1, | ||
| 215 | −- **Validation** — random 80/20 split, evaluation restricted to FSAs observed in | 239 | + province-cluster, two-way, and a restricted wild-cluster bootstrap-t at the province level | ||
| 216 | − training (out-of-support FE are not identified); leave-one-province-out CV with | 240 | + (Rademacher, full enumeration of 2⁹ = 512 draws). | ||
| 217 | − province-specific intercepts; Moran's I with row-standardised k-NN weights (k = 10, | 241 | +- **Percentage effects** — e^γ − 1 for counts; Kennedy (1981) correction for indicators. | ||
| 218 | − 15,000-listing sample, 199 permutations). | 242 | +- **Functional form** — quadratic in ln(area) and a linear spline with quintile knots. | ||
| 219 | − | 243 | +- **Retransformation** — Duan (1983) smearing. | ||
| 220 | −## 🧭 The two results tiers (reference vs. reproduced) | 244 | +- **Validation** — (i) random 80/20 splits × 5 seeds, evaluation on FSAs seen in training; | ||
| 221 | − | 245 | + (ii) **spatial holdout**: 20% of FSAs held out entirely × 5 reps, FSA effect imputed as the | ||
| 222 | −The original upstream cleaning code (`RE_DB_QC/hedonic`) was **lost** before this | 246 | + province mean or as the inverse-distance mean of the 5 nearest training FSAs; (iii) | ||
| 223 | −repository was assembled; `src/wp9/sample.py` is a careful reconstruction from the | 247 | + leave-one-province-out with province intercepts. | ||
| 224 | −paper's own data section, calibrated against every stored output (see `docs/AUDIT.md`). It | 248 | +- **Spatial diagnostics** — Moran's I, row-standardised k-NN weights (k = 5, 10, 20), two | ||
| 225 | −reproduces the published sample to **+0.86%** and all headline estimates closely — but | 249 | + 15,000-listing subsamples, 199 permutations. | ||
| 226 | −not to the last digit. To keep the published record intact: | 250 | +- **Urban gradient** — location residual on ln(distance to nearest of 9 metros): pooled, | ||
| 227 | − | 251 | + with nearest-metro intercepts, quadratic; FSA-clustered SEs. | ||
| 228 | −- **`results/reference/`** — the original outputs (verbatim files, plus values | 252 | + | ||
| 229 | − transcribed from the published tables). **Default** source for figures/tables, so the | 253 | +## 🧭 The two results tiers (reproduced vs. reference) | ||
| 230 | − paper always shows exactly the published numbers. | 254 | + | ||
| 231 | −- **`results/reproduced/`** — regenerated end-to-end by scripts 02–03 on the | 255 | +- **`results/reproduced/`** — **the paper's numbers since v1.3.** Regenerated end-to-end by | ||
| 232 | − reconstructed sample. | 256 | + scripts 01–06 on the committed sample, with the province derived from the FSA. | ||
| 233 | − | 257 | +- **`results/reference/`** — the archived outputs of the May 2026 version (v1.2), whose | ||
| 234 | −```bash | 258 | + upstream cleaning code was lost (see `docs/AUDIT.md`). Kept for the reconciliation table | ||
| 235 | −python3 scripts/04_make_figures.py --results reproduced # opt in to regenerated numbers | 259 | + in Appendix C of the paper. `python3 scripts/0{4,5}_*.py --results reference` rebuilds | ||
| 236 | −python3 scripts/05_make_tables.py --results reproduced | 260 | + the v1.2 figures/tables (the six original tables only). | ||
| 237 | −``` | ||||
| 238 | 261 | ||||
| 239 | ## 🖼️ Figures & tables inventory | 262 | ## 🖼️ Figures & tables inventory | ||
| 240 | 263 | ||||
| 241 | −| # | Figure | Shows | Numbers from | | 264 | +| # | Figure | Shows | | ||
| 242 | −|---|---|---|---| | 265 | +|---|---|---| | ||
| 243 | −| 1 | `fig_price_dist` | raw vs. log price distribution | micro sample | | 266 | +| 1 | `fig_price_dist` | raw vs. log asking price | | ||
| 244 | −| 2 | `fig_province_ppm2` | median $/m² by province | micro sample | | 267 | +| 2 | `fig_province_ppm2` | median $/m² by province (FSA-derived) | | ||
| 245 | −| 3 | `fig_r2` | R² across the M1–M5 ladder | reference | | 268 | +| 3 | `fig_r2` | R² across the M1–M5 ladder | | ||
| 246 | −| 4 | `fig_forest` | structural implicit prices, 95% CI (M3) | reference | | 269 | +| 4 | `fig_decomp` | sequential vs. Shapley variance decomposition | | ||
| 247 | −| 5 | `fig_size_gradient` | median price by size bin × dwelling type | micro sample | | 270 | +| 5 | `fig_forest` | structural implicit prices, 95% CI (M3) | | ||
| 248 | −| 6a/6b | `fig_map` / `fig_fsa_map` | listing map & FSA medians, coloured by ln $/m² | micro sample | | 271 | +| 6 | `fig_size_gradient` | median price by size bin × dwelling type | | ||
| 249 | −| 7 | `fig_premia` | top/bottom 12 FSA premia vs. national median | reference | | 272 | +| 7a/7b | `fig_map` / `fig_fsa_map` | listing map & FSA medians, ln $/m² | | ||
| 250 | −| 8 | `fig_decomp` | variance decomposition bar | reference | | 273 | +| 8 | `fig_premia` | top/bottom 12 FSA premia vs. median FSA | | ||
| 251 | −| 9 | `fig_nonlinear` | marginal elasticity vs. size (quadratic model) | reproduced band + reference anchor | | 274 | +| 9 | `fig_nonlinear` | marginal elasticity vs. size: quadratic + spline | | ||
| 252 | −| 10 | `fig_gradient` | location premium vs. distance to metro | reproduced | | 275 | +| 10 | `fig_gradient` | location premium by distance band to metro | | ||
| 253 | −| 11 | `fig_quantile` | quantile coefficients τ = 0.1…0.9 | reference | | 276 | +| 11 | `fig_quantile` | quantile coefficients τ = 0.1…0.9 | | ||
| 254 | −| 12 | `fig_moran` | Moran scatterplots, structural vs. grand | reproduced clouds, reference I | | 277 | +| 12 | `fig_moran` | Moran scatterplots, structural vs. grand | | ||
| 255 | −| 13 | `fig_heterogeneity` | size elasticity by province, 95% CI | reference | | 278 | +| 13 | `fig_heterogeneity` | size elasticity by province, 95% CI | | ||
| 256 | −| 14 | `fig_oos` | OOS error buckets (±10/±20%) | reference | | 279 | +| 14 | `fig_oos` | OOS error buckets (±10/±20%) | | ||
| 257 | −| 15/16 | `fig_fit` / `fig_resid` | predicted vs. actual; residual diagnostics | reproduced | | 280 | +| 15 | `fig_fit` / `fig_resid` | predicted vs. actual; residual diagnostics | | ||
| 258 | − | 281 | + | ||
| 259 | −(The leave-one-province-out results appear as a table only.) | 282 | +Tables (`results/tables/`, 13): `summary_stats`, `shapley`, `regression` (M1/M2/M3/M5), | ||
| 260 | − | 283 | +`type_effects`, `spline`, `gradient`, `robustness` (8 cuts), `se_comparison`, `quantile`, | ||
| 261 | −Tables (`results/tables/`): `summary_stats`, `regression` (M1/M2/M3/M5), | 284 | +`lopo`, `oos`, `spatial_holdout`, `moran_sensitivity` (appendix). | ||
| 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. | ||||
| 276 | 285 | ||||
| 277 | ## ⚠️ Limitations | 286 | ## ⚠️ Limitations | ||
| 278 | 287 | ||||
| 279 | −List prices, not transactions; no construction year / renovation status / interior | 288 | +Asking prices, not transactions (implicit *list* prices; accuracy is an upper bound for | ||
| 280 | −quality (absorbed into FSA effects and the residual); lot information sparse and noisy; | 289 | +transaction-price models); no construction year / renovation / interior quality (within-FSA | ||
| 281 | −a single cross-section — levels, not dynamics. See the paper's conclusion for the | 290 | +sorting remains); noisy fields (lot parsed from free text, storeys/parking with implausible | ||
| 282 | −research agenda these imply. | 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 | ## 📚 Citation | 296 | ## 📚 Citation | ||
| 285 | 297 | ||||
@@ -288,14 +300,15 @@ research agenda these imply. | |||||
| 288 | author = {Boucher, Simon-Pierre}, | 300 | author = {Boucher, Simon-Pierre}, | ||
| 289 | title = {A Grand Hedonic Model of the Canadian Housing Market: | 301 | title = {A Grand Hedonic Model of the Canadian Housing Market: | ||
| 290 | Decomposing the Value of Structure and Location across | 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 | Fixed Effects}, | 304 | Fixed Effects}, | ||
| 293 | institution = {Universit\'e du Qu\'ebec en Outaouais, | 305 | institution = {Universit\'e du Qu\'ebec en Outaouais, | ||
| 294 | D\'epartement des sciences administratives}, | 306 | D\'epartement des sciences administratives}, | ||
| 295 | type = {Working Paper}, | 307 | type = {Working Paper}, | ||
| 296 | number = {9}, | 308 | number = {9}, | ||
| 297 | year = {2026}, | 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 | - Numbering: UQO Working Paper No. 9 since the first version (May 2026). | 330 | - Numbering: UQO Working Paper No. 9 since the first version (May 2026). | ||
| 318 | - 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. | 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 | - Cover page, metadata and layout follow `Recherche-UQO/HARMONISATION.md` (2026-10-17). | 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 | % A Grand Hedonic Model of the Canadian Housing Market | 4 | % A Grand Hedonic Model of the Canadian Housing Market | ||
| 5 | % | 5 | % | ||
| 6 | % Build: latexmk -pdf main.tex (or `make` in this directory) | 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 | % Figures are read from ../figures/, tables from ../results/tables/. | 8 | % Figures are read from ../figures/, tables from ../results/tables/. | ||
| 8 | % ============================================================================ | 9 | % ============================================================================ | ||
| 9 | \documentclass[12pt,letterpaper]{article} | 10 | \documentclass[12pt,letterpaper]{article} | ||
@@ -29,11 +30,18 @@ | |||||
| 29 | \usepackage{booktabs} | 30 | \usepackage{booktabs} | ||
| 30 | \usepackage{threeparttable} | 31 | \usepackage{threeparttable} | ||
| 31 | \usepackage{makecell} | 32 | \usepackage{makecell} | ||
| 33 | +\usepackage{multirow} | ||||
| 32 | 34 | ||||
| 33 | % ---------------------------------------------------------------- figures | 35 | % ---------------------------------------------------------------- figures | ||
| 34 | \usepackage{graphicx} | 36 | \usepackage{graphicx} | ||
| 35 | \usepackage{subcaption} | 37 | \usepackage{subcaption} | ||
| 36 | \graphicspath{{../figures/}{./}} | 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 | % ---------------------------------------------------------------- captions | 46 | % ---------------------------------------------------------------- captions | ||
| 39 | \usepackage[font=small,labelfont=bf,labelsep=period,justification=justified,singlelinecheck=false]{caption} | 47 | \usepackage[font=small,labelfont=bf,labelsep=period,justification=justified,singlelinecheck=false]{caption} | ||
@@ -58,16 +66,19 @@ | |||||
| 58 | \usepackage{enumitem} | 66 | \usepackage{enumitem} | ||
| 59 | \setlist{nosep,leftmargin=*} | 67 | \setlist{nosep,leftmargin=*} | ||
| 60 | 68 | ||||
| 69 | +% ---------------------------------------------------------------- appendix | ||||
| 70 | +\usepackage[toc,page]{appendix} | ||||
| 71 | + | ||||
| 61 | % ============================================================================ | 72 | % ============================================================================ | ||
| 62 | % METADATA | 73 | % METADATA | ||
| 63 | % ============================================================================ | 74 | % ============================================================================ | ||
| 64 | \newcommand{\WPnumber}{9} | 75 | \newcommand{\WPnumber}{9} | ||
| 65 | \newcommand{\WPtitle}{A Grand Hedonic Model of the Canadian Housing Market} | 76 | \newcommand{\WPtitle}{A Grand Hedonic Model of the Canadian Housing Market} | ||
| 66 | \newcommand{\WPsubtitle}{Decomposing the Value of Structure and Location across | 77 | \newcommand{\WPsubtitle}{Decomposing the Value of Structure and Location across | ||
| 67 | − 140{,}931 MLS Listings with High-Dimensional Neighbourhood Fixed Effects} | 78 | + 142{,}121 MLS Listings with High-Dimensional Neighbourhood Fixed Effects} | ||
| 68 | −\newcommand{\WPdate}{May 2026} | 79 | +\newcommand{\WPdate}{October 2026} | ||
| 69 | −\newcommand{\WPversion}{1.2} | 80 | +\newcommand{\WPversion}{1.3} | ||
| 70 | −\newcommand{\WPkeywords}{hedonic pricing, housing markets, Canada, fixed effects, spatial heterogeneity, automated valuation} | 81 | +\newcommand{\WPkeywords}{hedonic pricing, housing markets, Canada, high-dimensional fixed effects, neighbourhood effects, spatial autocorrelation, automated valuation model, list prices} | ||
| 71 | \newcommand{\WPjel}{R31, R21, C21, C55} | 82 | \newcommand{\WPjel}{R31, R21, C21, C55} | ||
| 72 | 83 | ||||
| 73 | \newcommand{\WPauthor}{Simon-Pierre Boucher} | 84 | \newcommand{\WPauthor}{Simon-Pierre Boucher} | ||
@@ -78,24 +89,30 @@ | |||||
| 78 | 283, boulevard Alexandre-Tach\'e\\ Gatineau, Qu\'ebec, Canada J9A 1L8} | 89 | 283, boulevard Alexandre-Tach\'e\\ Gatineau, Qu\'ebec, Canada J9A 1L8} | ||
| 79 | 90 | ||||
| 80 | \newcommand{\WPabstract}{% | 91 | \newcommand{\WPabstract}{% | ||
| 81 | −We estimate a large-scale hedonic price model for the Canadian residential real-estate | 92 | +We estimate a national hedonic price function for the Canadian residential market on a | ||
| 82 | −market using a cross-section of 140{,}931 active MLS listings drawn from the nine provinces | 93 | +cross-section of 142{,}121 active MLS listings from nine provinces. A semi-logarithmic | ||
| 83 | −present in the data. A semi-logarithmic specification decomposes dwelling prices into | 94 | +specification relates the log list price to structural attributes, dwelling type and | ||
| 84 | −structural attributes, dwelling type and ownership form, and 1{,}153 neighbourhood | 95 | +ownership form, and 1{,}155 absorbed neighbourhood (Forward Sortation Area) fixed effects | ||
| 85 | −(Forward Sortation Area) fixed effects estimated by absorbing least squares. Moving from a | 96 | +estimated by absorbing least squares with neighbourhood-clustered inference. Moving from a | ||
| 86 | −purely structural model to the full specification raises the explained share of price | 97 | +structural model to the full specification raises the explained share of log-price | ||
| 87 | −variation from 46\% to 77\%, establishing that location is the dominant price determinant | 98 | +variation from 44\% to 78\%. Because structure and location are correlated, the attribution | ||
| 88 | −in Canada: neighbourhood effects alone account for roughly thirty percentage points of | 99 | +of this gain depends on the order in which blocks enter: a Shapley--Owen decomposition | ||
| 89 | −explanatory power. The living-area elasticity is 0.51--0.62, each full bathroom commands a | 100 | +assigns about 34 percentage points to structure and 36 to location, so that the two are of | ||
| 90 | −premium of about 11--15\%, and---conditional on floor space---bedroom counts are | 101 | +comparable importance and the neighbourhood is the single largest block once province and | ||
| 91 | −economically negligible. The implicit prices are stable across alternative samples and | 102 | +neighbourhood are grouped. Conditional on location, the living-area elasticity is 0.53 | ||
| 92 | −trimming rules, and the model delivers strong out-of-sample valuation accuracy (held-out | 103 | +(0.49--0.62 across samples), each full bathroom adds about 12\%, and bedroom counts are | ||
| 93 | −$R^2=0.76$; median absolute error of 16\%). The neighbourhood effects absorb the bulk of | 104 | +economically negligible. The implicit prices of area and bathrooms survive province-level | ||
| 94 | −the spatial dependence in prices---Moran's~$I$ falls from 0.46 to 0.08---and we further | 105 | +wild-cluster bootstrap inference, whereas the small half-bathroom and bedroom effects do not. | ||
| 95 | −document diminishing returns to floor space, an urban price gradient that decays with | 106 | +Neighbourhood effects remove 87\% of the spatial autocorrelation in residuals (Moran's~$I$ | ||
| 96 | −distance to major metros, and quantile and cross-province heterogeneity in the implicit | 107 | +0.50 to 0.06). The model values held-out listings in neighbourhoods seen in training with | ||
| 97 | −prices. We map the resulting neighbourhood premia, which span a factor of roughly nine | 108 | +an out-of-sample $R^2$ of 0.77 and a median absolute percentage error of 15.6\%; for | ||
| 98 | −between the most and least expensive areas.} | 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 | \hypersetup{pdftitle={A Grand Hedonic Model of the Canadian Housing Market}, pdfauthor={Simon-Pierre Boucher}} | 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 | \input{sections/discussion} | 130 | \input{sections/discussion} | ||
| 114 | \input{sections/conclusion} | 131 | \input{sections/conclusion} | ||
| 115 | 132 | ||||
| 116 | −\newpage | 133 | +\clearpage | ||
| 117 | \bibliography{references} | 134 | \bibliography{references} | ||
| 118 | 135 | ||||
| 136 | +\input{appendix/appendix} | ||||
| 137 | + | ||||
| 119 | \end{document} | 138 | \end{document} | ||
modified
paper/references.bib
+382 −63
@@ -9,7 +9,8 @@ | |||||
| 9 | volume = {82}, | 9 | volume = {82}, | ||
| 10 | number = {1}, | 10 | number = {1}, | ||
| 11 | pages = {34--55}, | 11 | pages = {34--55}, | ||
| 12 | − year = {1974} | 12 | + year = {1974}, | ||
| 13 | + doi = {10.1086/260169} | ||||
| 13 | } | 14 | } | ||
| 14 | 15 | ||||
| 15 | @article{lancaster1966new, | 16 | @article{lancaster1966new, | ||
@@ -19,23 +20,28 @@ | |||||
| 19 | volume = {74}, | 20 | volume = {74}, | ||
| 20 | number = {2}, | 21 | number = {2}, | ||
| 21 | pages = {132--157}, | 22 | pages = {132--157}, | ||
| 22 | − year = {1966} | 23 | + year = {1966}, | ||
| 24 | + doi = {10.1086/259131} | ||||
| 23 | } | 25 | } | ||
| 24 | 26 | ||||
| 25 | −@article{court1939hedonic, | 27 | +@incollection{court1939hedonic, | ||
| 26 | − author = {Court, Andrew T.}, | 28 | + author = {Court, Andrew T.}, | ||
| 27 | − title = {Hedonic Price Indexes with Automotive Examples}, | 29 | + title = {Hedonic Price Indexes with Automotive Examples}, | ||
| 28 | − journal = {The Dynamics of Automobile Demand, General Motors}, | 30 | + booktitle = {The Dynamics of Automobile Demand}, | ||
| 29 | − pages = {99--117}, | 31 | + publisher = {General Motors Corporation}, | ||
| 30 | − year = {1939} | 32 | + address = {New York}, | ||
| 33 | + pages = {99--117}, | ||||
| 34 | + year = {1939} | ||||
| 31 | } | 35 | } | ||
| 32 | 36 | ||||
| 33 | −@article{griliches1961hedonic, | 37 | +@incollection{griliches1961hedonic, | ||
| 34 | − author = {Griliches, Zvi}, | 38 | + author = {Griliches, Zvi}, | ||
| 35 | − title = {Hedonic Price Indexes for Automobiles: An Econometric Analysis of Quality Change}, | 39 | + title = {Hedonic Price Indexes for Automobiles: An Econometric Analysis of Quality Change}, | ||
| 36 | − journal = {The Price Statistics of the Federal Government, NBER}, | 40 | + booktitle = {The Price Statistics of the Federal Government}, | ||
| 37 | − pages = {173--196}, | 41 | + publisher = {National Bureau of Economic Research}, | ||
| 38 | − year = {1961} | 42 | + address = {New York}, | ||
| 43 | + pages = {173--196}, | ||||
| 44 | + year = {1961} | ||||
| 39 | } | 45 | } | ||
| 40 | 46 | ||||
| 41 | @article{halvorsen1980interpretation, | 47 | @article{halvorsen1980interpretation, | ||
@@ -54,8 +60,9 @@ | |||||
| 54 | journal = {Journal of Real Estate Literature}, | 60 | journal = {Journal of Real Estate Literature}, | ||
| 55 | volume = {13}, | 61 | volume = {13}, | ||
| 56 | number = {1}, | 62 | number = {1}, | ||
| 57 | − pages = {3--43}, | 63 | + pages = {1--44}, | ||
| 58 | − year = {2005} | 64 | + year = {2005}, | ||
| 65 | + doi = {10.1080/10835547.2005.12090154} | ||||
| 59 | } | 66 | } | ||
| 60 | 67 | ||||
| 61 | @incollection{malpezzi2003hedonic, | 68 | @incollection{malpezzi2003hedonic, | ||
@@ -65,7 +72,8 @@ | |||||
| 65 | editor = {O'Sullivan, Tony and Gibb, Kenneth}, | 72 | editor = {O'Sullivan, Tony and Gibb, Kenneth}, | ||
| 66 | publisher = {Blackwell}, | 73 | publisher = {Blackwell}, | ||
| 67 | pages = {67--89}, | 74 | pages = {67--89}, | ||
| 68 | − year = {2003} | 75 | + year = {2003}, | ||
| 76 | + doi = {10.1002/9780470690680.ch5} | ||||
| 69 | } | 77 | } | ||
| 70 | 78 | ||||
| 71 | @article{can1992specification, | 79 | @article{can1992specification, | ||
@@ -75,7 +83,8 @@ | |||||
| 75 | volume = {22}, | 83 | volume = {22}, | ||
| 76 | number = {3}, | 84 | number = {3}, | ||
| 77 | pages = {453--474}, | 85 | pages = {453--474}, | ||
| 78 | − year = {1992} | 86 | + year = {1992}, | ||
| 87 | + doi = {10.1016/0166-0462(92)90039-4} | ||||
| 79 | } | 88 | } | ||
| 80 | 89 | ||||
| 81 | @book{anselin1988spatial, | 90 | @book{anselin1988spatial, | ||
@@ -92,7 +101,8 @@ | |||||
| 92 | volume = {35}, | 101 | volume = {35}, | ||
| 93 | number = {2}, | 102 | number = {2}, | ||
| 94 | pages = {143--160}, | 103 | pages = {143--160}, | ||
| 95 | − year = {2007} | 104 | + year = {2007}, | ||
| 105 | + doi = {10.1007/s11146-007-9036-8} | ||||
| 96 | } | 106 | } | ||
| 97 | 107 | ||||
| 98 | @article{case2004modeling, | 108 | @article{case2004modeling, | ||
@@ -102,7 +112,8 @@ | |||||
| 102 | volume = {29}, | 112 | volume = {29}, | ||
| 103 | number = {2}, | 113 | number = {2}, | ||
| 104 | pages = {167--191}, | 114 | pages = {167--191}, | ||
| 105 | − year = {2004} | 115 | + year = {2004}, | ||
| 116 | + doi = {10.1023/B:REAL.0000035309.60607.53} | ||||
| 106 | } | 117 | } | ||
| 107 | 118 | ||||
| 108 | @article{kuminoff2010which, | 119 | @article{kuminoff2010which, | ||
@@ -112,7 +123,8 @@ | |||||
| 112 | volume = {60}, | 123 | volume = {60}, | ||
| 113 | number = {3}, | 124 | number = {3}, | ||
| 114 | pages = {145--160}, | 125 | pages = {145--160}, | ||
| 115 | − year = {2010} | 126 | + year = {2010}, | ||
| 127 | + doi = {10.1016/j.jeem.2010.06.001} | ||||
| 116 | } | 128 | } | ||
| 117 | 129 | ||||
| 118 | @article{glaeser2005why, | 130 | @article{glaeser2005why, | ||
@@ -122,7 +134,8 @@ | |||||
| 122 | volume = {95}, | 134 | volume = {95}, | ||
| 123 | number = {2}, | 135 | number = {2}, | ||
| 124 | pages = {329--333}, | 136 | pages = {329--333}, | ||
| 125 | − year = {2005} | 137 | + year = {2005}, | ||
| 138 | + doi = {10.1257/000282805774669961} | ||||
| 126 | } | 139 | } | ||
| 127 | 140 | ||||
| 128 | @article{duan1983smearing, | 141 | @article{duan1983smearing, | ||
@@ -132,7 +145,8 @@ | |||||
| 132 | volume = {78}, | 145 | volume = {78}, | ||
| 133 | number = {383}, | 146 | number = {383}, | ||
| 134 | pages = {605--610}, | 147 | pages = {605--610}, | ||
| 135 | − year = {1983} | 148 | + year = {1983}, | ||
| 149 | + doi = {10.1080/01621459.1983.10478017} | ||||
| 136 | } | 150 | } | ||
| 137 | 151 | ||||
| 138 | @article{cameron2015practitioner, | 152 | @article{cameron2015practitioner, | ||
@@ -142,25 +156,17 @@ | |||||
| 142 | volume = {50}, | 156 | volume = {50}, | ||
| 143 | number = {2}, | 157 | number = {2}, | ||
| 144 | pages = {317--372}, | 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 | author = {Correia, Sergio}, | 164 | author = {Correia, Sergio}, | ||
| 150 | title = {Linear Models with High-Dimensional Fixed Effects: An Efficient and Feasible Estimator}, | 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 | year = {2017} | 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 | @article{mullainathan2017machine, | 171 | @article{mullainathan2017machine, | ||
| 166 | author = {Mullainathan, Sendhil and Spiess, Jann}, | 172 | author = {Mullainathan, Sendhil and Spiess, Jann}, | ||
@@ -169,18 +175,10 @@ | |||||
| 169 | volume = {31}, | 175 | volume = {31}, | ||
| 170 | number = {2}, | 176 | number = {2}, | ||
| 171 | pages = {87--106}, | 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 | @article{ekeland2004identification, | 183 | @article{ekeland2004identification, | ||
| 186 | author = {Ekeland, Ivar and Heckman, James J. and Nesheim, Lars}, | 184 | author = {Ekeland, Ivar and Heckman, James J. and Nesheim, Lars}, | ||
@@ -189,7 +187,8 @@ | |||||
| 189 | volume = {112}, | 187 | volume = {112}, | ||
| 190 | number = {S1}, | 188 | number = {S1}, | ||
| 191 | pages = {S60--S109}, | 189 | pages = {S60--S109}, | ||
| 192 | − year = {2004} | 190 | + year = {2004}, | ||
| 191 | + doi = {10.1086/379947} | ||||
| 193 | } | 192 | } | ||
| 194 | 193 | ||||
| 195 | @article{bajari2005hedonic, | 194 | @article{bajari2005hedonic, | ||
@@ -199,7 +198,8 @@ | |||||
| 199 | volume = {113}, | 198 | volume = {113}, | ||
| 200 | number = {6}, | 199 | number = {6}, | ||
| 201 | pages = {1239--1276}, | 200 | pages = {1239--1276}, | ||
| 202 | − year = {2005} | 201 | + year = {2005}, | ||
| 202 | + doi = {10.1086/498586} | ||||
| 203 | } | 203 | } | ||
| 204 | 204 | ||||
| 205 | @article{black1999better, | 205 | @article{black1999better, | ||
@@ -209,7 +209,8 @@ | |||||
| 209 | volume = {114}, | 209 | volume = {114}, | ||
| 210 | number = {2}, | 210 | number = {2}, | ||
| 211 | pages = {577--599}, | 211 | pages = {577--599}, | ||
| 212 | − year = {1999} | 212 | + year = {1999}, | ||
| 213 | + doi = {10.1162/003355399556070} | ||||
| 213 | } | 214 | } | ||
| 214 | 215 | ||||
| 215 | @article{chay2005does, | 216 | @article{chay2005does, | ||
@@ -219,7 +220,8 @@ | |||||
| 219 | volume = {113}, | 220 | volume = {113}, | ||
| 220 | number = {2}, | 221 | number = {2}, | ||
| 221 | pages = {376--424}, | 222 | pages = {376--424}, | ||
| 222 | − year = {2005} | 223 | + year = {2005}, | ||
| 224 | + doi = {10.1086/427462} | ||||
| 223 | } | 225 | } | ||
| 224 | 226 | ||||
| 225 | @article{linden2008estimates, | 227 | @article{linden2008estimates, | ||
@@ -229,7 +231,8 @@ | |||||
| 229 | volume = {98}, | 231 | volume = {98}, | ||
| 230 | number = {3}, | 232 | number = {3}, | ||
| 231 | pages = {1103--1127}, | 233 | pages = {1103--1127}, | ||
| 232 | − year = {2008} | 234 | + year = {2008}, | ||
| 235 | + doi = {10.1257/aer.98.3.1103} | ||||
| 233 | } | 236 | } | ||
| 234 | 237 | ||||
| 235 | @book{lesage2009introduction, | 238 | @book{lesage2009introduction, | ||
@@ -246,16 +249,20 @@ | |||||
| 246 | volume = {52}, | 249 | volume = {52}, | ||
| 247 | number = {2}, | 250 | number = {2}, | ||
| 248 | pages = {172--191}, | 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, | 256 | +@incollection{combes2015empirics, | ||
| 253 | − author = {Combes, Pierre-Philippe and Gobillon, Laurent}, | 257 | + author = {Combes, Pierre-Philippe and Gobillon, Laurent}, | ||
| 254 | − title = {The Empirics of Agglomeration Economies}, | 258 | + title = {The Empirics of Agglomeration Economies}, | ||
| 255 | − journal = {Handbook of Regional and Urban Economics}, | 259 | + booktitle = {Handbook of Regional and Urban Economics}, | ||
| 256 | − volume = {5}, | 260 | + editor = {Duranton, Gilles and Henderson, J. Vernon and Strange, William C.}, | ||
| 257 | − pages = {247--348}, | 261 | + volume = {5}, | ||
| 258 | − year = {2015} | 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 | @article{moran1950notes, | 268 | @article{moran1950notes, | ||
@@ -265,7 +272,8 @@ | |||||
| 265 | volume = {37}, | 272 | volume = {37}, | ||
| 266 | number = {1/2}, | 273 | number = {1/2}, | ||
| 267 | pages = {17--23}, | 274 | pages = {17--23}, | ||
| 268 | − year = {1950} | 275 | + year = {1950}, | ||
| 276 | + doi = {10.1093/biomet/37.1-2.17} | ||||
| 269 | } | 277 | } | ||
| 270 | 278 | ||||
| 271 | @article{koenker1978regression, | 279 | @article{koenker1978regression, | ||
@@ -275,7 +283,8 @@ | |||||
| 275 | volume = {46}, | 283 | volume = {46}, | ||
| 276 | number = {1}, | 284 | number = {1}, | ||
| 277 | pages = {33--50}, | 285 | pages = {33--50}, | ||
| 278 | − year = {1978} | 286 | + year = {1978}, | ||
| 287 | + doi = {10.2307/1913643} | ||||
| 279 | } | 288 | } | ||
| 280 | 289 | ||||
| 281 | @article{zietz2008determinants, | 290 | @article{zietz2008determinants, | ||
@@ -285,7 +294,8 @@ | |||||
| 285 | volume = {37}, | 294 | volume = {37}, | ||
| 286 | number = {4}, | 295 | number = {4}, | ||
| 287 | pages = {317--333}, | 296 | pages = {317--333}, | ||
| 288 | − year = {2008} | 297 | + year = {2008}, | ||
| 298 | + doi = {10.1007/s11146-007-9053-7} | ||||
| 289 | } | 299 | } | ||
| 290 | 300 | ||||
| 291 | @article{mcmillen2010issues, | 301 | @article{mcmillen2010issues, | ||
@@ -295,7 +305,8 @@ | |||||
| 295 | volume = {50}, | 305 | volume = {50}, | ||
| 296 | number = {3}, | 306 | number = {3}, | ||
| 297 | pages = {712--733}, | 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 | @article{pace1998spatiotemporal, | 312 | @article{pace1998spatiotemporal, | ||
@@ -305,7 +316,8 @@ | |||||
| 305 | volume = {17}, | 316 | volume = {17}, | ||
| 306 | number = {1}, | 317 | number = {1}, | ||
| 307 | pages = {15--33}, | 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 | pages = {628--649}, | 660 | pages = {628--649}, | ||
| 649 | doi = {10.1177/1536867X1001000406} | 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 | \label{sec:conclusion} | 4 | \label{sec:conclusion} | ||
| 5 | % ============================================================================ | 5 | % ============================================================================ | ||
| 6 | 6 | ||||
| 7 | −Using a nationwide cross-section of 140{,}931 MLS listings and 1{,}153 absorbed | 7 | +Using a nationwide cross-section of 142{,}121 MLS listings and 1{,}155 absorbed | ||
| 8 | −neighbourhood fixed effects, we estimate a grand hedonic model of the Canadian | 8 | +neighbourhood fixed effects, we estimate a hedonic price function for the Canadian | ||
| 9 | −residential housing market. The exercise yields three robust conclusions. First, | 9 | +residential market and decompose the variance of log asking prices into structure and | ||
| 10 | −location dominates: resolving geography from the provincial to the neighbourhood scale | 10 | +location. The exercise yields four conclusions. First, location and structure are of | ||
| 11 | −raises explained price variation from 57\% to 77\%, and location as a whole accounts for | 11 | +comparable importance: resolving geography from the provincial to the neighbourhood scale | ||
| 12 | −roughly thirty percentage points of $R^2$---more than every structural attribute | 12 | +raises explained variation from 60\% to 77\%, and a Shapley--Owen decomposition assigns | ||
| 13 | −combined, and a listing-level counterpart to the large land shares documented in | 13 | +about 34 percentage points of $R^2$ to structure and 36 to location, so that the | ||
| 14 | −aggregate data \citep{davis2007price,knoll2017no}. Second, the structural implicit | 14 | +neighbourhood is the single largest block once province and neighbourhood are grouped, | ||
| 15 | −prices behave as hedonic theory predicts and are strikingly stable across samples: | 15 | +while the sequential ladder that most hedonic papers report would credit structure with 44 | ||
| 16 | −living area carries an elasticity near 0.55, each full bathroom adds about 11--15\%, and | 16 | +points and location with 32. The answer to ``how much is location worth?'' is therefore | ||
| 17 | −bedroom counts are economically negligible once floor space is held | 17 | +inseparable from the attribution rule, and we have made that rule explicit. Second, the | ||
| 18 | −fixed---magnitudes squarely within the range catalogued by decades of hedonic work | 18 | +structural implicit list prices behave as hedonic theory predicts and are stable across | ||
| 19 | −\citep{sirmans2005composition}. Third, the neighbourhood premia are vast---a factor of | 19 | +eight samples: living area carries an elasticity of 0.53, each full bathroom adds about | ||
| 20 | −roughly nine separates the most and least expensive FSAs---and the model translates into | 20 | +12\%, and bedroom counts are economically negligible once floor space is held fixed. The | ||
| 21 | −a credible valuation tool, predicting held-out prices with an out-of-sample $R^2$ of | 21 | +area and bathroom effects survive province-level wild-cluster bootstrap inference; the | ||
| 22 | −0.76 and a median error of 16\%. These conclusions survive an extensive battery of | 22 | +small half-bathroom and bedroom effects do not. Third, the neighbourhood premia are | ||
| 23 | −checks: the implicit prices are stable across subsamples and across the price | 23 | +vast---a factor of about ten separates Vancouver's west side from rural Newfoundland for an | ||
| 24 | −distribution, the neighbourhood effects absorb 82\% of the spatial autocorrelation in | 24 | +identical dwelling---and the neighbourhood effects remove 87\% of the spatial | ||
| 25 | −residuals, floor space displays diminishing returns, value decays with distance to major | 25 | +autocorrelation in residuals. Fourth, the model is a credible valuation tool whose accuracy | ||
| 26 | −metros as the monocentric tradition predicts, and the structural prices transfer across | 26 | +depends on spatial support: it values held-out listings in known neighbourhoods with an | ||
| 27 | −provinces in leave-one-province-out cross-validation. | 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 | 35 | +The reading we propose is deliberately modest. In Canada, the neighbourhood is at least as | ||
| 30 | −Canada, the single largest priced component of a home is its neighbourhood. That fact | 36 | +large a component of a dwelling's asking price as the dwelling itself, and it is the | ||
| 31 | −is simultaneously a measurement result (for assessment, taxation and index | 37 | +component whose dispersion is greatest. That fact is simultaneously a measurement result | ||
| 32 | −construction), a validation result (a transparent fixed-effects design removes the | 38 | +(for assessment, taxation and index construction), a validation result (a transparent | ||
| 33 | −spatial dependence that motivates far more elaborate machinery), and a policy result | 39 | +fixed-effects design removes most of the spatial dependence that motivates far more | ||
| 34 | −(the premium dispersion that supply constraints and agglomeration generate is the | 40 | +elaborate machinery, and its fixed effects are smooth enough to be interpolated), and a | ||
| 35 | −dominant term in the decomposition). Section~\ref{sec:discussion} details the | 41 | +policy result (the premium dispersion that supply constraints and agglomeration generate is | ||
| 36 | −limitations---list prices, unobserved quality, noisy lot data, a single | 42 | +largest precisely in the most expensive markets). Section~\ref{sec:discussion} details the | ||
| 37 | −cross-section---and the research agenda they imply. Even within those bounds, the model | 43 | +limitations---asking rather than transaction prices, unobserved quality, noisy fields, a | ||
| 38 | −provides a transparent, reproducible benchmark for automated valuation, market | 44 | +single cross-section, postal rather than planning geography---and the research agenda they | ||
| 39 | −monitoring and the welfare analysis of local amenities across the Canadian residential | 45 | +imply. Within those bounds, the model provides a transparent and reproducible benchmark for | ||
| 40 | −market. | 46 | +automated valuation, market monitoring and the analysis of location value across the | ||
| 47 | +Canadian residential market. | ||||
| 41 | 48 | ||||
| 42 | \vspace{0.6em} | 49 | \vspace{0.6em} | ||
| 43 | \noindent\textbf{Reproducibility.} Data engineering was performed in \texttt{DuckDB} and | 50 | \noindent\textbf{Reproducibility.} Data engineering was performed in \texttt{DuckDB} and | ||
| 44 | −\texttt{pandas}; estimation used \texttt{statsmodels} (cluster-robust OLS) and | 51 | +\texttt{pandas}; estimation used \texttt{statsmodels} for cluster-robust OLS and quantile | ||
| 45 | −\texttt{linearmodels} (absorbing least squares); figures were produced in | 52 | +regression and \texttt{linearmodels} for absorbing least squares; figures were produced | ||
| 46 | −\texttt{matplotlib}. All tables and figures are generated programmatically from the | 53 | +in \texttt{matplotlib}. All tables and figures are generated programmatically from the source | ||
| 47 | −source database by the numbered scripts in the accompanying repository. | 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