SPB Git

spb/wp9_uqo

Public

UQO Working Paper No. 9 — A grand hedonic model of the Canadian housing market: decomposing structure and location value.

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>
Simon-Pierre Boucher committed (Oct 18, 2026) parent 8eb9bf6 Browse files

78 changed files +4,381 −2,079

78 changed files
Unified Split
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−[![Paper](https://img.shields.io/badge/paper-PDF%20(34%20p.)-b31b1b?logo=latex&logoColor=white)](paper/main.pdf) 6+[![Paper](https://img.shields.io/badge/paper-PDF%20(52%20p.)-b31b1b?logo=latex&logoColor=white)](paper/main.pdf)
7 [![Python](https://img.shields.io/badge/python-3.11%2B-3776AB?logo=python&logoColor=white)](requirements.txt) 7 [![Python](https://img.shields.io/badge/python-3.11%2B-3776AB?logo=python&logoColor=white)](requirements.txt)
8 [![DuckDB](https://img.shields.io/badge/data-DuckDB%20·%20172%2C019%20listings-FFF000?logo=duckdb&logoColor=black)](data/raw/README.md) 8 [![DuckDB](https://img.shields.io/badge/data-DuckDB%20·%20172%2C019%20listings-FFF000?logo=duckdb&logoColor=black)](data/raw/README.md)
9 [![Estimation](https://img.shields.io/badge/estimation-statsmodels%20·%20linearmodels%20(AbsorbingLS)-4051b5)](src/wp9/models.py) 9 [![Estimation](https://img.shields.io/badge/estimation-statsmodels%20·%20linearmodels%20(AbsorbingLS)-4051b5)](src/wp9/models.py)
10 [![Reproducible](https://img.shields.io/badge/reproducible-end--to--end%20pipeline-2e7d32)](scripts/) 10 [![Reproducible](https://img.shields.io/badge/reproducible-end--to--end%20pipeline-2e7d32)](scripts/)
11−[![Tables verified](https://img.shields.io/badge/tables-identical%20to%20published-2e7d32)](docs/AUDIT.md) 11+[![Revised](https://img.shields.io/badge/revised-editorial%20board%202026--10--17-2e7d32)](docs/REVIEW-REPORT.md)
12 [![Institution](https://img.shields.io/badge/UQO-D%C3%A9pt.%20des%20sciences%20administratives-16365c)](https://uqo.ca) 12 [![Institution](https://img.shields.io/badge/UQO-D%C3%A9pt.%20des%20sciences%20administratives-16365c)](https://uqo.ca)
13 [![Author](https://img.shields.io/badge/author-Simon--Pierre%20Boucher-16365c)](mailto:simon-pierre.boucher@uqo.ca) 13 [![Author](https://img.shields.io/badge/author-Simon--Pierre%20Boucher-16365c)](mailto:simon-pierre.boucher@uqo.ca)
14 [![Contact](https://img.shields.io/badge/contact-simon--pierre.boucher%40uqo.ca-a02020?logo=maildotru&logoColor=white)](mailto:simon-pierre.boucher@uqo.ca) 14 [![Contact](https://img.shields.io/badge/contact-simon--pierre.boucher%40uqo.ca-a02020?logo=maildotru&logoColor=white)](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
@@ -7,72 +7,110 @@
7 \subsection{Source and coverage} 7 \subsection{Source and coverage}
8 \label{subsec:data_sources} 8 \label{subsec:data_sources}
9 9
10−The analysis draws on a de-duplicated snapshot of the Canadian Multiple Listing Service 10+The analysis draws on a de-duplicated snapshot of active ``for-sale'' listings from the
11−(MLS), \texttt{realtor\_mls\_unique.duckdb}, containing 172{,}019 unique active 11+Canadian Multiple Listing Service (MLS), stored as \texttt{realtor\_mls\_unique.duckdb} and
12−``for-sale'' listings. Each record carries the list price, a structured set of building 12+containing 172{,}019 unique listings. Each record carries the asking price, a
13−and lot attributes, ownership and dwelling-type fields, and---crucially for this 13+semi-structured set of building and lot attributes, ownership and dwelling-type fields, and
14−study---a geocoded location (latitude, longitude and postal code). Geographic coverage is 14+a geocoded location (latitude, longitude and postal code). Coordinates are present for every
15−essentially complete: coordinates and postal codes are present for more than 99.9\% of 15+record and postal codes for 99.9\% of them, so that each listing can be assigned to its
16−records, so every listing can be mapped to its Forward Sortation Area (FSA), the first 16+Forward Sortation Area (FSA), the first three characters of the Canadian postal code. Canada
17−three characters of the Canadian postal code and our unit of neighbourhood. 17+Post defines FSAs as the geographic units from which mail delivery originates; the first
18+letter identifies the province or territory, or a sector within Ontario and Quebec, and the
19+2021 Census recognised 1{,}643 FSAs nationally \citep{statcan2022fsa}. FSAs are postal
20+conveniences rather than planning units, but they are the finest geography that can be
21+assigned to every listing without a boundary file, and their size---a few city blocks in
22+dense urban cores, a rural county elsewhere---is of the order of what the submarket
23+literature uses \citep{bourassa2003submarkets,bogin2019local}.
24+
25+Two properties of the snapshot bear on everything that follows. First, the dependent
26+variable is the asking price of an active listing. Asking prices are set by sellers and
27+their agents, are typically above the eventual transaction price, and respond to market
28+tightness and listing strategy
29+\citep{horowitz1992role,genesove2001loss,anglin2003tradeoff,han2016what}; we therefore
30+interpret every coefficient as an implicit \emph{list} price. Second, the snapshot is a
31+single cross-section of the stock of listings at one point in time, not a flow of sales
32+over a period, so that no time dimension is available and the composition of the sample
33+reflects which dwellings were on the market rather than which dwellings sold.
18 34
19 \subsection{Sample construction and variable parsing} 35 \subsection{Sample construction and variable parsing}
20 \label{subsec:variables} 36 \label{subsec:variables}
21 37
22−The raw fields are semi-structured and require parsing. Bedroom counts reported as 38+The raw fields are semi-structured and require parsing; Appendix~\ref{app:variables}
23−``3~+~1'' (main plus lower level) are summed. Living areas, reported inconsistently in 39+documents every rule. Bedroom counts reported as ``3~+~1'' (main plus lower level) are
24−square feet or square metres, are harmonised to square metres (preferring the explicit 40+summed. Living areas, reported inconsistently in square feet or square metres and sometimes
25−floor-area measurement and converting from square feet at 41+as a band, are harmonised to square metres (preferring the explicit floor-area measurement,
26−$1\text{ ft}^2 = 0.0929\text{ m}^2$). Lot sizes are parsed from free-text fields into 42+mapping banded entries to the upper bound of the band, and converting at
27−square metres where a numeric value can be recovered, with a missingness indicator 43+$1\text{ ft}^2 = 0.0929\text{ m}^2$). Lot sizes are parsed from free text into square
28−retained. We restrict the sample to residential dwellings (houses, condominiums, plexes, 44+metres where a numeric value with a recognisable unit can be recovered; the largest 1\% of
29−townhouses and apartments) with a strictly positive list price and non-missing core 45+parsed lots, which are mostly multi-acre acreage strings, are treated as unparsed, and a
30−structural fields, and we trim the extreme 1\% tails of price and living area to limit the 46+missingness indicator is retained. Storey and parking counts are taken as reported and set
31−influence of data-entry errors and ultra-luxury outliers, a standard precaution in hedonic 47+to zero when absent (32\% and 27\% of listings respectively), so that their coefficients
32−work with listing data \citep{malpezzi2003hedonic}. The resulting estimation sample 48+should be read as conditional on a count being reported; both fields contain implausible
33−contains \textbf{140{,}931 dwellings}, of which 82{,}334 are houses and 57{,}857 are 49+extreme values (up to 593 storeys and 3{,}620 parking spaces) that we address in the
34−condominiums. 50+robustness analysis.
51+
52+The province of each listing is derived from the first letter of its FSA rather than from
53+the province field of the scraper, which records the regional seed of the extraction and
54+mislabels 11.7\% of listings near provincial borders (for instance, New Brunswick and
55+Ottawa-area listings seeded as Quebec). Listings whose FSA letter does not correspond to a
56+province (27 records in the territories or with invalid codes) are dropped. We restrict the
57+sample to residential dwellings (houses, condominiums, plexes, townhouses and apartments)
58+with a strictly positive asking price, non-missing living area, bedroom and bathroom
59+counts and a valid FSA, which leaves 147{,}236 listings, and we then trim the extreme 1\%
60+tails of price and living area to limit the influence of data-entry errors and ultra-luxury
61+outliers, a standard precaution with listing data \citep{malpezzi2003hedonic}. The
62+estimation sample contains 142{,}121 dwellings, of which 83{,}524 are houses, 57{,}853
63+condominiums and 744 plexes, townhouses and apartments. Asking prices range from
64+\$114{,}900 to \$2{,}998{,}800 and living areas from 46 to 465~m$^2$.
35 65
36−The dependent variable is the natural logarithm of the list price. Structural regressors 66+The dependent variable is the natural logarithm of the asking price. Structural regressors
37−are: $\ln$ living area; counts of bedrooms, full bathrooms and half bathrooms; parking 67+are the log of living area; counts of bedrooms, full bathrooms and half bathrooms; parking
38 spaces; storeys; and an indicator for the availability of lot information together with 68 spaces; storeys; and an indicator for the availability of lot information together with
39 $\ln(1+\text{lot area})$. Categorical controls comprise the dwelling type (house, 69 $\ln(1+\text{lot area})$. Categorical controls comprise the dwelling type (house,
40−apartment/condo, row/townhouse, duplex, triplex, fourplex, manufactured home, other), the 70+apartment, row or townhouse, duplex, triplex, fourplex, manufactured home, other), the
41−ownership form (freehold, condominium/strata, leasehold, etc.), and the broad listing 71+ownership form (freehold, condominium or strata, leasehold, co-operative, other, not
42−category. The neighbourhood fixed effect is the FSA; FSAs with fewer than 25 listings are 72+reported) and the broad listing category. The neighbourhood is the FSA. The sample contains
43−pooled into a province-level residual category so that each absorbed effect is estimated 73+1{,}667 distinct FSAs; the 521 FSAs with fewer than 25 listings, which together hold 5{,}385
44−from a reasonable number of observations. 74+listings (3.8\% of the sample), are pooled into one residual category per province, so that
75+the model absorbs 1{,}155 location effects: 1{,}146 individual FSAs and nine pooled
76+categories. The median absorbed FSA contains 86 listings and the mean 123. The pooled
77+categories are not neighbourhoods and we verify in Section~\ref{subsec:stability} that
78+dropping them leaves the estimates unchanged.
45 79
46 \subsection{Descriptive statistics} 80 \subsection{Descriptive statistics}
47 \label{subsec:summary_stats} 81 \label{subsec:summary_stats}
48 82
49−Table~\ref{tab:summary_stats} reports the descriptive statistics. The median dwelling 83+Table~\ref{tab:summary_stats} reports the descriptive statistics. The median dwelling is
50−lists for roughly \$565{,}000 and offers about 125~m$^2$ of living space, two full 84+listed at \$639{,}900 and offers 135~m$^2$ of living space, two full bathrooms and three
51−bathrooms and three bedrooms. Both price and price per square metre are strongly 85+bedrooms. Price and price per square metre are strongly right-skewed---means exceed medians
52−right-skewed---means exceed medians throughout---motivating the log transformation 86+throughout---which motivates the log transformation illustrated in
53−illustrated in Figure~\ref{fig:price}, whose right panel is approximately symmetric and 87+Figure~\ref{fig:price}; the distribution of the log price is close to symmetric and
54−underpins the semi-logarithmic hedonic specification. 88+underpins the semi-logarithmic specification. The lot-area column reflects the parsing
89+rules: 38\% of listings, mostly condominiums, carry no usable lot information and are coded
90+as zero, and the median parsed lot among the remainder is 690~m$^2$.
55 91
56 \input{../results/tables/summary_stats} 92 \input{../results/tables/summary_stats}
57 93
58−\begin{figure}[t]\centering 94+\begin{figure}[htbp]\centering
59 \includegraphics[width=\textwidth]{fig_price_dist.png} 95 \includegraphics[width=\textwidth]{fig_price_dist.png}
60−\caption{Distribution of list prices. Panel (a) shows the raw price (truncated at \$3M for 96+\caption{Distribution of asking prices. Panel (a) shows the raw price (truncated at \$3M for
61−readability) with the sample median marked; panel (b) shows log price, the dependent 97+readability) with the sample median marked; panel (b) shows the log price, the dependent
62−variable, which is close to symmetric.} 98+variable.}
63 \label{fig:price} 99 \label{fig:price}
64 \end{figure} 100 \end{figure}
65 101
66−The provincial composition is dominated by Ontario, Quebec, British Columbia and Alberta, 102+Ontario (55{,}897 listings), British Columbia (32{,}994), Quebec (19{,}949) and Alberta
67−which together account for the large majority of listings; the Atlantic provinces and the 103+(19{,}463) account for 90\% of the sample; Saskatchewan, Manitoba, Nova Scotia and New
68−Prairies are present but thinner, and Prince Edward Island and the territories contain no 104+Brunswick each contribute about 3{,}000 listings and Newfoundland and Labrador 1{,}274. Prince
69−listings in this snapshot. Median price per square metre ranges from roughly \$2{,}000 in 105+Edward Island and the territories are absent. Median asking prices per square metre range
70−Newfoundland and Labrador to over \$6{,}100 in British Columbia 106+from about \$2{,}000 in Newfoundland and Labrador and \$2{,}300 in New Brunswick to
71−(Figure~\ref{fig:province}), foreshadowing the dominant role of location documented below. 107+\$5{,}200 in Ontario and \$6{,}000 in British Columbia (Figure~\ref{fig:province}),
108+foreshadowing the role of location documented below.
72 109
73−\begin{figure}[t]\centering 110+\begin{figure}[htbp]\centering
74 \includegraphics[width=0.82\textwidth]{fig_province_ppm2.png} 111 \includegraphics[width=0.82\textwidth]{fig_province_ppm2.png}
75−\caption{Median price per square metre of living area by province. Grey extensions show 112+\caption{Median asking price per square metre of living area by province. Grey extensions
76−the mean--median gap, reflecting right-skew from high-value listings.} 113+show the mean--median gap, reflecting right skew from high-value listings. Provinces are
114+assigned from the FSA.}
77 \label{fig:province} 115 \label{fig:province}
78 \end{figure} 116 \end{figure}
modified paper/sections/discussion.tex +159 −114
@@ -6,131 +6,176 @@
6 6
7 \subsection{Magnitudes in the light of the literature} 7 \subsection{Magnitudes in the light of the literature}
8 8
9−\paragraph{The location share.} Our headline decomposition---structure explains 46\% of 9+\paragraph{The location share.} Our decomposition---structure and location each explaining
10−log-price variance, location a further 30 points---is a cross-sectional, listing-level 10+roughly one third of the variance of log asking prices under symmetric attribution, with
11−statement, but its magnitude aligns closely with what aggregate approaches find from the 11+location slightly ahead when province and neighbourhood are grouped---is a cross-sectional,
12−opposite direction. \citet{davis2007price} estimate that land accounts for roughly 46\% 12+listing-level statement, but its order of magnitude is consistent with what aggregate
13−of the value of the U.S. housing stock, with much higher shares in coastal metros, and 13+approaches find from the opposite direction. \citet{davis2007price} estimate that land
14−\citet{knoll2017no} attribute about 80\% of the global house-price run-up since 1950 to 14+accounts for roughly 46\% of the value of the U.S.\ housing stock, \citet{davis2008price}
15−land. Land and ``location'' are not identical objects---our FSA premia capitalize 15+and \citet{albouy2018metropolitan} document that the share ranges from under 20\% in
16−amenities and access as well as physical land scarcity 16+inland cities to over 70\% in coastal metropolitan areas, and \citet{knoll2017no}
17−\citep{cheshire1995price,albouy2016cities}---but both measurements say the same thing: 17+attribute about 80\% of the global house-price increase since 1950 to land. Land and
18−the dwelling itself is the minority component of housing value. The ×9 span of our 18+``location'' are not identical objects---our FSA premia capitalise amenities and access as
19−neighbourhood premia likewise echoes the enormous cross-city dispersion of land values 19+well as physical land scarcity \citep{cheshire1995price,albouy2016cities}, and a variance
20−documented by \citet{albouy2016cities} and is exactly the pattern predicted where supply 20+share is not a value share---but both measurements say that the dwelling itself is at most
21−constraints bind heterogeneously across locations 21+half of housing value. The tenfold span of our neighbourhood premia echoes the dispersion
22−\citep{saiz2010geographic,gyourko2013superstar}: Vancouver---sea, mountains and an 22+of metropolitan land values in \citet{albouy2018metropolitan} and the French gradients of
23−agricultural land reserve---anchors the top of our premium distribution, as 23+\citet{combes2019costs}, and it is the pattern predicted where supply constraints bind
24−superstar-city dynamics would predict. 24+heterogeneously across locations \citep{saiz2010geographic,gyourko2013superstar}:
25− 25+Vancouver, hemmed in by sea, mountains and an agricultural land reserve, anchors the top of
26−\paragraph{Structural implicit prices.} The living-area elasticity of 0.55 sits inside 26+the distribution, as superstar-city dynamics would predict.
27−the range catalogued by \citet{sirmans2005composition} across decades of published 27+
28−hedonics, and its decline from 0.66 to 0.55 as location controls tighten is the 28+The decomposition also carries a methodological message. The sequential $R^2$ ladder that
29−classic signature of omitted-locational-quality bias that within-neighbourhood designs 29+hedonic papers routinely report credits the variance shared by structure and location to
30−are built to remove \citep{kiel2008location}. The near-zero conditional bedroom 30+whichever block enters first, and in our data the two blocks share about ten percentage
31−coefficient reproduces one of the most robust findings of that meta-literature: floor 31+points. The Shapley--Owen decomposition makes the attribution rule explicit; it is cheap to
32−space, not room count, carries value. Our bathroom premium (11--15\%) is at the upper 32+compute with absorbing least squares and we recommend it whenever the relative importance
33−end of published estimates, which we attribute to bathrooms proxying for unobserved 33+of regressor blocks is itself a finding.
34−renovation status and finish quality in listing data that lack an age variable. The 34+
35−diminishing marginal elasticity of floor space (from $\sim$0.65 at 60~m$^2$ to 35+\paragraph{Structural implicit prices.} The living-area elasticity of 0.53 sits inside the
36−$\sim$0.45 at 350~m$^2$) gives parametric confirmation of the curvature that 36+range catalogued by \citet{sirmans2005composition} and the meta-analysis of
37−\citet{mcmillen2010issues} detect nonparametrically. 37+\citet{sirmans2006value}, and its decline from 0.68 to 0.53 as location controls tighten is
38− 38+the classic signature of omitted locational quality that within-neighbourhood designs are
39−\paragraph{Spatial dependence.} The 82\% reduction of Moran's~$I$ (0.46 to 0.08) speaks 39+built to remove \citep{kiel2008location}. The near-zero conditional bedroom coefficient
40−directly to the oldest empirical worry in housing hedonics 40+reproduces one of the most robust findings of that meta-literature: floor space, not room
41−\citep{dubin1988estimation,basu1998analysis}. It quantifies, for a national market, the 41+count, carries value. Our full-bathroom premium (12\% in the grand model, 16\% on houses
42−claim of \citet{bourassa2007spatial} and \citet{gibbons2012mostly} that geographic 42+with province effects) is at the upper end of published estimates; we attribute this to
43−controls---here, three-character postal geography---do most of the work that parametric 43+bathrooms proxying for unobserved renovation status and finish quality in listing data that
44−spatial-lag structures are designed to do. Our result does not make spatial econometrics 44+lack an age variable, and the declining quantile profile---0.19 log points at the first
45−redundant: the residual $I=0.08$ is within-FSA dependence that an explicit 45+decile against 0.10 at the ninth---is consistent with that proxy role being strongest in the
46−spatio-temporal model \citep{pace1998spatiotemporal,dube2013spatiotemporal} could 46+lower segment of the market. The mild diminishing marginal elasticity of floor space (from
47−exploit, particularly for prediction. It does, however, shift the burden of proof toward 47+about 0.63 at 60~m$^2$ to 0.41 at 350~m$^2$ under the quadratic, concentrated above
48−parsimony: a fixed effect per neighbourhood is transparent, imposes no weight-matrix 48+150~m$^2$ under the spline) gives parametric confirmation of the curvature that
49−assumptions, and removes five-sixths of the spatial signal. 49+\citet{mcmillen2010issues} detect nonparametrically, while its small contribution to fit
50− 50+supports the semi-log default of \citet{malpezzi2003hedonic}.
51−\paragraph{Quantile and provincial heterogeneity.} The rising size elasticity across the 51+
52−price distribution (0.56 at $\tau=0.1$ to 0.60 at $\tau=0.9$) and the rising lot 52+\paragraph{Inference.} The comparison of variance estimators speaks to the question posed by
53−elasticity mirror the distributional patterns of \citet{zietz2008determinants}, and the 53+\citet{abadie2023when}: clustering should reflect the level at which the sampling or the
54−coastal-versus-Prairies gradient in the size elasticity (0.49 in BC to 0.66 in MB) is 54+assignment of regressors is correlated. Clustering by FSA, our baseline, triples the
55−consistent with the submarket literature's core claim that implicit prices---not just 55+heteroskedasticity-robust standard errors; clustering by province multiplies them by a
56−price levels---vary across segments \citep{goodman1998housing,bourassa2003submarkets}. 56+further factor of four. The economically important implicit prices---area, full bathrooms,
57−This heterogeneity qualifies our own grand model: the absorbed intercepts allow every 57+lot---are robust to this choice, but the small half-bathroom and bedroom effects are not,
58−neighbourhood its own price \emph{level}, but the structural slopes are pooled, and 58+and we have revised their interpretation accordingly. Studies that report only
59−Section~\ref{subsec:heterogeneity} shows those slopes move within an economically 59+heteroskedasticity-robust standard errors on spatially clustered listing data will
60−meaningful band. Fully interacted (submarket-specific) coefficient systems are the 60+overstate the precision of small coefficients by a wide margin.
61−natural next step, at a substantial cost in transparency. 61+
62− 62+\paragraph{Spatial dependence.} The 87\% reduction of Moran's~$I$ speaks to the oldest
63−\paragraph{Valuation accuracy.} A held-out $R^2$ of 0.764 and a median absolute error of 63+empirical worry in housing hedonics \citep{dubin1988estimation,basu1998analysis}. It
64−15.8\% place the transparent hedonic model within the accuracy bands reported in the 64+quantifies, for a national market, the claim of \citet{bourassa2007spatial} and
65−mass-appraisal comparison literature \citep{mccluskey2013prediction} and close to the 65+\citet{gibbons2012mostly} that geographic controls---here, three-character postal
66−performance that machine-learning methods deliver on comparable tasks 66+geography---do most of the work that parametric spatial-lag structures are designed to do.
67−\citep{mullainathan2017machine}. Two caveats temper the comparison: our target is the 67+Our result does not make spatial econometrics redundant: the residual $I$ of 0.03--0.11
68−\emph{list} price rather than the transaction price, and our evaluation is restricted to 68+depending on $k$ is within-FSA dependence that an explicit spatial error model
69−neighbourhoods observed in training. Within those bounds, the result supports the 69+\citep{kelejian1998generalized} or spatio-temporal weights
70−position of \citet{clapp2003semiparametric}: most of the predictive content of 70+\citep{pace1998spatiotemporal,dube2013spatiotemporal} could exploit, particularly for
71−``black-box'' valuation lies in the location surface, which a fixed-effect design 71+prediction, and the success of the inverse-distance interpolation of neighbourhood effects
72−captures explicitly and auditably rather than implicitly. 72+in Table~\ref{tab:spatial_holdout} shows that the fixed effects themselves are spatially
73+smooth. It does, however, shift the burden of proof toward parsimony: a fixed effect per
74+neighbourhood is transparent, imposes no weight-matrix assumptions, and removes most of the
75+spatial signal.
76+
77+\paragraph{Quantile and provincial heterogeneity.} The flat size elasticity and the
78+declining bathroom premium across the price distribution are a different pattern from the
79+rising elasticities that \citet{zietz2008determinants} report for Orem, Utah, which
80+illustrates that distributional heterogeneity is market-specific. The provincial gradient
81+in the size elasticity (0.47 in Ontario and 0.49 in British Columbia against 0.66 in
82+Manitoba and 0.73 in Saskatchewan) and the failure of the national structural coefficients
83+to transfer to British Columbia are consistent with the submarket literature's core claim
84+that implicit prices, not just price levels, vary across segments
85+\citep{goodman1998housing,bourassa2003submarkets}. This heterogeneity qualifies our own
86+grand model: the absorbed intercepts allow every neighbourhood its own price level, but the
87+structural slopes are pooled, and Section~\ref{subsec:heterogeneity} shows that those
88+slopes move within an economically meaningful band. Fully interacted,
89+submarket-specific coefficient systems are the natural next step, at a cost in
90+transparency.
91+
92+\paragraph{Valuation accuracy.} A within-support MdAPE of 15.6\% places the transparent
93+hedonic model within the accuracy bands reported in the mass-appraisal comparison
94+literature \citep{mccluskey2013prediction} and close to what machine-learning methods
95+deliver on comparable tasks \citep{mullainathan2017machine}. Two caveats temper the
96+comparison. First, our target is the asking price, which sellers set with reference to the
97+same observable attributes and neighbourhood comparables that the model uses, so that the
98+accuracy of a list-price model is an upper bound on what the same specification would
99+achieve on transaction prices. Second, the spatial holdout shows that accuracy in
100+neighbourhoods absent from the training data is materially lower (MdAPE of 17\% with
101+spatial interpolation, 25\% with a provincial prior); valuation studies that report only
102+random holdouts on spatially clustered data overstate out-of-support performance
103+\citep{roberts2017cross}. Within those bounds, the result supports the position of
104+\citet{clapp2003semiparametric}: most of the predictive content of ``black-box'' valuation
105+lies in the location surface, which a fixed-effect design captures explicitly and auditably.
73 106
74 \subsection{Points of tension with prior findings} 107 \subsection{Points of tension with prior findings}
75 108
76−Three tensions deserve explicit statement. First, the submarket literature sometimes 109+Three tensions deserve explicit statement. First, the submarket literature sometimes finds
77−finds that \emph{how} submarkets are defined matters little for prediction 110+that \emph{how} submarkets are defined matters little for prediction
78−\citep{bourassa2003submarkets}; our single-country evidence cannot adjudicate the 111+\citep{bourassa2003submarkets}; our single-country evidence cannot adjudicate the optimal
79−optimal geography, and FSAs---postal artifacts---are surely not it. The 0.08 residual 112+geography, and FSAs---postal artefacts---are surely not it. The residual Moran's~$I$ and the
80−Moran's~$I$ suggests finer geography would still add value. Second, 113+smoothness of the fixed effects across adjacent FSAs both suggest that a finer or
81−\citet{kuminoff2010which} warn that hedonic estimates can be fragile to specification; 114+better-shaped geography would add value. Second, \citet{kuminoff2010which} and
82−our robustness battery (six samples, quantiles, quadratic terms) addresses the 115+\citet{bishop2020best} warn that hedonic estimates can be fragile to specification; our
83−first-stage version of this concern, but any second-stage welfare use of our premia 116+robustness battery (eight samples, quantiles, quadratic and spline terms, four variance
84−would inherit the well-known identification problems \citep{epple1987hedonic}. Third, 117+estimators) addresses the first-stage version of this concern, but any second-stage welfare
85−our LOPO exercise shows structural prices transfer imperfectly (mean held-out $R^2$ of 118+use of our premia would inherit the identification problems of \citet{epple1987hedonic}.
86−0.36, negative for Alberta), which cuts against reading the grand model's pooled slopes 119+Third, the leave-one-province-out exercise shows that structural prices transfer
87−as universal constants---and aligns with the heterogeneity that segmented-market models 120+imperfectly (mean held-out $R^2$ of 0.34, negative for British Columbia), which cuts against
88−predict \citep{goodman1998housing}. 121+reading the grand model's pooled slopes as universal constants and aligns with the
122+heterogeneity that segmented-market models predict \citep{goodman1998housing}.
89 123
90 \subsection{Implications} 124 \subsection{Implications}
91 125
92 For \emph{assessment and property taxation}, the decomposition implies that 126 For \emph{assessment and property taxation}, the decomposition implies that
93−neighbourhood-level value---not structure---is where most of the assessable base lives, 127+neighbourhood-level value is at least as large a component of the assessable base as
94−so assessment uniformity depends first on getting location surfaces right; the FSA 128+structure, so that assessment uniformity depends first on getting location surfaces right;
95−premia we publish are directly usable as such a surface. For \emph{index construction}, 129+the FSA premia we publish, and their spatial interpolability, are directly usable as such a
96−the stability of structural implicit prices across provinces supports pooled hedonic 130+surface. For \emph{index construction}, the broad stability of structural implicit prices
97−indices with local intercepts \citep{hill2013hedonic}, while the quantile results 131+across most provinces supports pooled hedonic indices with local intercepts
98−caution that constant-quality adjustment differs across market segments. For 132+\citep{hill2013hedonic,hill2018geospatial}, while the British Columbia result and the
99−\emph{automated valuation}, the results quantify the price of transparency: a fully 133+quantile profile of the bathroom premium caution that constant-quality adjustment differs
100−inspectable model concedes little accuracy on within-support predictions, echoing 134+across markets and segments. For \emph{automated valuation}, the results quantify the price
101−\citet{mullainathan2017machine}'s point that prediction tasks discipline, rather than 135+of transparency: a fully inspectable model concedes little accuracy on within-support
102−replace, economic structure. For \emph{housing policy}, a ×9 neighbourhood premium span 136+predictions, and its out-of-support accuracy depends on how the location effect is
103−within one country, concentrated in two metropolitan systems, is the observable imprint 137+extrapolated rather than on the structural coefficients. For \emph{housing policy}, a
104−of restricted supply against agglomeration demand 138+tenfold neighbourhood premium span within one country, concentrated in two metropolitan
105−\citep{saiz2010geographic,gyourko2013superstar,combes2015empirics}; policies that expand 139+systems, is the observable imprint of restricted supply against agglomeration demand
106−supply where premia are highest attack the decomposition's dominant term. 140+\citep{saiz2010geographic,gyourko2013superstar,combes2019costs}; policies that expand supply
141+where premia are highest attack the term of the decomposition that is largest in the most
142+expensive markets.
107 143
108 \subsection{Limitations} 144 \subsection{Limitations}
109 145
110−Five limitations bound the interpretation. (i)~Prices are \emph{list} prices: sellers 146+Six limitations bound the interpretation. (i)~Prices are asking prices. Sellers set them
111−set them strategically \citep{genesove2001loss} and they interact with search and 147+strategically \citep{horowitz1992role,genesove2001loss}, they trade off against time on the
112−bargaining \citep{han2015microstructure}, so implicit prices measured on listings can 148+market \citep{anglin2003tradeoff}, and the eventual transaction price emerges from search and
113−differ from transaction-based ones, especially in tight markets. (ii)~The data lack year 149+bargaining \citep{merlo2004bargaining,genesove2012search,han2016what}. Implicit list prices
114−of construction, renovation status and interior quality; the neighbourhood effects 150+can therefore differ from implicit transaction prices, especially where the list-to-sale
151+ratio varies systematically with attributes or with market tightness---for instance if
152+overpricing is more common for large dwellings or in slow markets---and the composition of
153+active listings over-represents dwellings that have been slow to sell. (ii)~The data lack
154+year of construction, renovation status and interior quality; the neighbourhood effects
115 absorb the cross-neighbourhood component of this unobserved quality, but the within-FSA 155 absorb the cross-neighbourhood component of this unobserved quality, but the within-FSA
116−structural estimates remain exposed to within-neighbourhood quality sorting. 156+structural estimates remain exposed to within-neighbourhood sorting, and the bathroom
117−(iii)~Lot information is sparse and noisily parsed from free text, limiting the 157+premium in particular is likely to carry some of it. (iii)~Several fields are noisy: lot
118−precision of the land-versus-structure margin at the listing level. (iv)~The analysis is 158+information is sparse and parsed from free text, storey and parking counts contain
119−a single cross-section: it characterises the spatial and structural \emph{level} of 159+implausible values and are zero when unreported, and the province variable had to be
120−prices, not their dynamics, and cannot speak to the efficiency questions of the 160+reconstructed from the postal code. (iv)~The analysis is a single cross-section: it
121−repeat-sales tradition \citep{case1989efficiency}. (v)~FSA boundaries are postal 161+characterises the spatial and structural level of asking prices at one moment, not their
122−conveniences; premia estimated at this resolution average over genuinely finer 162+dynamics, and cannot speak to the efficiency questions of the repeat-sales tradition
123−neighbourhood variation, as the residual spatial autocorrelation confirms. 163+\citep{case1989efficiency}. (v)~FSA boundaries are postal conveniences; premia estimated at
164+this resolution average over genuinely finer neighbourhood variation, as the residual
165+spatial autocorrelation confirms, and the nine pooled residual categories are not
166+neighbourhoods at all. (vi)~The sample is a snapshot of one listing platform; coverage of
167+rural areas, of private sales and of new construction sold off-plan is unknown.
124 168
125 \subsection{Future work} 169 \subsection{Future work}
126 170
127−The natural agenda follows the limitations: linking listings to closing prices and 171+The agenda follows the limitations: linking listings to closing prices and time on the
128−time-on-market to estimate the list-to-sale wedge \citep{genesove2001loss,han2015microstructure}; 172+market to estimate the list-to-sale wedge attribute by attribute
129−enriching the attribute set with age and quality; decomposing the neighbourhood premia 173+\citep{anglin2003tradeoff,han2016what}; enriching the attribute set with age and quality;
130−into capitalized amenities---schools, transit, environmental quality---in the 174+decomposing the neighbourhood premia into capitalised amenities---schools, transit,
131−quasi-experimental tradition \citep{black1999better,chay2005does,linden2008estimates}; 175+environmental quality---in the quasi-experimental tradition
132−modelling the residual within-FSA dependence with spatio-temporal structure 176+\citep{black1999better,chay2005does,linden2008estimates}; modelling the residual
133−\citep{dube2013spatiotemporal}; extending the cross-section to a panel to study 177+within-FSA dependence and the spatial smoothness of the fixed effects with an explicit
134−dynamics and policy incidence; and estimating submarket-specific coefficient systems to 178+spatial structure \citep{kelejian1998generalized,dube2013spatiotemporal}; extending the
135−map the heterogeneity that our provincial results only sketch 179+cross-section to a panel of snapshots to study dynamics and policy incidence; and estimating
136−\citep{goodman1998housing,bourassa2003submarkets}. 180+submarket-specific coefficient systems to map the heterogeneity that our provincial results
181+only sketch \citep{goodman1998housing,bourassa2003submarkets}.
modified paper/sections/introduction.tex +99 −80
@@ -4,90 +4,109 @@
4 \label{sec:introduction} 4 \label{sec:introduction}
5 % ============================================================================ 5 % ============================================================================
6 6
7−Housing is the largest asset class on household balance sheets and the collateral behind 7+Housing is the largest asset on most household balance sheets and the collateral behind
8−most household debt, and its price is the single most consequential relative price most 8+most household debt, and its price is the most consequential relative price that most
9−families ever face. Yet a dwelling is the archetypal heterogeneous good: no two houses 9+families ever face. A dwelling is also the archetypal heterogeneous good: no two houses are
10−are identical, and the most important attribute---\emph{where the dwelling stands}---is 10+identical, and its most important attribute---\emph{where it stands}---cannot be read off a
11−not a scalar that can be read off a listing sheet. The hedonic approach pioneered by 11+listing sheet as a scalar. The hedonic approach of \citet{lancaster1966new} and
12−\citet{lancaster1966new} and \citet{rosen1974hedonic} resolves this heterogeneity by 12+\citet{rosen1974hedonic} resolves this heterogeneity by treating the dwelling as a bundle of
13−treating the dwelling as a bundle of attributes, each commanding an implicit price 13+attributes, each of which commands an implicit price determined in equilibrium by the
14−determined in equilibrium by the interaction of buyers' marginal willingness to pay and 14+interaction of buyers' bid functions and sellers' offer functions. Regressing the log price
15−sellers' marginal cost of supply. Regressing the (log) price of a dwelling on its 15+of a dwelling on its measurable characteristics recovers these implicit prices, and the
16−measurable characteristics recovers these implicit prices, and the resulting estimates 16+resulting hedonic price function is the empirical backbone of constant-quality house-price
17−provide the empirical backbone for constant-quality house-price indices 17+indices \citep{bailey1963regression,hill2013hedonic}, mass appraisal
18−\citep{bailey1963regression,hill2013hedonic}, property assessment and mass appraisal 18+\citep{mccluskey2013prediction}, mortgage collateral valuation, and the welfare analysis of
19−\citep{mccluskey2013prediction}, mortgage valuation, and the welfare analysis of local 19+local amenities \citep{black1999better,chay2005does,bishop2020best}.
20−amenities \citep{black1999better,chay2005does}.
21 20
22−How much of a home's value is the structure, and how much is the location? The question 21+How much of a home's value is the structure, and how much is the location? The question is
23−is old---it is the empirical content of the realtor's adage ``location, location, 22+old---it is the empirical content of the realtor's adage ``location, location, location''
24−location'' \citep{kiel2008location}---but its answer matters far beyond folklore. 23+\citep{kiel2008location}---but its answer matters well beyond folklore. Assessment
25−Assessment authorities must apportion value between land and improvements; property-tax 24+authorities must apportion value between land and improvements; the incidence of property
26−reform hinges on the incidence of the land component; the macro literature has shown 25+taxation depends on the land component; the macro literature attributes most of the level
27−that land, not structure, drives both the level and the growth of aggregate housing 26+and growth of aggregate housing wealth to land rather than structure
28−wealth \citep{davis2007price,knoll2017no}; and the dispersion of location values across 27+\citep{davis2007price,knoll2017no}; and the dispersion of location values across cities is
29−cities is the fingerprint of supply constraints and agglomeration 28+the imprint of supply constraints and agglomeration
30−\citep{saiz2010geographic,gyourko2013superstar,combes2015empirics}. Credible answers 29+\citep{saiz2010geographic,gyourko2013superstar,combes2019costs}. A credible answer requires
31−require holding the structural bundle fixed while letting location vary---precisely what 30+holding the structural bundle fixed while letting location vary, which is what a hedonic
32−a hedonic model with fine geographic fixed effects delivers. 31+price function with fine geographic fixed effects delivers.
33 32
34 This paper estimates such a model for the Canadian residential market at national scale. 33 This paper estimates such a model for the Canadian residential market at national scale.
35−Using a cross-section of \textbf{140{,}931} active MLS listings spanning the nine 34+Using a cross-section of 142{,}121 active MLS listings from the nine provinces present in
36−provinces present in the data---from British Columbia to Newfoundland and Labrador---we 35+the data, we relate the log list price to structural attributes, dwelling type and ownership
37−decompose dwelling prices into structural attributes, dwelling type and ownership form, 36+form, and 1{,}155 neighbourhood fixed effects defined at the Forward Sortation Area (FSA)
38−and a rich set of \textbf{1{,}153 neighbourhood fixed effects} defined at the Forward 37+level, the first three characters of the postal code. The Canadian hedonic tradition has
39−Sortation Area (FSA) level. To our knowledge this is among the most geographically 38+remained largely metropolitan in scope
40−comprehensive single-equation hedonic exercises assembled for Canada, where the hedonic 39+\citep{desrosiers1996shopping,haider2000effects,theriault2003modelling,dube2013commuter},
41−tradition has remained largely metropolitan in scope 40+and national evidence has been confined to city-level price indices
42−\citep{desrosiers1996shopping,haider2000effects}. It is made feasible by an absorbing 41+\citep{allen2009canadian,hossain2009determinants}; to our knowledge no previous study
43−least-squares estimator in the lineage of \citet{abowd1999high} that sweeps out the 42+estimates a single listing-level hedonic price function spanning the Canadian market. The
44−high-dimensional location effects without materialising thousands of dummy variables 43+exercise is made feasible by an absorbing least-squares estimator in the lineage of
44+\citet{abowd1999high} that sweeps out the high-dimensional location effects without
45+materialising more than a thousand dummy variables
45 \citep{guimaraes2010simple,correia2017reghdfe}. 46 \citep{guimaraes2010simple,correia2017reghdfe}.
46 47
47−Our main findings can be summarised as follows. The purely structural model explains 46\% 48+Two features of the design deserve emphasis at the outset, because they govern the
48−of the variation in log prices; adding province fixed effects raises this to 57\%, and 49+interpretation of every number that follows. First, the dependent variable is the
49−replacing them with FSA fixed effects lifts it to \textbf{77\%}. Neighbourhood location 50+\emph{asking} price of an active listing, not a transaction price. List prices are set
50−\emph{alone} therefore accounts for roughly thirty percentage points of explanatory 51+strategically by sellers and interact with search and bargaining
51−power---more than all structural attributes combined, and a listing-level counterpart to 52+\citep{horowitz1992role,genesove2001loss,merlo2004bargaining,han2016what}, so the implicit
52−the large land shares found in aggregate data \citep{davis2007price,knoll2017no}. 53+prices we estimate describe how sellers and their agents price attributes when they bring a
53−Conditional on location, the living-area elasticity is estimated at 0.51--0.62: a 10\% 54+dwelling to market. We refer to them as implicit \emph{list} prices wherever the distinction
54−larger dwelling sells for about 5--6\% more. Each additional full bathroom commands a 55+matters and discuss the resulting wedge in Section~\ref{sec:discussion}. Second, the
55−premium of 11--15\%, whereas the number of bedrooms is economically negligible once floor 56+neighbourhood fixed effects are a device for measurement, not for causal identification:
56−space is held fixed---a recurrent finding in the hedonic literature 57+they absorb every location-specific amenity, observed or not, so that structural implicit
57−\citep{sirmans2005composition}. The implicit prices are remarkably stable across 58+prices are identified from within-neighbourhood variation, and the fixed effects themselves
58−alternative samples, trimming rules and dwelling types, and the model attains an 59+summarise the capitalised value of location without disentangling its components.
59−out-of-sample $R^2$ of 0.76 with a median absolute valuation error of 16\%, a level of
60−accuracy competitive with the mass-appraisal benchmarks reported in the valuation
61−literature \citep{mccluskey2013prediction,mullainathan2017machine}. We map the estimated
62−neighbourhood premia and show that the highest-valued FSAs---concentrated in the City of
63−Vancouver and the Greater Toronto Area---trade at more than triple the national-median
64−level net of structure. A battery of additional analyses sharpens the picture: the
65−neighbourhood effects absorb 82\% of the spatial autocorrelation in raw residuals
66−(Moran's~$I$ falls from 0.46 to 0.08); floor space exhibits clear diminishing returns;
67−the location component of price decays with distance to the nearest major metropolis, as
68−the monocentric tradition predicts \citep{alonso1964location,muth1969cities,mills1967aggregative};
69−and the implicit prices vary sensibly across the price distribution and across provinces
70−while transferring well out-of-region.
71 60
72−The contribution is threefold. \emph{First}, we provide the first (to our knowledge) 61+Our findings can be summarised as follows. A model with structural attributes alone explains
73−listing-level structure-versus-location decomposition spanning the entire Canadian 62+44\% of the variation in log list prices across all residential dwellings; adding dwelling
74−market, quantifying the neighbourhood as its single largest priced component. 63+type, ownership and 1{,}155 neighbourhood effects raises the share to 78\%. Because larger
75−\emph{Second}, we bring the high-dimensional fixed-effects technology of modern applied 64+and better-equipped dwellings are not randomly located, the attribution of the explained
76−microeconomics \citep{abowd1999high,correia2017reghdfe} to a national housing 65+variance to structure and location depends on the order in which the blocks are entered. We
77−cross-section and validate the design directly, showing that more than a thousand 66+therefore complement the sequential specification ladder with a Shapley--Owen
78−absorbed neighbourhood intercepts eliminate the bulk of spatial dependence that 67+decomposition, which splits the shared variance symmetrically
79−parametric spatial models are built to address 68+\citep{israeli2007shapley,huettner2012axiomatic}: structure receives about 34 percentage
80−\citep{dubin1988estimation,basu1998analysis,gibbons2012mostly}. \emph{Third}, we supply a 69+points and location about 36, so that the two are of comparable importance and the
81−transparent accuracy benchmark for the automated-valuation debate: every coefficient of 70+neighbourhood is the single largest block once province and neighbourhood are grouped. The
82−the model is inspectable, yet its held-out performance is competitive with the 71+sequential ladder, which credits the overlap to whichever block enters first, assigns 44
83−mass-appraisal standards reported in the literature 72+points to structure and 32 to location. Conditional on location, the living-area
84−\citep{clapp2003semiparametric,mccluskey2013prediction}. 73+elasticity is 0.53, so that a 10\% larger dwelling is listed at about 5\% more; each full
74+bathroom adds about 12\%; and the number of bedrooms is economically negligible once floor
75+space is held fixed, a recurrent finding of the hedonic literature
76+\citep{sirmans2005composition,sirmans2006value}. These implicit prices are stable across
77+eight alternative samples and specifications, and the area and bathroom effects survive a
78+province-level wild-cluster bootstrap, although the smaller half-bathroom and bedroom
79+effects do not. The neighbourhood effects remove 87\% of the spatial autocorrelation in
80+residuals (Moran's~$I$ falls from 0.50 to 0.06). Out of sample, the model values held-out
81+listings in neighbourhoods observed in training with an $R^2$ of 0.77 and a median absolute
82+percentage error (MdAPE) of 15.6\%; when entire neighbourhoods are held out and their
83+effects are interpolated from neighbouring FSAs, the $R^2$ is 0.74 and the MdAPE 17\%.
84+Floor space exhibits mild diminishing returns, the location premium declines by about 5.5\%
85+per doubling of distance to the nearest metropolitan centre, and implicit prices vary across
86+the price distribution and across provinces. The neighbourhood premia, net of structure,
87+span a factor of about ten between the most expensive FSAs---on Vancouver's west side, in
88+Whistler and in West Vancouver---and the least expensive, in rural Newfoundland,
89+Saskatchewan and Manitoba.
85 90
86−The remainder of the paper is organised as follows. Section~\ref{sec:literature} 91+The contribution is threefold. First, we provide a listing-level decomposition of Canadian
87−positions the paper in six related literatures. Section~\ref{sec:data} describes the 92+housing value into structure and location that spans the entire national market and whose
88−data and variable construction. Section~\ref{sec:methodology} presents the empirical 93+attribution rule is made explicit; we show that the familiar ``location dominates''
89−strategy. Section~\ref{sec:results} reports the main results. 94+statement holds under a symmetric attribution but not under a structure-first sequential
90−Section~\ref{sec:robustness} provides robustness checks, heterogeneity analyses, and 95+one, and we quantify the overlap. Second, we bring the high-dimensional fixed-effects
91−out-of-sample validation. Section~\ref{sec:discussion} interprets the findings against 96+technology of applied microeconomics to a national housing cross-section and validate it
92−the literature and discusses implications, limitations and future work. 97+directly, documenting how much spatial dependence more than a thousand absorbed
93−Section~\ref{sec:conclusion} concludes. 98+neighbourhood intercepts remove and how sensitive inference is to the level of clustering.
99+Third, we supply a transparent accuracy benchmark for the automated-valuation debate,
100+distinguishing predictive accuracy within the spatial support of the training data from
101+accuracy in neighbourhoods never observed, a distinction that random holdouts conceal
102+\citep{roberts2017cross}.
103+
104+The remainder of the paper is organised as follows. Section~\ref{sec:literature} positions
105+the paper in the related literatures. Section~\ref{sec:data} describes the data and the
106+construction of the estimation sample. Section~\ref{sec:methodology} presents the empirical
107+strategy, including the decomposition and inference procedures. Section~\ref{sec:results}
108+reports the main results and Section~\ref{sec:robustness} the robustness, heterogeneity and
109+validation analyses. Section~\ref{sec:discussion} interprets the findings against the
110+literature and discusses limitations; Section~\ref{sec:conclusion} concludes. The appendix
111+details the variable construction and reconciles the present estimates with the May 2026
112+version of this paper.
modified paper/sections/literature.tex +161 −136
@@ -4,155 +4,180 @@
4 \label{sec:literature} 4 \label{sec:literature}
5 % ============================================================================ 5 % ============================================================================
6 6
7−This paper sits at the intersection of six literatures: the hedonic framework and its 7+The paper draws on, and speaks to, six literatures: the hedonic framework and its
8−identification; functional form and distributional heterogeneity in housing hedonics; 8+identification; functional form and distributional heterogeneity in housing hedonics; the
9−the treatment of space---submarkets, spatial econometrics and fixed effects; the theory 9+treatment of space through submarkets, spatial econometrics and fixed effects; the theory of
10−of amenity capitalization; urban spatial structure and the land share of housing value; 10+amenity capitalisation; urban spatial structure and the land share of housing value; and
11−and property valuation, from price indices to automated valuation models. We review each 11+valuation, from price indices to automated valuation models. A final subsection reviews the
12−in turn and state where the present study enters. 12+Canadian evidence. Each subsection closes by stating where the present study enters.
13 13
14 \subsection{The hedonic framework and its identification} 14 \subsection{The hedonic framework and its identification}
15 15
16 The hedonic method has two intellectual roots. \citet{lancaster1966new} recast consumer 16 The hedonic method has two intellectual roots. \citet{lancaster1966new} recast consumer
17−theory in terms of the characteristics embodied in goods rather than the goods themselves, 17+theory in terms of the characteristics embodied in goods, while \citet{court1939hedonic} and
18−while \citet{court1939hedonic} and \citet{griliches1961hedonic} developed the empirical 18+\citet{griliches1961hedonic} developed the empirical machinery of quality-adjusted price
19−machinery of quality-adjusted price indices. \citet{rosen1974hedonic} unified these ideas 19+indices. \citet{rosen1974hedonic} unified these ideas in an equilibrium model in which the
20−in an equilibrium model in which the observed price schedule traces out the envelope of 20+observed price schedule is the envelope of buyers' bid functions and sellers' offer
21−buyers' bid functions and sellers' offer functions; its gradient with respect to a 21+functions, so that its gradient with respect to a characteristic identifies the implicit
22−characteristic identifies, at the margin, the implicit price of that characteristic. A 22+price of that characteristic at the margin. \citet{sheppard1999hedonic} surveys the
23−subsequent literature clarified exactly what the second stage---recovering preference 23+subsequent housing applications. A later literature clarified what the second
24−parameters from the implicit prices---can and cannot deliver. \citet{epple1987hedonic} 24+stage---recovering preference parameters from implicit prices---can and cannot deliver.
25−formalised the simultaneity problem that plagues second-stage demand estimation; 25+\citet{epple1987hedonic} formalised the simultaneity problem of second-stage demand
26−\citet{ekeland2004identification} show that nonlinearity of the hedonic price function 26+estimation; \citet{ekeland2004identification} showed that nonlinearity of the price function
27−aids identification of preferences; \citet{bajari2005hedonic} develop a tractable demand 27+aids identification; \citet{bajari2005hedonic} developed a tractable demand estimator with
28−estimator with unobserved product characteristics; and \citet{kuminoff2010which} document 28+unobserved product characteristics; \citet{bishop2019estimating} proposed a second-stage
29−how sensitive welfare estimates are to specification. We deliberately remain at the first 29+estimator that dispenses with instruments; and \citet{kuminoff2010which} and
30−stage and target the implicit-price schedule itself, which is the relevant object for 30+\citet{bishop2020best} documented how sensitive welfare estimates are to the specification
31−valuation, assessment and index construction, and which is identified under much weaker 31+of the first stage and codified best practice, including the use of fine spatial fixed
32−assumptions than the underlying preferences. 32+effects. We remain deliberately at the first stage and target the implicit-price schedule
33+itself, which is the relevant object for valuation, assessment and index construction and
34+is identified under much weaker assumptions than the underlying preferences.
33 35
34 \subsection{Functional form and heterogeneity in the implicit prices} 36 \subsection{Functional form and heterogeneity in the implicit prices}
35 37
36−A large applied literature studies which attributes belong in a housing hedonic and what 38+A large applied literature asks which attributes belong in a housing hedonic and which
37−functional form to impose. \citet{sirmans2005composition} catalogue the regressors used 39+functional form to impose. \citet{sirmans2005composition} catalogue the regressors used in
38−in decades of published models and document the central role of living area, bathrooms, 40+decades of published models and document the central role of living area, bathrooms, lot
39−lot size, age and location; their meta-tabulation also shows that bedroom coefficients 41+size, age and location; their tabulation also shows that bedroom coefficients are often
40−are frequently small or negative once floor area is controlled---the pattern we recover 42+small or negative once floor area is controlled, and the meta-analysis of
41−for Canada. \citet{malpezzi2003hedonic} surveys functional-form choices and argues that 43+\citet{sirmans2006value} confirms that the implicit prices of area and bathrooms are among
42−the semi-logarithmic specification---log price on linear (or log) characteristics---is a 44+the most stable in the literature. \citet{malpezzi2003hedonic} argues that the
43−robust default: it accommodates the right-skew of prices, yields coefficients 45+semi-logarithmic specification is a robust default: it accommodates the right skew of
44−interpretable as approximate percentage effects \citep{halvorsen1980interpretation}, and 46+prices, yields coefficients that are approximately proportional effects, and mitigates
45−mitigates heteroskedasticity. We adopt this specification throughout. A complementary 47+heteroskedasticity. The interpretation of its coefficients requires care, however: for
46−literature relaxes its restrictions in two directions. \citet{mcmillen2010issues} 48+indicator variables the proportional effect is $e^{\gamma}-1$ rather than $\gamma$
47−estimate fully nonparametric hedonic surfaces and show that parametric functional forms 49+\citep{halvorsen1980interpretation}, and the sampling variance of $\hat\gamma$ biases even
48−can mask economically meaningful curvature---a concern we address directly with a 50+that transformation, which \citet{kennedy1981estimation} corrects. We adopt the semi-log
49−quadratic-in-log-area specification that reveals diminishing returns to floor space. 51+form and report corrected percentage effects. A complementary literature relaxes the
50−Quantile-regression approaches \citep{koenker1978regression,zietz2008determinants} show 52+functional form. \citet{mcmillen2010issues} estimate nonparametric hedonic surfaces and show
51−that implicit prices differ systematically along the price distribution, so that a single 53+that parametric forms can mask economically meaningful curvature, a concern we address
52−conditional-mean coefficient can be an incomplete summary; we document this for the 54+with quadratic and spline specifications in floor space. Quantile-regression approaches
53−Canadian market in Section~\ref{subsec:quantile}. \emph{Gap:} these strands are almost 55+\citep{koenker1978regression,zietz2008determinants} show that implicit prices differ
54−exclusively metropolitan or regional in scope; national-scale evidence on functional form 56+systematically along the price distribution, so that a conditional-mean coefficient is an
55−and distributional heterogeneity, estimated on a single consistent dataset, is rare. 57+incomplete summary; we document this for Canada in Section~\ref{subsec:quantile}. These
58+strands are almost exclusively metropolitan or regional in scope; national evidence on
59+functional form and distributional heterogeneity estimated on a single consistent dataset
60+is rare.
56 61
57 \subsection{Space in housing models: submarkets, spatial econometrics, fixed effects} 62 \subsection{Space in housing models: submarkets, spatial econometrics, fixed effects}
58 63
59−Because housing is immobile, location is intrinsic to its value, and unobserved local 64+Because housing is immobile, unobserved local amenities induce strong spatial dependence in
60−amenities induce strong spatial dependence in prices. The empirical importance of this 65+prices. \citet{dubin1988estimation} showed that spatially autocorrelated errors distort
61−dependence is long established: \citet{dubin1988estimation} showed that ignoring 66+hedonic inference and \citet{basu1998analysis} documented pervasive residual autocorrelation
62−spatially autocorrelated errors distorts hedonic inference, and \citet{basu1998analysis} 67+in Dallas transactions. \citet{can1992specification} and \citet{anselin1988spatial}
63−documented pervasive residual autocorrelation in Dallas transactions. 68+formalised spatial dependence in hedonic models, \citet{kelejian1998generalized} provided
64−\citet{can1992specification} and \citet{anselin1988spatial} formalised spatial 69+feasible estimators for spatial autoregressive specifications, and
65−autocorrelation in hedonic errors, while \citet{pace1998spatiotemporal} and, in the 70+\citet{kelejian2001asymptotic} derived the asymptotic distribution of the Moran statistic
66−Canadian context, \citet{dube2013spatiotemporal} developed spatio-temporal weight-matrix 71+that we use as a diagnostic. \citet{pace1998spatiotemporal} and, in the Canadian context,
67−approaches. A parallel strand argues that housing markets are segmented into 72+\citet{dube2013spatiotemporal} developed spatio-temporal weight matrices. A parallel strand
68−\emph{submarkets} within which prices are set: \citet{goodman1998housing} formalise 73+argues that housing markets are segmented into submarkets: \citet{goodman1998housing}
69−market segmentation tests, and \citet{bourassa2003submarkets} show that accounting for 74+formalise segmentation tests, and \citet{bourassa2003submarkets} show that accounting for
70−submarkets materially improves prediction accuracy---with the practical finding that 75+submarkets improves prediction, with the practical finding that simple geographic
71−simple geographic definitions perform as well as statistically derived ones. 76+definitions perform as well as statistically derived ones. \citet{bourassa2007spatial} and
72−\citet{bourassa2007spatial} and \citet{case2004modeling} compare these approaches 77+\citet{case2004modeling} compare these approaches and conclude that geographic submarket
73−head-to-head and conclude that geographic submarket controls capture most of what 78+controls capture most of what parametric spatial models capture at a fraction of the
74−parametric spatial models capture, at a fraction of the complexity. 79+complexity. More recently, \citet{hill2018geospatial} show that geospatial splines improve
75− 80+hedonic imputation indices, and \citet{bogin2019local} construct price indices at the ZIP
76−Our approach takes this conclusion to its logical end: rather than imposing a spatial 81+code level, a geography comparable to the FSA.
77−weight matrix, we absorb a fixed effect for each of 1{,}153 FSA neighbourhoods, allowing 82+
78−the data to assign an arbitrary price level to each area and identifying structural 83+Our approach takes the submarket conclusion to its logical end: rather than imposing a
79−implicit prices from \emph{within-neighbourhood} variation. This is the housing analogue 84+spatial weight matrix, we absorb a fixed effect for each of 1{,}155 neighbourhoods and
80−of the high-dimensional fixed-effects designs pioneered in labour economics by 85+identify structural implicit prices from within-neighbourhood variation. This is the housing
81−\citet{abowd1999high} and now standard in applied microeconomics, with computation 86+analogue of the high-dimensional fixed-effects designs pioneered in labour economics by
82−following \citet{guimaraes2010simple} and \citet{correia2017reghdfe} and inference 87+\citet{abowd1999high}, with computation following \citet{guimaraes2010simple} and
83−clustered at the neighbourhood level \citep{cameron2015practitioner}. The choice also 88+\citet{correia2017reghdfe}. The choice speaks to a methodological debate:
84−speaks to a methodological debate: \citet{gibbons2012mostly} caution that parametric 89+\citet{gibbons2012mostly} argue that parametric spatial-lag models are often hard to
85−spatial-lag models are often hard to interpret causally and that flexible fixed effects 90+interpret and that flexible fixed effects are frequently preferable, while
86−are frequently preferable, while \citet{lesage2009introduction} develop the 91+\citet{lesage2009introduction} develop the spatial-autoregressive alternative. We side with
87−spatial-autoregressive alternative. We side with the fixed-effects approach but validate 92+the fixed-effects approach but validate it, testing for residual spatial autocorrelation
88−it directly, testing for residual spatial autocorrelation with Moran's~$I$ 93+with Moran's~$I$ \citep{moran1950notes} before and after absorbing the neighbourhood
89−\citep{moran1950notes} before and after absorbing the neighbourhood effects. 94+effects. Inference in such designs raises its own questions: \citet{cameron2015practitioner}
90−\emph{Gap:} submarket and spatial-fixed-effect studies are overwhelmingly single-city; 95+and \citet{abadie2023when} discuss the choice of clustering level, and
91−we are not aware of a prior implementation at the scale of an entire national market 96+\citet{mackinnon2017wild} the wild-cluster bootstrap when clusters are few; we report
92−with more than a thousand absorbed neighbourhoods. 97+alternative variance estimators and a province-level bootstrap. Submarket and
93− 98+spatial-fixed-effect studies are overwhelmingly single-city; we are not aware of a prior
94−\subsection{Amenity capitalization} 99+implementation at the scale of an entire national market with more than a thousand absorbed
95− 100+neighbourhoods.
96−Why should a neighbourhood intercept capture economic value at all? The theoretical 101+
97−answer runs from \citet{tiebout1956pure}, in which households sort across jurisdictions 102+\subsection{Amenity capitalisation}
98−according to local public goods, through \citet{oates1969effects}, who first measured 103+
99−the capitalization of taxes and school spending into house prices, to 104+Why should a neighbourhood intercept measure economic value? The theoretical answer runs
100−\citet{roback1982wages}, who embedded amenity capitalization in a general spatial 105+from \citet{tiebout1956pure}, in which households sort across jurisdictions according to
101−equilibrium of wages and rents. Quasi-experimental hedonic studies have since measured 106+local public goods, through \citet{oates1969effects}, who first measured the capitalisation
102−the capitalization of specific amenities: school quality \citep{black1999better}, air 107+of taxes and school spending into house prices, to \citet{roback1982wages}, who embedded
103−quality \citep{chay2005does} and local crime risk \citep{linden2008estimates}, while 108+amenity capitalisation in a spatial equilibrium of wages and rents. Quasi-experimental
104−\citet{cheshire1995price} and \citet{albouy2016cities} quantify the total land-value 109+hedonic studies have since measured the capitalisation of specific amenities: school
105−content of local amenities. Our neighbourhood fixed effects deliberately bundle all such 110+quality \citep{black1999better}, air quality \citep{chay2005does} and local crime risk
106−capitalized amenities into a single FSA-level premium rather than attempting to 111+\citep{linden2008estimates}, while \citet{cheshire1995price} and \citet{albouy2016cities}
107−disentangle them; the estimated premium is therefore an upper envelope on the value of 112+quantify the total land-value content of local amenities. Our neighbourhood fixed effects
108−location that future work can decompose amenity by amenity. 113+deliberately bundle all capitalised amenities into a single FSA-level premium rather than
114+attempting to disentangle them; the estimated premium is therefore a composite that future
115+work can decompose amenity by amenity.
109 116
110 \subsection{Urban spatial structure and the land share of housing value} 117 \subsection{Urban spatial structure and the land share of housing value}
111 118
112 The monocentric tradition of \citet{alonso1964location}, \citet{muth1969cities} and 119 The monocentric tradition of \citet{alonso1964location}, \citet{muth1969cities} and
113 \citet{mills1967aggregative} predicts that land rents---and hence house prices, holding 120 \citet{mills1967aggregative} predicts that land rents---and hence house prices, holding
114 structure constant---decline with distance from employment centres, a prediction whose 121 structure constant---decline with distance from employment centres, a prediction whose
115−modern quantitative form is estimated by \citet{ahlfeldt2015density} on uniquely sharp 122+modern quantitative form is estimated by \citet{ahlfeldt2015density}. Our distance-to-metro
116−Berlin data. Our distance-to-metro gradient is the reduced-form counterpart of this 123+gradient is a reduced-form counterpart of this prediction at national scale, and the
117−prediction at national scale, and the agglomeration literature reviewed by 124+agglomeration literature reviewed by \citet{combes2015empirics} supplies the economic
118−\citet{combes2015empirics} supplies the economic mechanism. A related macro-oriented 125+mechanism; \citet{combes2019costs} estimate the corresponding house- and land-price
119−literature measures how much of housing value is land rather than structure: 126+gradients across French cities. A related literature measures how much of housing value is
120−\citet{davis2007price} put the U.S. residential land share near 46\% in aggregate, 127+land rather than structure: \citet{davis2007price} put the aggregate U.S.\ residential land
121−\citet{knoll2017no} show that land appreciation explains about 80\% of the global 128+share near 46\%, \citet{davis2008price} and \citet{albouy2018metropolitan} document its
122−house-price increase since World War~II, and \citet{albouy2016cities} document enormous 129+enormous dispersion across metropolitan areas, \citet{knoll2017no} attribute about 80\% of
123−cross-city dispersion in land values. On the supply side, \citet{saiz2010geographic} 130+the global house-price increase since World War~II to land, and
124−shows that geographic constraints generate exactly the kind of persistent cross-location 131+\citet{diewert2015hedonic} show how a hedonic regression can itself be used to split a
125−price dispersion that our fixed effects absorb, and \citet{gyourko2013superstar} 132+price index into land and structure components. On the supply side, \citet{saiz2010geographic}
126−formalise the resulting ``superstar city'' dynamics---with Vancouver and Toronto as 133+shows that geographic constraints generate persistent cross-location price dispersion, and
127−textbook candidates \citep{glaeser2005why,cmhc2018canadian}. \emph{Gap:} this literature 134+\citet{gyourko2013superstar} formalise the resulting ``superstar city'' dynamics, of which
128−measures the land/location share with aggregate or city-level data; a listing-level 135+Vancouver and Toronto are natural candidates \citep{glaeser2005why}. This literature measures
129−decomposition for an entire national market, in which the location share is estimated 136+the land or location share with aggregate or city-level data; a listing-level decomposition
130−directly from within-neighbourhood variation, complements it from the bottom up. 137+for an entire national market, estimated from within-neighbourhood variation, complements it
131− 138+from the bottom up.
132−\subsection{Valuation: price indices, mass appraisal, and machine learning} 139+
133− 140+\subsection{Valuation: price indices, mass appraisal and machine learning}
134−The hedonic regression is one of two workhorses of constant-quality house-price 141+
135−measurement, alongside the repeat-sales method of \citet{bailey1963regression} that 142+The hedonic regression is one of two workhorses of constant-quality house-price measurement,
136−underlies the \citet{case1989efficiency} index tradition; \citet{hill2013hedonic} 143+alongside the repeat-sales method of \citet{bailey1963regression} that underlies the
137−surveys and taxonomises the hedonic index literature. The same estimated surface doubles 144+\citet{case1989efficiency} index tradition; \citet{hill2013hedonic} surveys the hedonic
138−as a valuation engine: \citet{clapp2003semiparametric} develops a location-value surface 145+index literature. The same estimated surface doubles as a valuation engine:
139−for automated valuation, \citet{kiel2008location} systematise the ``location, location, 146+\citet{clapp2003semiparametric} develops a location-value surface for automated valuation,
140−location'' decomposition of house-price determinants, and the mass-appraisal literature 147+\citet{kiel2008location} systematise the structure-versus-location decomposition of house
141−benchmarks prediction accuracy across model classes \citep{mccluskey2013prediction}. 148+prices, and the mass-appraisal literature benchmarks prediction accuracy across model
142−The rise of machine-learning valuation \citep{mullainathan2017machine} has sharpened the 149+classes \citep{mccluskey2013prediction}. The rise of machine-learning valuation
143−question of what transparency costs in accuracy terms. \emph{Gap:} few studies report 150+\citep{mullainathan2017machine} has sharpened the question of what transparency costs in
144−honestly held-out accuracy for a fully transparent hedonic model at national scale; our 151+accuracy. A methodological point from the predictive literature is directly relevant: when
145−out-of-sample results provide exactly that benchmark. 152+observations are spatially clustered, random holdouts overstate the accuracy that can be
146− 153+expected in locations not represented in the training data, and spatially blocked
147−\subsection{Canadian evidence} 154+holdouts are required \citep{roberts2017cross}. Few studies report held-out accuracy for a
148− 155+transparent hedonic model at national scale, and fewer still distinguish within-support
149−Canada has a productive hedonic tradition, largely centred on single metropolitan areas: 156+from out-of-support accuracy; our validation provides both.
150−the Quebec City program of Des Rosiers and coauthors measures the capitalization of 157+
151−shopping centres \citep{desrosiers1996shopping} and landscaping quality 158+\subsection{List prices and the Canadian evidence}
152−\citep{desrosiers2002landscaping}, and \citet{haider2000effects} apply spatial 159+
153−autoregressive techniques to Toronto transactions. Policy work documents the spatial 160+Because our dependent variable is the asking price, the literature on listing behaviour
154−dispersion of Canadian prices \citep{cmhc2018canadian}, with Vancouver and Toronto at 161+bounds the interpretation of our estimates. \citet{horowitz1992role} models the list price
155−the expensive extreme \citep{glaeser2005why}. \emph{Gap:} to our knowledge no previous 162+as a ceiling that shapes the arrival of offers; \citet{genesove2001loss} show that sellers
156−study estimates a single hedonic system spanning the Canadian market coast to coast at 163+facing nominal losses set higher asking prices; \citet{anglin2003tradeoff} document the
157−the listing level; the national scope, the 1{,}153 absorbed neighbourhood effects, and 164+trade-off between the asking price and time on the market; \citet{merlo2004bargaining}
158−the validated out-of-sample accuracy are, jointly, the contribution of this paper. 165+observe the full bargaining sequence from listing to sale; \citet{genesove2012search} and
166+\citet{han2015microstructure} review the search-and-matching microstructure; and
167+\citet{han2016what} show that the asking price acts both as a commitment and as a signal.
168+The wedge between list and transaction prices is therefore systematic rather than random
169+noise, and we return to it in Section~\ref{sec:discussion}.
170+
171+Canada has a productive hedonic tradition that is largely metropolitan: the Quebec City
172+programme of Des Rosiers, Th\'eriault and coauthors measures the capitalisation of shopping
173+centres \citep{desrosiers1996shopping}, landscaping \citep{desrosiers2002landscaping} and the
174+interaction of location with attribute values \citep{theriault2003modelling};
175+\citet{haider2000effects} apply spatial autoregressive techniques to Toronto; and
176+\citet{dube2013commuter} estimate the capitalisation of commuter rail on Montreal's South
177+Shore. At the national level, \citet{allen2009canadian} test for segmentation across
178+Canadian city price indices and \citet{hossain2009determinants} study the determinants of
179+aggregate price volatility. To our knowledge no previous study estimates a single hedonic
180+price function spanning the Canadian market at the listing level; the national scope, the
181+absorbed neighbourhood effects, the explicit attribution rule for the structure--location
182+decomposition and the within- versus out-of-support validation are, jointly, the
183+contribution of this paper.
modified paper/sections/methodology.tex +167 −52
@@ -4,10 +4,10 @@
4 \label{sec:methodology} 4 \label{sec:methodology}
5 % ============================================================================ 5 % ============================================================================
6 6
7−\subsection{The hedonic equation} 7+\subsection{The hedonic price function}
8 \label{subsec:model} 8 \label{subsec:model}
9 9
10−We estimate the semi-logarithmic hedonic price equation 10+We estimate the semi-logarithmic hedonic price function
11 % 11 %
12 \begin{equation} 12 \begin{equation}
13 \ln P_{i} 13 \ln P_{i}
@@ -20,69 +20,184 @@ We estimate the semi-logarithmic hedonic price equation
20 \label{eq:hedonic} 20 \label{eq:hedonic}
21 \end{equation} 21 \end{equation}
22 % 22 %
23−where $P_{i}$ is the list price of dwelling~$i$; $\text{Area}_{i}$ is living area in 23+where $P_{i}$ is the asking price of dwelling~$i$; $\text{Area}_{i}$ is its living area in
24 square metres; $\mathbf{x}_{i}$ collects the remaining structural attributes (bedrooms, 24 square metres; $\mathbf{x}_{i}$ collects the remaining structural attributes (bedrooms,
25−full and half bathrooms, parking, storeys, the lot indicator and $\ln$ lot area); 25+full and half bathrooms, parking spaces, storeys, the lot-information indicator and
26−$\mathbf{d}_{i}$ is a vector of dwelling-type and ownership dummies; $\mu_{f(i)}$ is a 26+$\ln(1+\text{lot area})$); $\mathbf{d}_{i}$ is a vector of dwelling-type, ownership and
27−fixed effect for the FSA neighbourhood $f$ to which dwelling~$i$ belongs; and 27+listing-category indicators; $\mu_{f(i)}$ is a fixed effect for the FSA $f(i)$ in which the
28−$\varepsilon_{i}$ is an idiosyncratic error. 28+dwelling is located; and $\varepsilon_{i}$ is an idiosyncratic error with
29+$\mathbb{E}[\varepsilon_{i}\mid \text{Area}_{i},\mathbf{x}_{i},\mathbf{d}_{i},f(i)]=0$.
30+Equation~\eqref{eq:hedonic} is a first-stage hedonic regression in the sense of
31+\citet{rosen1974hedonic}: its coefficients are implicit prices along the equilibrium price
32+schedule of listings, not preference parameters.
29 33
30−Because $\beta$ multiplies a logged regressor, it is the \emph{elasticity} of price with 34+Because $\beta$ multiplies a logged regressor, it is the elasticity of the asking price with
31−respect to floor space. The elements of $\boldsymbol{\gamma}$ attached to count variables 35+respect to floor space. A coefficient $\gamma_k$ on a count variable implies a proportional
32−are semi-elasticities: following \citet{halvorsen1980interpretation}, a coefficient 36+change of $e^{\gamma_k}-1$ per additional unit, which for the magnitudes encountered here
33−$\gamma$ implies an approximate proportional price change of $100\,(e^{\gamma}-1)\%$ for a 37+differs from $\gamma_k$ by less than one percentage point; we report both where the
34−one-unit increase, which we report whenever the distinction from the raw coefficient is 38+difference is material. For the indicator variables in $\mathbf{d}_i$ the proportional
35−material. 39+effect relative to the omitted category is $e^{\delta_k}-1$
40+\citep{halvorsen1980interpretation}, and because $\hat\delta_k$ is estimated with error the
41+unbiased version is the \citet{kennedy1981estimation} estimator
42+%
43+\begin{equation}
44+ \hat g_k = \exp\!\big(\hat\delta_k - \tfrac12\,\widehat{V}(\hat\delta_k)\big) - 1,
45+ \label{eq:kennedy}
46+\end{equation}
47+%
48+which we use throughout for percentage effects of indicators.
36 49
37−\subsection{High-dimensional location effects} 50+\subsection{High-dimensional location effects and identification}
38 \label{subsec:identification} 51 \label{subsec:identification}
39 52
40−The neighbourhood fixed effects $\mu_{f}$ are the heart of the design. By including a 53+The neighbourhood fixed effects $\mu_{f}$ are the heart of the design. A separate intercept
41−separate intercept for each of the 1{,}153 FSAs, we allow every neighbourhood an arbitrary 54+for each of the 1{,}155 FSA groups allows every neighbourhood an arbitrary price level that
42−price level that absorbs all location-specific amenities---school quality, transit access, 55+absorbs all location-specific amenities---school quality, transit access, coastline,
43−coastline, employment density---whether or not they are observed. The structural implicit 56+employment density---whether or not they are observed. The structural implicit prices
44−prices in $\beta$ and $\boldsymbol{\gamma}$ are then identified purely from variation 57+$\beta$ and $\boldsymbol{\gamma}$ are then identified from variation \emph{within}
45−\emph{within} neighbourhoods, comparing dwellings that differ in their physical attributes 58+neighbourhoods, by comparing dwellings that differ in physical attributes but share a
46−but share a location. This is the housing counterpart of the within estimator, and it 59+location. This is the within estimator of panel econometrics applied to a spatial grouping,
47−addresses the most pernicious source of omitted-variable bias in hedonic work: the 60+and it addresses the most pernicious source of omitted-variable bias in hedonic work: the
48 correlation between structural quality and unobserved locational quality 61 correlation between structural quality and unobserved locational quality
49−\citep{can1992specification,bourassa2007spatial}. 62+\citep{can1992specification,bourassa2007spatial,bishop2020best}. It does not address
63+within-neighbourhood sorting of unobserved dwelling quality (age, renovation, finish) on
64+observed attributes, which remains the main threat to the structural coefficients and which
65+we discuss in Section~\ref{sec:discussion}.
66+
67+Including more than a thousand indicator variables directly is numerically wasteful. We
68+instead estimate Equation~\eqref{eq:hedonic} by absorbing least squares, in the
69+high-dimensional fixed-effects tradition initiated by \citet{abowd1999high}: the dependent
70+variable and every regressor are demeaned within FSA groups,
71+$\tilde z_i = z_i - \bar z_{f(i)}$, and the slopes are obtained by ordinary least squares on
72+the demeaned data \citep{guimaraes2010simple,correia2017reghdfe}. With a single
73+fixed-effect dimension the transformation is exact, so the slope estimates are numerically
74+identical to those of the full-dummy regression, and the fixed effects are recovered as
75+$\hat\mu_f = \overline{(\ln P - \hat\beta\ln\text{Area} - \mathbf{x}'\hat{\boldsymbol\gamma}
76+- \mathbf{d}'\hat{\boldsymbol\delta})}_f$. The $R^2$ we report is that of the full model
77+including the absorbed effects.
78+
79+\subsection{Inference}
80+\label{subsec:inference}
50 81
51−Including more than a thousand dummies directly is numerically wasteful. We instead 82+Listings in the same neighbourhood share unobserved shocks, so our baseline standard errors
52−estimate Equation~\eqref{eq:hedonic} by \emph{absorbing least squares}, in the 83+are clustered at the FSA level ($G=1{,}155$ clusters), which allows arbitrary
53−high-dimensional fixed-effects tradition initiated by \citet{abowd1999high}: the FSA 84+within-neighbourhood correlation and heteroskedasticity \citep{cameron2015practitioner}.
54−effects are partialled out of both the dependent variable and the regressors before the 85+Whether this is the right level is a substantive question \citep{abadie2023when}: if
55−structural coefficients are estimated \citep{guimaraes2010simple,correia2017reghdfe}, 86+implicit prices are set by provincial markets, or if the sampling of listings is correlated
56−and the slope estimates are numerically identical to full-dummy OLS. All standard errors 87+at the provincial scale, clustering by province would be appropriate, but with nine
57−are clustered at the FSA level to allow for arbitrary within-neighbourhood correlation 88+provinces the asymptotic cluster-robust variance is unreliable. We therefore also report
58−and heteroskedasticity \citep{cameron2015practitioner}. 89+heteroskedasticity-robust (HC1), province-clustered and two-way (FSA and province) standard
90+errors, and for the province level we implement the restricted wild-cluster bootstrap-$t$
91+of \citet{cameron2015practitioner} with Rademacher weights. With $G=9$ clusters the
92+$2^{9}=512$ distinct sign vectors are enumerated exhaustively, as recommended by
93+\citet{mackinnon2017wild}, so that the bootstrap $p$-value is exact up to its granularity of
94+$2/512$.
59 95
60−\subsection{Specification ladder} 96+\subsection{Specification ladder and variance decomposition}
61 \label{subsec:ladder} 97 \label{subsec:ladder}
62 98
63−We report a ladder of nested specifications that isolates the marginal contribution of 99+We report a ladder of nested specifications that isolates the marginal explanatory
64−each block of controls: 100+contribution of each block of controls. Model M1 contains the structural attributes only;
101+M2 adds the dwelling-type, ownership and category indicators; M3 adds province fixed
102+effects; M4 replaces the province effects with FSA fixed effects; and M5---the grand
103+model---absorbs FSA effects over the full residential sample. Columns M1--M4 are estimated
104+on the house subsample to keep the structural interpretation clean; M5 is the preferred
105+specification. The gap in $R^2$ between M3 and M4 measures the explanatory value of
106+resolving location at the neighbourhood rather than the provincial scale.
107+
108+A sequential ladder attributes the variance explained jointly by two blocks to whichever
109+block enters first. Because larger dwellings are not randomly distributed across
110+neighbourhoods, this attribution rule matters for the structure-versus-location question,
111+and we therefore complement it with an order-free decomposition. Let $R^2(S)$ denote the
112+coefficient of determination of the model containing the blocks in a set
113+$S\subseteq\mathcal{B}=\{\text{structure},\text{type/ownership},\text{province},\text{FSA}\}$.
114+The Shapley value of block $b$ is
65 % 115 %
66−\begin{itemize} 116+\begin{equation}
67− \item \textbf{M1 -- Structural:} structural attributes only. 117+ \phi_b = \sum_{S\subseteq\mathcal{B}\setminus\{b\}}
68− \item \textbf{M2 -- + Type/Ownership:} adds dwelling-type and ownership dummies. 118+ \frac{|S|!\,(|\mathcal{B}|-|S|-1)!}{|\mathcal{B}|!}\,
69− \item \textbf{M3 -- + Province:} adds province fixed effects. 119+ \big[R^2(S\cup\{b\}) - R^2(S)\big],
70− \item \textbf{M4 -- Houses + FSA:} replaces province with FSA fixed effects, houses only. 120+ \label{eq:shapley}
71− \item \textbf{M5 -- Grand model:} FSA fixed effects over all residential dwellings. 121+\end{equation}
72−\end{itemize}
73 % 122 %
74−Columns M1--M3 are estimated on the house subsample to keep the structural interpretation 123+the average marginal contribution of $b$ over all $|\mathcal{B}|!$ orderings
75−clean; M5 is the preferred grand specification estimated over the full residential sample. 124+\citep{israeli2007shapley,gromping2007estimators}; the $\phi_b$ sum to the $R^2$ of the
76−The gap in $R^2$ between M3 and M5 measures the explanatory value of resolving location at 125+full model. Because province effects are nested in FSA effects, $R^2(S\cup\{\text{province}\})
77−the neighbourhood rather than the provincial scale. 126+= R^2(S)$ whenever $S$ contains the FSA block, so the province block only receives credit
127+in orderings where it precedes the FSA block. The Owen value treats province and FSA as a
128+single location group and applies Equation~\eqref{eq:shapley} to the three groups
129+$\{\text{structure}\}$, $\{\text{type/ownership}\}$ and $\{\text{location}\}$
130+\citep{huettner2012axiomatic}; it is the natural statistic for the structure-versus-location
131+question because it does not split location credit across two nested geographies. Each
132+$R^2(S)$ is computed by absorbing least squares when $S$ contains the FSA block and by OLS
133+otherwise, so the decomposition requires $2^{4}=16$ regressions.
134+
135+\subsection{Functional form, distributional heterogeneity and the urban gradient}
136+\label{subsec:extensions}
137+
138+To test the constant-elasticity restriction we re-estimate Equation~\eqref{eq:hedonic} with
139+a quadratic in log area, $\beta_1\ln\text{Area}_i + \beta_2(\ln\text{Area}_i)^2$, whose
140+marginal elasticity $\beta_1 + 2\beta_2\ln\text{Area}$ varies with size, and with a
141+piecewise-linear spline, $\beta_0\ln\text{Area}_i + \sum_{k=1}^{4}\beta_k
142+\max(\ln\text{Area}_i - c_k, 0)$, with knots $c_k$ at the quintiles of living area, whose
143+segment elasticities $\sum_{j\le k}\beta_j$ do not impose monotonicity. Quantile hedonic
144+regressions \citep{koenker1978regression} estimate, for $\tau\in\{0.1,0.25,0.5,0.75,0.9\}$,
145+%
146+\begin{equation}
147+ \hat{\boldsymbol\theta}(\tau) = \arg\min_{\boldsymbol\theta}
148+ \sum_i \rho_\tau\big(\ln P_i - \mathbf{z}_i'\boldsymbol\theta\big),
149+ \qquad \rho_\tau(u) = u\,\big(\tau - \mathbf{1}\{u<0\}\big),
150+ \label{eq:quantile}
151+\end{equation}
152+%
153+where $\mathbf{z}_i$ stacks the structural attributes, ownership indicators and province
154+effects on the house subsample; standard errors use the Koenker--Bassett kernel sandwich
155+with the Hall--Sheather bandwidth. The urban gradient relates the location component of the
156+price, defined as the residual $u_i$ of the model with structural, type and ownership
157+controls but no location effects, to the great-circle distance $d_i$ from the listing to
158+the nearest of nine metropolitan centres (Toronto, Montreal, Vancouver, Calgary,
159+Ottawa--Gatineau, Edmonton, Winnipeg, Quebec City and Halifax) through
160+$u_i = \kappa + \lambda\ln d_i + \eta_i$, so that a doubling of distance changes the
161+location premium by $100\,(2^{\lambda}-1)$ per cent; we also allow a quadratic in
162+$\ln d_i$ and metro-specific intercepts. Finally, spatial dependence in the residuals is
163+measured by Moran's~$I$ \citep{moran1950notes},
164+%
165+\begin{equation}
166+ I = \frac{\sum_i\sum_j w_{ij}\,\hat e_i\,\hat e_j}{\sum_i \hat e_i^{\,2}},
167+ \label{eq:moran}
168+\end{equation}
169+%
170+with row-standardised $k$-nearest-neighbour weights $w_{ij}$ based on great-circle
171+distance, computed on random subsamples of 15{,}000 listings for $k\in\{5,10,20\}$, and
172+with significance assessed by 199 random permutations of the residuals; the asymptotic
173+normal approximation of \citet{kelejian2001asymptotic} yields the same conclusion.
78 174
79 \subsection{Retransformation and out-of-sample evaluation} 175 \subsection{Retransformation and out-of-sample evaluation}
80 \label{subsec:retrans} 176 \label{subsec:retrans}
81 177
82−Because the model is estimated in logs, predicted price levels require a retransformation 178+Because the model is estimated in logs, predicted price levels require a retransformation.
83−correction. We use Duan's smearing estimator \citep{duan1983smearing}, multiplying 179+We use the smearing estimator of \citet{duan1983smearing},
84−$\exp(\widehat{\ln P})$ by the sample mean of $\exp(\widehat{\varepsilon})$, which is 180+%
85−consistent without assuming log-normal errors. For predictive validation we randomly split 181+\begin{equation}
86−the data 80/20, estimate the model on the training fold (restricting evaluation to 182+ \hat P_i = \exp\big(\widehat{\ln P_i}\big)\cdot\hat\psi,\qquad
87−neighbourhoods observed in training, since out-of-support FSA effects are not identified), 183+ \hat\psi = \frac{1}{N_{\text{train}}}\sum_{j\in\text{train}} \exp(\hat\varepsilon_j),
88−and report held-out fit and percentage-error metrics on the test fold. 184+ \label{eq:duan}
185+\end{equation}
186+%
187+which is consistent without assuming log-normal errors. Predictive accuracy is measured on
188+held-out listings by the out-of-sample $R^2$ of the log price,
189+$1-\sum_i(\ln P_i-\widehat{\ln P_i})^2/\sum_i(\ln P_i-\overline{\ln P})^2$, by the root
190+mean squared log error, and in levels by the median absolute percentage error (MdAPE)
191+$\operatorname{median}_i\,|\hat P_i - P_i|/P_i$ and the shares of listings valued within
192+$\pm10\%$ and $\pm20\%$ of their asking price. Three validation designs are used. The
193+first is a random 80/20 split of listings, repeated over five seeds, with evaluation
194+restricted to FSAs observed in training since out-of-support fixed effects are not
195+identified; this is the design most valuation studies report and it measures accuracy
196+within the spatial support of the data. The second holds out 20\% of the FSAs entirely and
197+values their listings with the training coefficients and an imputed neighbourhood effect,
198+either the mean effect of the training FSAs in the same province or an inverse-distance
199+weighted mean of the five nearest training FSAs; this spatially blocked design measures
200+accuracy in neighbourhoods never observed \citep{roberts2017cross}. The third is
201+leave-one-province-out cross-validation of the structural model, which asks whether the
202+structural implicit prices transfer across provincial markets when only a province-specific
203+intercept is allowed.
modified paper/sections/results.tex +220 −123
@@ -4,178 +4,275 @@
4 \label{sec:results} 4 \label{sec:results}
5 % ============================================================================ 5 % ============================================================================
6 6
7−\subsection{The value of location} 7+\subsection{The explanatory value of location}
8 \label{subsec:location} 8 \label{subsec:location}
9 9
10−Figure~\ref{fig:r2} summarises the explanatory power of the specification ladder. The 10+Figure~\ref{fig:r2} summarises the explanatory power of the specification ladder on the
11−structural-only model (M1) accounts for 46.4\% of the variation in log prices. Adding 11+house subsample. Structural attributes alone (M1) account for 46.7\% of the variation in
12−dwelling-type and ownership controls (M2) barely moves the fit, but introducing province 12+log asking prices. Adding dwelling-type and ownership controls (M2) barely moves the fit,
13−fixed effects (M3) raises $R^2$ to 56.8\%, and resolving location at the FSA scale lifts 13+introducing province fixed effects (M3) raises the $R^2$ to 60.5\%, and resolving location
14−it to \textbf{76.2\%} for houses (M4) and \textbf{76.7\%} for the grand model (M5). The 14+at the FSA scale (M4) lifts it to 76.9\%; the grand model over all residential dwellings
15−implication is stark: moving from province to neighbourhood resolution adds about twenty 15+(M5) reaches 77.6\%. Moving from provincial to neighbourhood resolution therefore adds
16−percentage points of explained variance, and \emph{location as a whole accounts for 16+about sixteen percentage points of explained variance, and the two location blocks
17−roughly thirty percentage points}---more than the entire structural bundle. This is the 17+together add thirty points to a model that already contains structure and dwelling type.
18−central result of the paper and a quantitative statement of the realtor's adage that what 18+Just under a quarter of the variance remains unexplained and is attributable to
19−matters is ``location, location, location.'' 19+idiosyncratic pricing, listing strategy and unobserved dwelling quality.
20− 20+
21−\begin{figure}[t]\centering 21+\begin{figure}[htbp]\centering
22 \includegraphics[width=0.82\textwidth]{fig_r2.png} 22 \includegraphics[width=0.82\textwidth]{fig_r2.png}
23−\caption{Share of log-price variation explained ($R^2$) across the five nested 23+\caption{Share of log asking-price variation explained ($R^2$) across the five nested
24−specifications. The jump from M3 (province) to M4/M5 (FSA) quantifies the value of 24+specifications. M1--M4 are estimated on houses, M5 on all residential dwellings. The jump
25−resolving location at the neighbourhood scale.} 25+from M3 (province) to M4 (FSA) quantifies the value of resolving location at the
26+neighbourhood scale.}
26 \label{fig:r2} 27 \label{fig:r2}
27 \end{figure} 28 \end{figure}
28 29
30+\subsection{Decomposing the variance: structure versus location}
31+\label{subsec:decomp}
32+
33+The sequential increments of the ladder are a legitimate but order-dependent statement.
34+Table~\ref{tab:shapley} and Figure~\ref{fig:decomp} report, for the full residential
35+sample and for houses, the sequential attribution alongside the Shapley and Owen values of
36+Equation~\eqref{eq:shapley}. In the sequential ordering that enters structure first,
37+structure receives 43.6 points of the 77.6\% explained in the full sample, dwelling type
38+1.6, province 14.3 and neighbourhood 18.1. When the shared variance is split symmetrically
39+over all orderings, structure falls to 33.0 points and the neighbourhood rises to 28.2, with
40+7.5 points for dwelling type and ownership and 8.9 for province; grouping the two nested
41+geographies into a single location block, the Owen value assigns 34.0 points to structure,
42+7.3 to dwelling type and ownership and 36.3 to location. The ten-point gap between the
43+sequential and the Shapley attribution of structure is the variance that structure and
44+location explain jointly, and it has an economic reading: large dwellings are
45+disproportionately located in inexpensive neighbourhoods and condominiums in expensive
46+ones, so that each block ``borrows'' explanatory power from the other when it enters first.
47+
48+\input{../results/tables/shapley}
49+
50+\begin{figure}[htbp]\centering
51+\includegraphics[width=0.95\textwidth]{fig_decomp.png}
52+\caption{Variance decomposition of log asking prices (all residential dwellings) into
53+structure, dwelling type and ownership, province, neighbourhood (FSA) and the unexplained
54+residual. The upper bar attributes the shared variance to the block that enters first in
55+the ladder order; the lower bar averages over all orderings (Shapley values,
56+Table~\ref{tab:shapley}).}
57+\label{fig:decomp}
58+\end{figure}
59+
60+Three conclusions follow. First, location and structure are of comparable importance in
61+explaining the cross-section of Canadian asking prices: roughly one third of the variance
62+each under symmetric attribution, with the remaining variance split between dwelling type
63+and the residual. Second, the statement that location is the single largest priced
64+component holds when province and neighbourhood are treated as one block (36.3 against 34.0
65+points), is reversed under the structure-first sequential ordering (32.4 against 43.6), and
66+is reversed again within the four-block Shapley decomposition, where structure (33.0)
67+exceeds the neighbourhood alone (28.2). The question ``how much is location worth?'' thus
68+has no answer that is independent of the attribution rule, and papers that report only a
69+sequential $R^2$ ladder overstate the block that enters first. Third, the house subsample
70+behaves similarly but with a larger location share under symmetric attribution (Owen value
71+42.2 against 33.8 for structure), consistent with houses being more heterogeneous in lot
72+and land content than condominiums.
73+
29 \subsection{Implicit prices of structural attributes} 74 \subsection{Implicit prices of structural attributes}
30 \label{subsec:implicit} 75 \label{subsec:implicit}
31 76
32 Table~\ref{tab:regression} reports the regression estimates. The living-area elasticity is 77 Table~\ref{tab:regression} reports the regression estimates. The living-area elasticity is
33−remarkably stable across specifications, at $0.66$ in the raw structural model and 78+0.68 in the structural model, 0.55 once province effects are included and 0.53 in the grand
34−settling near $0.55$ once location is controlled for: a 10\% larger dwelling commands 79+model: a 10\% larger dwelling is listed at roughly 5.3\% more, holding the neighbourhood and
35−roughly a 5.5\% higher price. The slight decline as controls are added is consistent with 80+the other attributes fixed. The decline as location controls tighten is the signature of
36−larger homes being located in more expensive areas---a confound the FSA effects remove. 81+omitted locational quality: within a province, and a fortiori within a neighbourhood, large
37− 82+dwellings are more often found in cheaper places, so that the unconditional elasticity
38−Full bathrooms carry one of the strongest structural premia: about $0.11$ log points in 83+overstates the implicit price of space. The estimate is precisely determined, with an
39−the grand model, or roughly an \textbf{11\% price increase} per additional bathroom, 84+FSA-clustered standard error of 0.009.
40−rising to nearly 15\% in the province-FE model. Half bathrooms attract a small
41−\emph{negative} conditional coefficient, which we read not as a disamenity but as a proxy
42−for older or more compartmentalised floor plans once total area and full baths are held
43−fixed. Bedrooms are economically negligible conditional on living area: holding floor
44−space constant, subdividing it into more bedrooms does not raise value---a textbook
45−hedonic finding \citep{sirmans2005composition} that recurs across our samples. Lot information enters positively ($\ln$
46−lot elasticity around $0.03$) but modestly, reflecting both the noisiness of the parsed
47−lot field and the fact that, within a neighbourhood, lot variation is compressed.
48−
49−Figure~\ref{fig:forest} presents the structural implicit prices with 95\% cluster-robust
50−confidence intervals, making visually plain the dominance of living area and bathrooms and
51−the near-zero conditional effects of bedrooms, parking and storeys.
52 85
53 \input{../results/tables/regression} 86 \input{../results/tables/regression}
54 87
55−\begin{figure}[t]\centering 88+Full bathrooms carry the strongest structural premium after floor space. The grand-model
89+coefficient of 0.112 implies an increase in the asking price of 11.9\% ($e^{0.112}-1$) per
90+additional full bathroom at constant living area, and the province-effects model on houses
91+yields 0.148, or 16\%. Half bathrooms attract a small negative conditional coefficient
92+($-0.034$, about $-3.3\%$); Section~\ref{subsec:inference_results} shows that this effect,
93+unlike those of area and full bathrooms, is not statistically distinguishable from zero
94+once inference allows for province-level dependence, and we do not interpret it further.
95+Bedrooms are economically negligible conditional on living area: the grand-model coefficient
96+of $-0.006$ per bedroom is statistically different from zero under FSA clustering but
97+implies that subdividing a given floor area into one more room lowers the asking price by
98+about half a percent, and the coefficient is indistinguishable from zero in the house-only
99+columns and under province-level inference. This is the textbook hedonic result that floor
100+space, not room count, carries value \citep{sirmans2005composition,sirmans2006value}.
101+Parking spaces and storeys have coefficients that are essentially zero; the storeys
102+coefficient in column~(4) is statistically significant only because of a handful of
103+implausible counts, and it disappears when the variable is capped
104+(Section~\ref{subsec:stability}).
105+
106+The two lot variables must be read jointly. The indicator for available lot information has
107+a coefficient of $-0.459$ and the log lot area a coefficient of 0.067, so that a listing
108+reporting a median-sized lot of 690~m$^2$ ($\ln 691 = 6.5$) is priced
109+$-0.459 + 0.067\times6.5 = -0.02$ log points relative to a listing with no lot information,
110+while the lot elasticity among listings with a parsed lot is 0.067. Because 84\% of
111+condominiums and 7\% of houses report no lot, the indicator is close to a dwelling-type
112+marker and its coefficient has no interpretation on its own. The lot elasticity is modest
113+for two reasons: the field is noisily parsed from free text, and within a neighbourhood lot
114+variation is compressed.
115+
116+Figure~\ref{fig:forest} presents the structural implicit prices of the province-effects
117+model with 95\% cluster-robust confidence intervals, making visually plain the dominance of
118+living area and bathrooms and the near-zero conditional effects of bedrooms, parking and
119+storeys.
120+
121+\begin{figure}[htbp]\centering
56 \includegraphics[width=0.82\textwidth]{fig_forest.png} 122 \includegraphics[width=0.82\textwidth]{fig_forest.png}
57−\caption{Marginal implicit prices of structural attributes (houses, province-FE model M3) 123+\caption{Marginal implicit list prices of structural attributes (houses, province-effects
58−with 95\% cluster-robust confidence intervals, on the log-price scale.} 124+model M3) with 95\% cluster-robust confidence intervals, on the log-price scale.}
59 \label{fig:forest} 125 \label{fig:forest}
60 \end{figure} 126 \end{figure}
61 127
62−The price--size gradient by dwelling type (Figure~\ref{fig:size_gradient}) confirms the 128+\subsection{Dwelling type and ownership}
63−log--log structure: median price rises concavely with living area for both dwelling types. 129+\label{subsec:type}
64−Unconditionally, condominiums list \emph{above} houses of the same size---a compositional 130+
65−effect of their concentration in the expensive metropolitan markets---whereas conditional 131+Table~\ref{tab:type_effects} reports the dwelling-type and ownership effects of the grand
66−on location and ownership the estimated dwelling-type effects show that houses command the 132+model with the percentage effects of Equation~\eqref{eq:kennedy}. Conditional on living
67−premium, in line with Table~\ref{tab:regression}. 133+area, the other structural attributes and the neighbourhood, a house is listed 46\% above an
134+apartment of the same size, a triplex 43\% and a fourplex 39\% above, a duplex 16\% above,
135+and a row or townhouse at the same price as an apartment; manufactured homes are not
136+significantly different from apartments once their neighbourhoods and sizes are controlled.
137+The house premium is large and deserves a precise reading: it is the price of the land and
138+the exclusive use that a detached dwelling embodies over and above the parsed lot variables,
139+and it is estimated from neighbourhoods that contain both houses and apartments, that is,
140+from mixed urban FSAs. Relative to co-operative ownership, freehold and condominium or strata
141+titles both command a premium of about 10\%, and leasehold a discount of 12\%, in line with
142+the restrictions that co-operative and leasehold tenure place on resale.
143+
144+\input{../results/tables/type_effects}
68 145
69−\begin{figure}[t]\centering 146+Figure~\ref{fig:size_gradient} shows the unconditional price--size gradient by dwelling
147+type: median asking price rises concavely with living area for both houses and
148+condominiums, and the semi-log specification linearises this curvature. Unconditionally,
149+condominiums list \emph{above} houses of the same size, a compositional effect of their
150+concentration in expensive metropolitan neighbourhoods, whereas conditional on
151+neighbourhood and ownership houses command the premium reported in
152+Table~\ref{tab:type_effects}. The contrast illustrates the identifying role of the
153+neighbourhood effects.
154+
155+\begin{figure}[htbp]\centering
70 \includegraphics[width=0.78\textwidth]{fig_size_gradient.png} 156 \includegraphics[width=0.78\textwidth]{fig_size_gradient.png}
71−\caption{Median price by living-area bin and dwelling type. The concave gradient is 157+\caption{Median asking price by living-area bin and dwelling type (unconditional). The
72−linearised by the semi-log specification.} 158+concave gradient is linearised by the semi-log specification; the condominium premium at
159+given size is compositional and reverses once location is controlled.}
73 \label{fig:size_gradient} 160 \label{fig:size_gradient}
74 \end{figure} 161 \end{figure}
75 162
76 \subsection{The geography of housing value} 163 \subsection{The geography of housing value}
77 \label{subsec:geography} 164 \label{subsec:geography}
78 165
79−Figure~\ref{fig:maps} maps the spatial structure of value directly. The familiar outline 166+Figure~\ref{fig:maps} maps the spatial structure of value directly. The outline of
80−of populated Canada emerges from the listing coordinates. The Vancouver corridor and the 167+populated Canada emerges from the listing coordinates; the Vancouver corridor and the
81−Greater Toronto--Golden Horseshoe area sit at the top of the price-per-square-metre 168+Toronto--Golden Horseshoe area sit at the top of the price-per-square-metre distribution,
82−distribution, while the Prairies and Atlantic Canada anchor the bottom. The right panel 169+while the Prairies and Atlantic Canada anchor the bottom. The right panel aggregates to FSA
83−aggregates to FSA medians, the geographic unit absorbed in the grand model. 170+medians, the geographic unit absorbed in the grand model.
84 171
85−\begin{figure}[t]\centering 172+\begin{figure}[htbp]\centering
86 \begin{subfigure}{0.49\textwidth}\includegraphics[width=\textwidth]{fig_map.png} 173 \begin{subfigure}{0.49\textwidth}\includegraphics[width=\textwidth]{fig_map.png}
87 \caption{All listings}\end{subfigure}\hfill 174 \caption{All listings}\end{subfigure}\hfill
88 \begin{subfigure}{0.49\textwidth}\includegraphics[width=\textwidth]{fig_fsa_map.png} 175 \begin{subfigure}{0.49\textwidth}\includegraphics[width=\textwidth]{fig_fsa_map.png}
89 \caption{FSA neighbourhood medians}\end{subfigure} 176 \caption{FSA neighbourhood medians}\end{subfigure}
90−\caption{Spatial distribution of housing value. Colour encodes log price per m$^2$; bubble 177+\caption{Spatial distribution of housing value. Colour encodes the log asking price per
91−area in panel~(b) is proportional to $\sqrt{\text{listings}}$. Labels mark the provinces 178+m$^2$; bubble area in panel~(b) is proportional to $\sqrt{\text{listings}}$. Labels mark
92−with substantial samples; the data cover nine provinces, while the territories and Prince 179+provinces with substantial samples; the data cover nine provinces, while the territories
93−Edward Island contain no listings.} 180+and Prince Edward Island contain no listings.}
94 \label{fig:maps} 181 \label{fig:maps}
95 \end{figure} 182 \end{figure}
96 183
97−To translate location into a clean dollar statement we recover each FSA's fixed effect 184+To translate location into a dollar statement we recover each FSA's fixed effect from the
98−from the grand model---its price premium net of structure, dwelling type and 185+grand model---its price premium net of structure, dwelling type and ownership---and express
99−ownership---and express it relative to the national median (Figure~\ref{fig:premia}). The 186+it relative to the median FSA among the 870 neighbourhoods with at least 50 listings
100−highest-valued neighbourhoods, all in the City of Vancouver, trade at \textbf{150--200\% 187+(Figure~\ref{fig:premia}). The highest-valued neighbourhoods are all in British Columbia's
101−above} the national-median neighbourhood for an otherwise identical dwelling; the lowest, 188+Lower Mainland and Sea-to-Sky corridor: V6S (Dunbar--Point Grey, $+226\%$) and V6T
102−in rural Saskatchewan, Manitoba and Newfoundland, sit \textbf{60--67\% below}. The full 189+(University Endowment Lands, $+201\%$) on Vancouver's west side, V8E (Whistler, $+197\%$),
103−premium distribution thus spans a factor of roughly nine between the most and least 190+V6G (Vancouver West End, $+185\%$), V7T (West Vancouver, $+179\%$) and a further seven
104−expensive neighbourhoods, dwarfing the price range attributable to any single structural 191+Vancouver FSAs between $+150\%$ and $+175\%$; the first Ontario neighbourhood, M5R (the
105−attribute. 192+Annex, Toronto), ranks fourteenth at $+142\%$. The lowest-valued neighbourhoods are in rural
106− 193+Newfoundland (A0B and A0G, $-69\%$ and $-64\%$), rural Saskatchewan (S0N, S0C, S0H, S0A,
107−\begin{figure}[t]\centering 194+around $-62\%$), northern and rural Manitoba (R8N Thompson, R0M), New Brunswick (E3Y Grand
195+Falls, E2A Bathurst) and the north-east of British Columbia (V0C), with one urban exception,
196+R2W in Winnipeg's North End ($-62\%$). An otherwise identical dwelling is therefore listed at
197+about 3.3 times the national-median neighbourhood level in Dunbar--Point Grey and at 0.31
198+times that level in rural Newfoundland, a ratio of about ten between the extremes and of
199+6.7 between the first and ninety-ninth percentiles of the premium distribution. No single
200+structural attribute moves the asking price by anything approaching this range.
201+
202+\begin{figure}[htbp]\centering
108 \includegraphics[width=0.78\textwidth]{fig_premia.png} 203 \includegraphics[width=0.78\textwidth]{fig_premia.png}
109 \caption{Highest- and lowest-valued neighbourhoods (FSAs) in Canada, measured as the 204 \caption{Highest- and lowest-valued neighbourhoods (FSAs) in Canada, measured as the
110−estimated location premium relative to the national-median neighbourhood, net of 205+estimated location premium relative to the median neighbourhood, net of structure,
111−structure, dwelling type and ownership. Only FSAs with at least 50 listings are shown.} 206+dwelling type and ownership. Only FSAs with at least 50 listings are shown; provinces are
207+assigned from the FSA.}
112 \label{fig:premia} 208 \label{fig:premia}
113 \end{figure} 209 \end{figure}
114 210
115−\subsection{Decomposing the variance of prices} 211+\subsection{Nonlinearity in floor space}
116−\label{subsec:decomp}
117−
118−Figure~\ref{fig:decomp} casts the specification ladder as a decomposition of the variance
119−of log prices into the share explained by each successive block of controls. Physical
120−structure accounts for 46\% of the variance; dwelling type and ownership add a further
121−0.4~points; province adds about 10~points; and resolving location to the neighbourhood
122−adds a further 20~points, for a total location contribution near 30~points. Just under a
123−quarter of the variance remains unexplained and is attributable to idiosyncratic pricing
124−and unobserved dwelling quality. The visual makes the headline unmistakable: the single
125−largest identified block of housing value in Canada is the neighbourhood.
126−
127−\begin{figure}[t]\centering
128−\includegraphics[width=0.92\textwidth]{fig_decomp.png}
129−\caption{Variance decomposition of Canadian log house prices into structure, dwelling
130−type/ownership, province, neighbourhood (FSA) and the unexplained residual, from the
131−nested specification ladder.}
132−\label{fig:decomp}
133−\end{figure}
134−
135−\subsection{Nonlinearity: diminishing returns to floor space}
136 \label{subsec:nonlinear} 212 \label{subsec:nonlinear}
137 213
138 The constant-elasticity assumption is convenient but restrictive. Re-estimating the grand 214 The constant-elasticity assumption is convenient but restrictive. Re-estimating the grand
139−model with a quadratic in log living area yields a positive linear term and a 215+model with a quadratic in log living area yields $\hat\beta_1=1.147$ and
140−significantly negative quadratic term ($\widehat{\beta}_1=1.06$, 216+$\hat\beta_2=-0.063$ (FSA-clustered $t$-statistic of the quadratic term above 10), so that
141−$\widehat{\beta}_2=-0.053$), implying that the marginal elasticity of price with respect 217+the marginal elasticity declines from about 0.63 for a 60~m$^2$ dwelling to about 0.41 for a
142−to floor space \emph{declines} with dwelling size. Figure~\ref{fig:nonlinear} traces the 218+350~m$^2$ home (Figure~\ref{fig:nonlinear}). The piecewise-linear spline of
143−implied marginal elasticity: it falls from roughly $0.65$ for a compact 60~m$^2$ dwelling 219+Table~\ref{tab:spline}, which does not impose monotonicity, qualifies this picture: the
144−to about $0.45$ for a large 350~m$^2$ home. Economically, the first square metres of 220+elasticity is 0.57 below 87~m$^2$, peaks at 0.65 between 87 and 113~m$^2$, is 0.58 up to
145−living space are valued most highly and additional space is subject to diminishing 221+149~m$^2$, and falls to 0.41--0.48 above 149~m$^2$. Diminishing returns are thus
146−returns---consistent with the nonparametric hedonic surfaces of \citet{mcmillen2010issues}. 222+concentrated in the upper half of the size distribution rather than smooth, and their
147−The constant-elasticity estimate of $0.55$ is best read as an average over the size 223+economic magnitude is modest: the spline raises the $R^2$ from 0.7756 to 0.7767, and the
148−distribution. 224+constant elasticity of 0.53 is an adequate average for most purposes. The pattern is
149− 225+consistent with the curvature that \citet{mcmillen2010issues} detect nonparametrically and
150−\begin{figure}[t]\centering 226+with the lower value of marginal space in large dwellings, where the land component and the
227+fixed cost of the structure dominate.
228+
229+\input{../results/tables/spline}
230+
231+\begin{figure}[htbp]\centering
151 \includegraphics[width=0.78\textwidth]{fig_nonlinear.png} 232 \includegraphics[width=0.78\textwidth]{fig_nonlinear.png}
152−\caption{Marginal elasticity of price with respect to living area as a function of 233+\caption{Marginal elasticity of the asking price with respect to living area as a function
153−dwelling size, from a grand model with a quadratic in log area (95\% cluster-robust band). 234+of dwelling size, from the grand model with a quadratic in log area (dark line, 95\%
154−The dashed line is the constant-elasticity estimate.} 235+FSA-clustered band) and with a piecewise-linear spline with knots at the size quintiles
236+(horizontal segments, 95\% bands). The dashed line is the constant-elasticity estimate.}
155 \label{fig:nonlinear} 237 \label{fig:nonlinear}
156 \end{figure} 238 \end{figure}
157 239
158 \subsection{The urban price gradient} 240 \subsection{The urban price gradient}
159 \label{subsec:gradient} 241 \label{subsec:gradient}
160 242
161−Classic urban theory predicts that, holding structure fixed, value declines with distance 243+Urban theory predicts that, holding structure fixed, value declines with distance from
162−from employment centres 244+employment centres
163−\citep{alonso1964location,muth1969cities,mills1967aggregative,ahlfeldt2015density}. We 245+\citep{alonso1964location,muth1969cities,mills1967aggregative,ahlfeldt2015density}.
164−compute the great-circle distance from each listing to the 246+Table~\ref{tab:gradient} and Figure~\ref{fig:gradient} relate the location component of
165−nearest of nine major Canadian metropolitan centres and relate it to the location 247+the asking price---the residual of the model without location effects---to the great-circle
166−component of price (the residual from a structure-only model). Figure~\ref{fig:gradient} 248+distance to the nearest of nine metropolitan centres. Listings within 5~km of a centre carry
167−confirms a pronounced gradient: dwellings within the metropolitan core carry location 249+a mean location premium of 21\% over the structure-only benchmark; the premium is 12\% at
168−premia of tens of percent over the structure-only benchmark, and the premium decays 250+5--10~km, close to zero at 10--20~km, 11\% at 20--40~km and 6\% at 40--80~km, turns
169−steadily with distance, turning negative beyond roughly 80~km. A log-linear fit implies a 251+negative beyond about 80~km, and reaches $-13\%$ at 160--320~km and $-38\%$ beyond 320~km.
170−semi-elasticity of $-0.085$ ($t>100$): a doubling of distance to the nearest metro is 252+The log-linear fit implies $\hat\lambda=-0.082$ (FSA-clustered standard error 0.007), so
171−associated with an 8.5\% lower location premium. This agglomeration gradient is precisely 253+that a doubling of the distance to the nearest metro is associated with a $5.5\%$ lower
172−the force that the FSA fixed effects absorb non-parametrically in the grand model 254+location premium ($2^{-0.082}-1$) and a tenfold increase with a $24\%$ lower premium. The
173−\citep{combes2015empirics}. 255+slope is essentially unchanged when nearest-metro intercepts are added ($-0.079$), which
256+shows that it is not driven by differences in price level across metropolitan systems, and
257+the quadratic specification indicates that the gradient steepens with distance: it is flat
258+within the first few kilometres and reaches about $-0.10$ per log unit at 40~km and
259+$-0.21$ at 500~km.
174 260
175−\begin{figure}[t]\centering 261+\input{../results/tables/gradient}
262+
263+\begin{figure}[htbp]\centering
176 \includegraphics[width=0.78\textwidth]{fig_gradient.png} 264 \includegraphics[width=0.78\textwidth]{fig_gradient.png}
177−\caption{Urban price gradient: the location component of price (relative to a 265+\caption{Urban price gradient: mean location premium of the asking price (relative to a
178−structure-only benchmark) against distance to the nearest of nine major Canadian metros. 266+structure-only benchmark) by distance band to the nearest of nine major Canadian
179−The horizontal axis is on a symmetric-log scale.} 267+metropolitan centres. The horizontal axis is on a symmetric-log scale.}
180 \label{fig:gradient} 268 \label{fig:gradient}
181 \end{figure} 269 \end{figure}
270+
271+Two caveats apply. The non-monotonicity between 10 and 40~km reflects the heterogeneity of
272+Canadian suburbs---inner suburbs of Montreal and Toronto with modest premia sit at the same
273+distance as high-value suburbs of Vancouver---and the fact that a single point per
274+metropolitan area is a crude representation of polycentric employment. And the gradient
275+explains only 8\% of the variance of the location component (34\% with metro intercepts):
276+distance to the centre is one determinant of location value among many, which is precisely
277+why the grand model absorbs location non-parametrically rather than imposing a gradient
278+\citep{combes2015empirics}.
modified paper/sections/robustness.tex +159 −93
@@ -1,46 +1,78 @@
1 % Author: Simon-Pierre Boucher — contact@spboucher.ai 1 % Author: Simon-Pierre Boucher — contact@spboucher.ai
2 % ============================================================================ 2 % ============================================================================
3−\section{Robustness, Heterogeneity, and Validation} 3+\section{Robustness, Inference, Heterogeneity and Validation}
4 \label{sec:robustness} 4 \label{sec:robustness}
5 % ============================================================================ 5 % ============================================================================
6 6
7−\subsection{Stability of the implicit prices} 7+\subsection{Stability of the implicit prices across samples}
8 \label{subsec:stability} 8 \label{subsec:stability}
9 9
10−Table~\ref{tab:robustness} re-estimates the grand FSA-fixed-effects model on six 10+Table~\ref{tab:robustness} re-estimates the grand model on eight alternative samples and
11−alternative samples and specifications. The size elasticity stays within the narrow band 11+specifications. The living-area elasticity ranges from 0.49 (houses only) to 0.62
12−$0.51$--$0.62$ and the bathroom premium within $0.10$--$0.12$ log points across every cut: 12+(condominiums only) and lies between 0.51 and 0.53 in every cut that keeps both dwelling
13−restricting to houses, restricting to condominiums, tightening the price trim to the 13+types; the full-bathroom premium ranges from 0.096 (Ontario, Quebec and British Columbia
14−0.5/99.5 percentiles, dropping FSAs with fewer than fifty listings, and limiting the 14+only) to 0.121 (condominiums). Tightening the price trim to the 0.5 and 99.5 percentiles,
15−sample to the three largest provinces. The condominium subsample exhibits both the highest 15+dropping FSAs with fewer than fifty listings, capping storey and parking counts at their
16−fit ($R^2=0.81$) and the largest size elasticity, consistent with condominium prices being 16+99th percentiles and excluding the nine pooled residual categories all leave the headline
17−more tightly pinned down by floor area and location and less by idiosyncratic lot and 17+coefficients within one or two standard errors of the baseline. The condominium subsample
18−structure features. The overall picture is one of striking parameter stability: the 18+exhibits both the highest fit ($R^2=0.81$) and the largest size elasticity, consistent with
19−headline implicit prices are not artefacts of a particular sample definition. 19+condominium prices being more tightly determined by floor area and location and less by lot
20+and structure features that the data do not record. Two cuts deserve comment. Capping
21+storeys and parking lowers the elasticity to 0.51 and raises the $R^2$ to 0.78, confirming
22+that the extreme counts are data errors rather than information; and excluding the pooled
23+categories raises the $R^2$ to 0.785, as expected when heterogeneous residual groups are
24+removed, without moving the coefficients. The implicit list prices are therefore not
25+artefacts of a particular sample definition.
20 26
21 \input{../results/tables/robustness} 27 \input{../results/tables/robustness}
22 28
29+\subsection{Sensitivity of inference to the level of clustering}
30+\label{subsec:inference_results}
31+
32+Table~\ref{tab:se_comparison} reports the grand-model coefficients with
33+heteroskedasticity-robust, FSA-clustered, province-clustered and two-way clustered
34+standard errors, together with the $p$-value of the province-level wild-cluster bootstrap.
35+Clustering by FSA inflates the HC1 standard errors by a factor of 2.5 to 3, and clustering
36+by province inflates them by a further factor of four, so that the living-area elasticity
37+has a standard error of 0.004 under HC1, 0.009 under FSA clustering and 0.037 under
38+province clustering. The ranking of the coefficients is unaffected: living area, full
39+bathrooms and lot area have province-level $t$-statistics of 14, 9 and 11 and bootstrap
40+$p$-values at the minimum attainable value of 0.004, so that their implicit prices are
41+statistically robust even under the most conservative design. The half-bathroom and bedroom
42+coefficients, by contrast, have province-level $t$-statistics of $-1.1$ and $-0.7$ and
43+bootstrap $p$-values of 0.52 and 0.58: their statistical significance in
44+Table~\ref{tab:regression} depends on treating neighbourhoods as independent, and we
45+accordingly describe them as economically and statistically negligible. The two-way
46+estimator is indistinguishable from the province-level one, which indicates that the
47+province-level dependence dominates.
48+
49+\input{../results/tables/se_comparison}
50+
23 \subsection{Implicit prices along the price distribution} 51 \subsection{Implicit prices along the price distribution}
24 \label{subsec:quantile} 52 \label{subsec:quantile}
25 53
26−OLS recovers the implicit price at the conditional mean, but buyers at the bottom and top 54+OLS recovers the implicit price at the conditional mean, but buyers and sellers at the
27−of the market may value attributes differently \citep{zietz2008determinants}. We estimate 55+bottom and top of the market may value attributes differently \citep{zietz2008determinants}.
28−quantile hedonic regressions \citep{koenker1978regression} at the 10th through 90th 56+Table~\ref{tab:quantile} and Figure~\ref{fig:quantile} report quantile hedonic regressions
29−percentiles of price (Table~\ref{tab:quantile}, Figure~\ref{fig:quantile}). Two patterns 57+of Equation~\eqref{eq:quantile} at the 10th to 90th percentiles of the asking price on the
30−stand out. The living-area elasticity is roughly flat-to-rising, climbing from $0.56$ at 58+house subsample with province effects. The living-area elasticity is essentially flat
31−the bottom to $0.60$ at the top, indicating that floor space is valued slightly more in 59+across the distribution, between 0.57 and 0.59, so that floor space is valued
32−expensive segments. The lot elasticity rises more steeply across the distribution, 60+proportionally in cheap and expensive segments alike. The full-bathroom premium declines
33−consistent with land being a luxury component of value. The bathroom premium is stable 61+monotonically from 0.19 log points at the first decile to 0.10 at the ninth: an additional
34−around $0.10$--$0.13$ throughout. The mean-based estimates in Table~\ref{tab:regression} 62+bathroom matters most, in proportional terms, in the lower segment of the market, where it
35−are thus representative, but they mask economically sensible distributional variation. 63+is most likely to signal a renovated or larger-than-typical dwelling. The lot elasticity
64+rises from 0.006 to 0.053 across the distribution, consistent with land being a luxury
65+component of value whose implicit price rises with the price of the dwelling. The
66+conditional-mean estimates of Table~\ref{tab:regression} are thus representative for floor
67+space but mask economically sensible distributional variation for bathrooms and land.
36 68
37 \input{../results/tables/quantile} 69 \input{../results/tables/quantile}
38 70
39−\begin{figure}[t]\centering 71+\begin{figure}[htbp]\centering
40 \includegraphics[width=\textwidth]{fig_quantile.png} 72 \includegraphics[width=\textwidth]{fig_quantile.png}
41−\caption{Implicit prices across the conditional price distribution. Quantile estimates 73+\caption{Implicit list prices across the conditional price distribution. Quantile estimates
42−(with 95\% confidence intervals) of the living-area elasticity (left) and the 74+(with 95\% confidence intervals) of the living-area elasticity (left) and the full-bathroom
43−full-bathroom premium (right); the dashed line is the OLS estimate.} 75+premium (right); the dashed line is the OLS estimate.}
44 \label{fig:quantile} 76 \label{fig:quantile}
45 \end{figure} 77 \end{figure}
46 78
@@ -48,102 +80,136 @@ full-bathroom premium (right); the dashed line is the OLS estimate.}
48 \label{subsec:spatial} 80 \label{subsec:spatial}
49 81
50 A central justification for the neighbourhood fixed effects is that they should absorb the 82 A central justification for the neighbourhood fixed effects is that they should absorb the
51−spatial dependence that pervades raw housing residuals 83+spatial dependence that pervades hedonic residuals
52−\citep{anselin1988spatial,dubin1988estimation,basu1998analysis}. We test 84+\citep{anselin1988spatial,dubin1988estimation,basu1998analysis}. We test this directly with
53−this directly by computing Moran's~$I$ \citep{moran1950notes} on the residuals, using 85+Moran's~$I$ of Equation~\eqref{eq:moran}. On a random subsample of 15{,}000 listings with
54−row-standardised $k$-nearest-neighbour spatial weights ($k=10$) on a random sample of 86+$k=10$ nearest neighbours, the residuals of the model without location effects display
55−15{,}000 listings. The structure-only model leaves enormous spatial autocorrelation in its 87+strong positive spatial autocorrelation, $I=0.50$ (permutation $z$-score 141, $p=0.005$, the
56−residuals, $I=0.46$ ($z=145$, $p<0.01$): nearby dwellings are mispriced in the same 88+smallest value attainable with 199 permutations): nearby dwellings are mispriced in the same
57−direction---the signature of omitted location. The grand model with FSA fixed effects cuts 89+direction, the signature of omitted location. The grand model with FSA fixed effects cuts
58−this to $I=0.08$ ($z=23$), an 82\% reduction, confirming that the neighbourhood effects 90+this to $I=0.06$ ($z=16$), a reduction of 87\%. Figure~\ref{fig:moran} contrasts the two
59−absorb the overwhelming majority of the spatial signal. Figure~\ref{fig:moran} contrasts 91+Moran scatterplots, and Table~\ref{tab:moran_sensitivity} in the appendix shows that the
60−the two Moran scatterplots. The small residual autocorrelation that remains is 92+conclusion is insensitive to the weight matrix and the subsample: for $k=5$ the statistic
61−within-neighbourhood and could be addressed by finer geographies or an explicit spatial 93+falls from 0.52 to 0.11 and for $k=20$ from 0.47 to 0.03, and a second subsample gives the
62−model \citep{lesage2009introduction}, but it is an order of magnitude smaller than the 94+same figures to the second decimal. The residual autocorrelation that remains is
63−dependence the fixed effects remove, vindicating the design over a parametric spatial-lag 95+within-neighbourhood dependence that the FSA grid cannot capture and that could be
64−alternative \citep{gibbons2012mostly}. 96+addressed by finer geographies or an explicit spatial error model
65− 97+\citep{kelejian1998generalized,lesage2009introduction}; it is an order of magnitude smaller
66−\begin{figure}[t]\centering 98+than the dependence that the fixed effects remove, which supports the design over a
99+parametric spatial-lag alternative \citep{gibbons2012mostly}. The permutation test rejects
100+the null of no residual autocorrelation in every case, so the FSA effects reduce but do not
101+eliminate spatial dependence, and the clustered inference of Section~\ref{subsec:inference}
102+is required.
103+
104+\begin{figure}[htbp]\centering
67 \includegraphics[width=\textwidth]{fig_moran.png} 105 \includegraphics[width=\textwidth]{fig_moran.png}
68 \caption{Moran scatterplots of model residuals against their spatial lag ($k=10$ nearest 106 \caption{Moran scatterplots of model residuals against their spatial lag ($k=10$ nearest
69−neighbours, 15{,}000-listing sample). Left: structure-only model. Right: grand model with 107+neighbours, 15{,}000-listing subsample). Left: model without location effects. Right: grand
70−FSA fixed effects. The slope is Moran's~$I$; it collapses from 0.46 to 0.08.} 108+model with FSA fixed effects. The slope is Moran's~$I$.}
71 \label{fig:moran} 109 \label{fig:moran}
72 \end{figure} 110 \end{figure}
73 111
74−\subsection{Do structural prices transfer across space?}
75−\label{subsec:lopo}
76−
77−As a demanding test of external validity we perform leave-one-province-out
78−cross-validation: the structural model is estimated on all provinces but one and used to
79−predict the held-out province, allowing only a province-specific intercept (the price
80−\emph{level} is not identified out of region). Table~\ref{tab:lopo} reports the
81−within-province $R^2$. The structural implicit prices transfer well to most of the
82−country, with a mean held-out $R^2$ of $0.36$ and values above $0.40$ for the large
83−central and western markets; transfer is weaker for the small Atlantic samples, where
84−idiosyncratic stock and thin data dominate. That structural prices generalise across
85−provinces---even as price \emph{levels} differ by a factor of nine---reinforces the
86−paper's central decomposition: structure is broadly priced the same everywhere, and it is
87−location that varies.
88−
89−\input{../results/tables/lopo}
90−
91 \subsection{Heterogeneity across provinces} 112 \subsection{Heterogeneity across provinces}
92 \label{subsec:heterogeneity} 113 \label{subsec:heterogeneity}
93 114
94 Estimating the within-FSA model province by province reveals economically meaningful 115 Estimating the within-FSA model province by province reveals economically meaningful
95 heterogeneity in the size elasticity (Figure~\ref{fig:heterogeneity}). The elasticity is 116 heterogeneity in the size elasticity (Figure~\ref{fig:heterogeneity}). The elasticity is
96−lowest in the high-price coastal markets---about $0.49$ in British Columbia and $0.50$ in 117+lowest in Newfoundland and Labrador (0.41), Ontario (0.47), British Columbia (0.49) and Nova
97−Ontario---and highest in the Prairies, reaching $0.65$--$0.66$ in Saskatchewan and 118+Scotia (0.50), intermediate in Quebec (0.57), Alberta (0.59) and New Brunswick (0.61), and
98−Manitoba. The pattern is intuitive: where land and location dominate value (Vancouver, 119+highest in Manitoba (0.66) and Saskatchewan (0.73). For the large markets the pattern is
99−Toronto), an extra square metre of structure adds proportionally less, whereas in 120+intuitive: where land and location dominate value, as in Toronto and Vancouver, an extra
100−lower-priced markets the building itself is a larger share of value and floor space 121+square metre of structure adds proportionally less, whereas in lower-priced markets the
101−carries more weight. The bathroom premium shows the mirror pattern, larger in the Prairies 122+building itself is a larger share of value and floor space carries more weight. The low
102−and Atlantic provinces than in the coastal metros. 123+elasticity in Newfoundland and Labrador, a cheap market, does not fit this reading and is
103− 124+estimated on 1{,}274 listings with a wide confidence interval; it may reflect the
104−\begin{figure}[t]\centering 125+prevalence of large, inexpensive rural dwellings whose size is weakly priced. The bathroom
126+premium is largest in the Atlantic provinces and Manitoba (0.20--0.26) and smallest in
127+British Columbia (0.09) and Ontario (0.12), mirroring the elasticity pattern.
128+
129+\begin{figure}[htbp]\centering
105 \includegraphics[width=0.8\textwidth]{fig_heterogeneity.png} 130 \includegraphics[width=0.8\textwidth]{fig_heterogeneity.png}
106−\caption{Living-area elasticity of price by province, estimated within FSAs, with 95\% 131+\caption{Living-area elasticity of the asking price by province, estimated within FSAs,
107−cluster-robust confidence intervals. The elasticity is smallest in the expensive coastal 132+with 95\% cluster-robust confidence intervals. Provinces are assigned from the FSA.}
108−markets and largest in the Prairies.}
109 \label{fig:heterogeneity} 133 \label{fig:heterogeneity}
110 \end{figure} 134 \end{figure}
111 135
136+\subsection{Do structural prices transfer across provinces?}
137+\label{subsec:lopo}
138+
139+As a demanding test of transferability we perform leave-one-province-out cross-validation:
140+the model with structural, type and ownership controls is estimated on all provinces but
141+one and used to predict the held-out province, allowing only a province-specific intercept.
142+Table~\ref{tab:lopo} reports the within-province $R^2$. The structural implicit prices
143+transfer reasonably to Manitoba, Alberta, New Brunswick, Ontario, Saskatchewan and Nova
144+Scotia (within-province $R^2$ of 0.46--0.52) and to Newfoundland and Labrador (0.40), but
145+poorly to Quebec (0.19) and not at all to British Columbia ($-0.49$): a model estimated on
146+the rest of Canada predicts British Columbia's asking prices worse than the provincial mean
147+does. The mean held-out $R^2$ is 0.34. The British Columbia result is the mirror image of
148+the heterogeneity just documented---the province has the second-lowest size elasticity and
149+the lowest bathroom premium, so that national coefficients systematically overprice large,
150+well-equipped dwellings there---and it is reinforced by the extreme dispersion of location
151+value within the province, which a single intercept cannot absorb. The lesson is twofold:
152+structural implicit prices are broadly similar across most of the country, but they are not
153+universal constants, and province-specific (or, better, neighbourhood-specific) intercepts
154+are not sufficient to transfer a hedonic model into the most expensive market.
155+
156+\input{../results/tables/lopo}
157+
112 \subsection{Out-of-sample valuation accuracy} 158 \subsection{Out-of-sample valuation accuracy}
113 \label{subsec:oos} 159 \label{subsec:oos}
114 160
115−A hedonic model that fits in-sample need not predict well. Table~\ref{tab:oos} and 161+A hedonic model that fits in sample need not value well out of sample.
116−Figure~\ref{fig:oos} report performance on a randomly held-out 20\% of listings. The model 162+Table~\ref{tab:oos} and Figure~\ref{fig:oos} report performance on a randomly held-out
117−attains an out-of-sample $R^2$ of \textbf{0.764} on log price---essentially identical to 163+20\% of listings whose neighbourhoods are observed in training. The model attains an
118−its in-sample fit, indicating negligible over-fitting despite the thousand-plus location 164+out-of-sample $R^2$ of 0.772 on the log asking price, essentially identical to its in-sample
119−effects. In price levels, after Duan smearing, the \textbf{median absolute valuation error 165+fit, which indicates negligible over-fitting despite the thousand-plus location effects. In
120−is 15.8\%}, the mean is 22.5\%, and \textbf{59\% of held-out dwellings are priced within 166+levels, after Duan smearing, the median absolute percentage error is 15.6\%, the mean 21.9\%,
121−$\pm$20\%} of their actual list price (34\% within $\pm$10\%). These figures are within 167+and 60\% of held-out dwellings are valued within $\pm20\%$ of their asking price (34\% within
122−the accuracy bands reported in the mass-appraisal and automated-valuation literature 168+$\pm10\%$). Table~\ref{tab:spatial_holdout} shows that these figures are stable across five
123−\citep{mccluskey2013prediction,clapp2003semiparametric} and establish the transparent 169+random splits (MdAPE $15.5\pm0.2\%$, $R^2$ $0.769\pm0.010$). They are within the accuracy
124−hedonic specification as a credible valuation benchmark \citep{mullainathan2017machine}. 170+bands reported for mass-appraisal models \citep{mccluskey2013prediction} and establish the
171+transparent specification as a credible benchmark, with the caveat that the target is the
172+asking price, which is smoother and more predictable than the transaction price.
125 173
126 \input{../results/tables/oos} 174 \input{../results/tables/oos}
127 175
128−\begin{figure}[t]\centering 176+\begin{figure}[htbp]\centering
129 \includegraphics[width=0.7\textwidth]{fig_oos.png} 177 \includegraphics[width=0.7\textwidth]{fig_oos.png}
130 \caption{Out-of-sample valuation accuracy on the held-out test fold: the share of listings 178 \caption{Out-of-sample valuation accuracy on the held-out test fold: the share of listings
131−priced within $\pm$10\%, between 10 and 20\%, and beyond 20\% of the actual list price. 179+valued within $\pm$10\%, between 10 and 20\%, and beyond 20\% of the asking price.}
132−The out-of-sample $R^2$ is reported in the title.}
133 \label{fig:oos} 180 \label{fig:oos}
134 \end{figure} 181 \end{figure}
135 182
183+Random holdouts measure accuracy within the spatial support of the training data. The
184+right-hand columns of Table~\ref{tab:spatial_holdout} answer a different question: how well
185+does the model value listings in neighbourhoods it has never seen? Holding out 20\% of the
186+FSAs (229 neighbourhoods and about 27{,}000 listings per replication) and imputing their
187+effect as the mean effect of the training FSAs in the same province yields an $R^2$ of 0.52
188+and a MdAPE of 25\%, with only 41\% of listings within $\pm20\%$; imputing it instead as the
189+inverse-distance weighted mean of the five nearest training FSAs recovers most of the lost
190+accuracy, with an $R^2$ of 0.74, a MdAPE of 17.3\% and 56\% of listings within $\pm20\%$.
191+The gap between the two imputations is a direct measure of the spatial autocorrelation of
192+the neighbourhood effects themselves: location value is smooth enough across adjacent FSAs
193+that a nearest-neighbour interpolation of the fixed effects loses only about two points of
194+MdAPE relative to observing the neighbourhood, whereas a province-level prior loses ten.
195+For valuation practice this means that the model generalises to new neighbourhoods provided
196+their location effect is interpolated spatially rather than set to a regional mean, and it
197+illustrates the general point of \citet{roberts2017cross} that random cross-validation
198+overstates the accuracy to be expected in locations outside the training support.
199+
200+\input{../results/tables/spatial_holdout}
201+
136 \subsection{Model fit and residual behaviour} 202 \subsection{Model fit and residual behaviour}
137 \label{subsec:fit} 203 \label{subsec:fit}
138 204
139−Panel~(a) of Figure~\ref{fig:fit} plots predicted against actual log prices for the grand 205+Panel~(a) of Figure~\ref{fig:fit} plots predicted against actual log asking prices for the
140−model; the cloud hugs the 45-degree line. The residuals (panel~(b)) are approximately 206+grand model; the cloud hugs the 45-degree line. The residuals (panel~(b)) are approximately
141−Gaussian and centred on zero, with only mild heavy tails---typical of housing data and 207+Gaussian and centred on zero with mild heavy tails, typical of housing data and accommodated
142−accommodated by the cluster-robust inference. We interpret the remaining dispersion as a 208+by the cluster-robust inference. We interpret the remaining dispersion as a combination of
143−combination of genuine idiosyncratic pricing, listing strategy, and dwelling-level quality 209+genuine idiosyncratic pricing, listing strategy, and dwelling-level quality (age,
144−(age, renovations, finish) that the data do not record. 210+renovation, finish) that the data do not record.
145 211
146−\begin{figure}[t]\centering 212+\begin{figure}[htbp]\centering
147 \begin{subfigure}{0.46\textwidth}\includegraphics[width=\textwidth]{fig_fit.png} 213 \begin{subfigure}{0.46\textwidth}\includegraphics[width=\textwidth]{fig_fit.png}
148 \caption{Predicted vs.\ actual}\end{subfigure}\hfill 214 \caption{Predicted vs.\ actual}\end{subfigure}\hfill
149 \begin{subfigure}{0.52\textwidth}\includegraphics[width=\textwidth]{fig_resid.png} 215 \begin{subfigure}{0.52\textwidth}\includegraphics[width=\textwidth]{fig_resid.png}
modified results/reproduced/coef_M1.csv +9 −9
@@ -1,10 +1,10 @@
1 ,coef,se,p 1 ,coef,se,p
2−const,9.561064711431111,0.09767380092125273,0.0 2+const,9.561339995612656,0.0975138205714439,0.0
3−ln_living,0.6802383046000451,0.02291770677003229,1.3197837294749597e-193 3+ln_living,0.680151101541571,0.02225036023877001,3.250944656120271e-205
4−bedrooms,0.0008901944719278652,0.0036690138680485892,0.8082959163575186 4+bedrooms,0.000881717941890476,0.003681471793603785,0.8107167492432769
5−bathrooms,0.13002371514122335,0.009378632811233642,1.049316867882094e-43 5+bathrooms,0.1300420624910772,0.007737082026259413,2.1455678578367735e-63
6−half_baths,-0.011264795553404622,0.012482530729836343,0.36682060610960576 6+half_baths,-0.011226042651962129,0.01308779987945478,0.39103127102612834
7−parking_n,0.002393518205781103,0.0018165298619670413,0.18762680702738954 7+parking_n,0.002393267052442348,0.0018144973751326183,0.18717924353471627
8−stories_n,-0.03621223965222726,0.021154396014417143,0.0869322723697676 8+stories_n,-0.036212746651866995,0.021169943546296973,0.08715985499514921
9−has_lot,0.048655984493162385,0.04777675379320422,0.3084865258129831 9+has_lot,0.0485467187442086,0.05021804693875571,0.3336847390760297
10−ln_lot,0.01504219027825254,0.006444026729633571,0.019580841451921346 10+ln_lot,0.01507753157102354,0.00655813056894358,0.02150156792707589
modified results/reproduced/coef_M2.csv +14 −14
@@ -1,15 +1,15 @@
1 ,coef,se,p 1 ,coef,se,p
2−const,9.843219336480711,0.1180119872764956,0.0 2+const,9.843442585698561,0.11924499050268823,0.0
3−ln_living,0.6775136191469533,0.02290249425980483,2.5075782198017083e-192 3+ln_living,0.6774401058228201,0.02229940978651665,1.0315925476609643e-202
4−bedrooms,-0.0011372311640692294,0.0036132514312983625,0.7529598256980948 4+bedrooms,-0.0011526875634604236,0.003663723626879842,0.7530487751430808
5−bathrooms,0.13555014490424772,0.00990992482554156,1.3700308994621599e-42 5+bathrooms,0.13557160049488587,0.008602183605231063,5.850512248942181e-56
6−half_baths,-0.017381604852869936,0.011893921262655453,0.14390965967012603 6+half_baths,-0.01735017374450709,0.013143304892309183,0.18680932998357547
7−parking_n,0.0023484621418566436,0.001802806448900163,0.19268739809055757 7+parking_n,0.0023482296892219767,0.001800599689445429,0.19218668385620752
8−stories_n,-0.03686067090851472,0.021714783183589,0.08960368079906691 8+stories_n,-0.03686646357151385,0.021719221054416645,0.0896188204519229
9−has_lot,0.046959232091369874,0.04728466266543096,0.3206526336262623 9+has_lot,0.046864467697332324,0.050923984376971466,0.3574249870455989
10−ln_lot,0.014130957246089967,0.006388102972615881,0.02696154415150415 10+ln_lot,0.014162650356548075,0.00671213057031579,0.0348576519663217
11−ow_Condo/Strata,-0.16522332384717497,0.07680687513170473,0.0314641418064614 11+ow_Condo/Strata,-0.16557121531370866,0.07816948578278997,0.034166136507899694
12−ow_Freehold,-0.26959038033908245,0.07486360251600414,0.00031688894269064867 12+ow_Freehold,-0.26955970704912513,0.07798753791802891,0.0005473490310620038
13−ow_Leasehold,-0.5031052107456738,0.09051568692363605,2.7255509139764786e-08 13+ow_Leasehold,-0.5030430794992158,0.0929408220775276,6.214756750501774e-08
14−ow_Other,-0.36972531815110077,0.12609553696433143,0.0033667320965700695 14+ow_Other,-0.36966711163446686,0.13178577615835374,0.005030709294561055
15−ow_Unknown,-0.21667199202398263,0.07620168076373092,0.004463476928618826 15+ow_Unknown,-0.21665106883549945,0.0761755551113708,0.004453675093037544
modified results/reproduced/coef_M3.csv +22 −22
@@ -1,23 +1,23 @@
1 ,coef,se,p 1 ,coef,se,p
2−const,10.361438182384454,0.1100152204743566,0.0 2+const,10.32229279287487,0.09834338594220111,0.0
3−ln_living,0.5849693955314611,0.017677270974361045,3.923725476797545e-240 3+ln_living,0.5448446909811273,0.015701996957469953,8.136851780196182e-264
4−bedrooms,-0.003636796797465855,0.0032250936849969147,0.25946515421297534 4+bedrooms,-0.001210656813496712,0.0031836627981895772,0.7037437524367897
5−bathrooms,0.1384376211666279,0.00611969936304834,2.6544273357549274e-113 5+bathrooms,0.14826848198505174,0.00541192847669776,3.0100059910667986e-165
6−half_baths,-0.018397989126264738,0.009597517006732673,0.05524390147707337 6+half_baths,-0.016453385574602436,0.010737372378196998,0.12543670876252033
7−parking_n,0.0014102784512141707,0.0010814544678718798,0.1922140911141791 7+parking_n,0.0007481735424872464,0.0006067663167715692,0.21755690391468785
8−stories_n,-0.025959535393899225,0.015689999677118403,0.0980203876171749 8+stories_n,-0.03392679549699151,0.01980932719025637,0.08677368450803888
9−has_lot,-0.16170482781880885,0.037903848373190274,1.9884394966839912e-05 9+has_lot,-0.22821526773404577,0.030185181256755733,4.015019362274592e-14
10−ln_lot,0.029303815960055123,0.0049626638421236945,3.529546521417734e-09 10+ln_lot,0.03416346040011958,0.0038483380313083437,6.840546970839013e-19
11−ow_Condo/Strata,-0.18851647611832043,0.0864394818013423,0.029190291431387554 11+ow_Condo/Strata,-0.08366682926826896,0.0769370706373326,0.2768287303808751
12−ow_Freehold,-0.31216457449251667,0.08703466144302298,0.0003349282547636122 12+ow_Freehold,-0.12693028702676457,0.07612759512782871,0.09544759360172099
13−ow_Leasehold,-0.5499413552485731,0.1011058252195222,5.350088984782185e-08 13+ow_Leasehold,-0.36008872158894323,0.09148141890853702,8.278364738209732e-05
14−ow_Other,-0.41349373150783164,0.12444239810022012,0.0008912769091980017 14+ow_Other,-0.16903519001198486,0.10812867484950904,0.11798719570449435
15−ow_Unknown,-0.09021428190827951,0.0922108709031278,0.3279024475748098 15+ow_Unknown,-0.09190402299305234,0.07774621937567532,0.2371649167040012
16−pv_BC,0.23967599230938008,0.045816536700054054,1.684027256853807e-07 16+pv_BC,0.30896402123779176,0.033670261802312064,4.4669993949449514e-20
17−pv_MB,-0.22929989304925064,0.044565200040833426,2.671393087504706e-07 17+pv_MB,-0.1801827624349893,0.04218206919349681,1.9412013047108803e-05
18−pv_NB,-0.6171892224918915,0.1100500362891499,2.04370785911378e-08 18+pv_NB,-0.4236497517820709,0.03881777010854748,9.901796664784766e-28
19−pv_NL,-0.635020848272304,0.050414630879357165,2.2222970952154956e-36 19+pv_NL,-0.572521835547671,0.044690433077102854,1.4258889907081466e-37
20−pv_NS,-0.1619570894024912,0.054527772851922174,0.002976290511285856 20+pv_NS,-0.18755102304680749,0.03949271085407294,2.0442138023387845e-06
21−pv_ON,0.2560522817034921,0.026930851569243172,1.9479762311022223e-21 21+pv_ON,0.31138619646985427,0.023606284835922184,9.910458666224614e-40
22−pv_QC,-0.11980368368208992,0.05683812454953523,0.03504785932733063 22+pv_QC,0.1692491833881899,0.04129572830590985,4.1589535798889026e-05
23−pv_SK,-0.37887408102521025,0.04709066577724386,8.580274911611256e-16 23+pv_SK,-0.32405450154560056,0.045352051210122604,8.979248678198847e-13
modified results/reproduced/coef_M5.csv +25 −25
@@ -1,26 +1,26 @@
1 ,coef,se,p 1 ,coef,se,p
2−const,10.31279516219887,0.23915658007410237,0.0 2+const,10.306380896370845,0.2363871201578619,0.0
3−ln_living,0.5300775244939722,0.010200096739191443,0.0 3+ln_living,0.528603988702865,0.009336508213523616,0.0
4−bedrooms,-0.0030182556241014962,0.002856962415858243,0.2907598469108321 4+bedrooms,-0.005701483354912217,0.0020961768587640897,0.006529300252618553
5−bathrooms,0.11107079513655177,0.0034720178610876534,0.0 5+bathrooms,0.11212899662672808,0.0037658828512810677,0.0
6−half_baths,-0.031740231596007605,0.007585288657888845,2.8586225252480446e-05 6+half_baths,-0.03381853074122752,0.006601001221249872,3.003255142353112e-07
7−parking_n,0.0008080165147721341,0.0006225344924431983,0.19430569260236452 7+parking_n,0.0006671149100617351,0.0005045200141277319,0.1860761270696174
8−stories_n,0.0009042377409267352,0.00040373695287741865,0.02511232243560446 8+stories_n,0.0006611472321418766,0.00022376620909993035,0.0031304025500593635
9−has_lot,-0.41697659840283324,0.046463184959439206,0.0 9+has_lot,-0.4590252604495712,0.017764380734748737,0.0
10−ln_lot,0.060959009581207396,0.0071746528194990096,0.0 10+ln_lot,0.06712720020098861,0.0025251740675062365,0.0
11−bt_Duplex,0.12450902778408916,0.02925594946228214,2.0825326801254818e-05 11+bt_Duplex,0.14646740212272713,0.016437019615481767,0.0
12−bt_Fourplex,0.2941177183060848,0.04857047100799493,1.3999594816738181e-09 12+bt_Fourplex,0.32825934324211564,0.04824907061721323,1.021538409418099e-11
13−bt_House,0.357496779086561,0.04729768830050037,4.085620730620576e-14 13+bt_House,0.37698603269409214,0.04076764583619312,0.0
14−bt_Manufactured,-0.06390862705637057,0.05730219485889019,0.2647257046303342 14+bt_Manufactured,-0.039734984684450345,0.049750264218961344,0.4244708143906726
15−bt_Other,0.07996731040275282,0.04765137781299006,0.09331310682009764 15+bt_Other,0.09966462904427455,0.04002904299791172,0.012781214290527032
16−bt_Row/Townhouse,-0.014243581329127147,0.02121255684232755,0.5019215913861708 16+bt_Row/Townhouse,0.0015191251566002623,0.008401641803346719,0.856514443121497
17−bt_Triplex,0.32485319869009294,0.041832332622528515,8.215650382226158e-15 17+bt_Triplex,0.3590901483485581,0.05639593378796979,1.9237766935020773e-10
18−ow_Condo/Strata,0.08358479240132341,0.03996097657533153,0.03646890495104582 18+ow_Condo/Strata,0.0973595035654151,0.030715243142314233,0.0015257251144307205
19−ow_Freehold,0.07046226049616404,0.054388507226910514,0.19513544536921978 19+ow_Freehold,0.10187251602651336,0.03245811991056548,0.0016976662275318688
20−ow_Leasehold,-0.15835406185702816,0.0642648249973242,0.013736311088748954 20+ow_Leasehold,-0.12906049992202226,0.04857290986806791,0.007882847405300764
21−ow_Other,-0.17609324142692748,0.07409117196622711,0.017467807461515994 21+ow_Other,-0.14164871593080128,0.05507202021145231,0.010109443830328635
22−ow_Unknown,0.16650935659680718,0.02780116256106644,2.107529262218577e-09 22+ow_Unknown,0.10091175143550621,0.06234723379526342,0.10554537701103506
23−cat_condo,-0.00688524619431511,0.23334810769576403,0.9764607707915718 23+cat_condo,-0.014016687087901323,0.23122419709279196,0.9516622713234364
24−cat_house,-0.10388206170846732,0.23651611652549687,0.6605038102307772 24+cat_house,-0.11583371852337912,0.23429885241215836,0.6210346659617041
25−cat_plex,-0.09993184933709527,0.2366941764080861,0.6728803734090887 25+cat_plex,-0.0951181661072155,0.23473262257454391,0.6853163912633529
26−cat_townhouse,0.09414140867972552,0.2414032609745756,0.6965545065924998 26+cat_townhouse,0.20848504007552057,0.23497030805437424,0.3749268301635771
modified results/reproduced/ext2.json +11 −11
@@ -1,21 +1,21 @@
1 { 1 {
2 "nonlin": { 2 "nonlin": {
3− "b1": 1.1452714885176427, 3+ "b1": 1.1466604606415272,
4− "b2": -0.06237402986748119, 4+ "b2": -0.06266479043890333,
5− "r2": 0.7703503373020513 5+ "r2": 0.7764569407005814
6 }, 6 },
7 "gradient": { 7 "gradient": {
8− "beta_logdist": -0.08208965710370426, 8+ "beta_logdist": -0.08209966126415225,
9− "se": 0.0008188824957605701, 9+ "se": 0.0008189534565183433,
10− "r2": 0.08291461383008458 10+ "r2": 0.08293509447883551
11 }, 11 },
12 "moran": { 12 "moran": {
13− "struct_I": 0.49414633193493007, 13+ "struct_I": 0.494945488727443,
14− "struct_z": 153.38454763939137, 14+ "struct_z": 140.66973472615442,
15 "struct_p": 0.005, 15 "struct_p": 0.005,
16− "grand_I": 0.07233897724866778, 16+ "grand_I": 0.062349924697923644,
17− "grand_z": 20.208228113147626, 17+ "grand_z": 16.161802404122753,
18 "grand_p": 0.005 18 "grand_p": 0.005
19 }, 19 },
20− "lopo_mean": 0.31451087874557027 20+ "lopo_mean": 0.3409872504108599
21 } 21 }
\ No newline at end of file
modified results/reproduced/fit.json +12 −10
@@ -1,22 +1,24 @@
1 { 1 {
2 "M1": { 2 "M1": {
3− "r2": 0.4665611989553674, 3+ "r2": 0.4665364059791267,
4− "n": 83542 4+ "n": 83524
5 }, 5 },
6 "M2": { 6 "M2": {
7− "r2": 0.4696655504941184, 7+ "r2": 0.4696354839786243,
8− "n": 83542 8+ "n": 83524
9 }, 9 },
10 "M3": { 10 "M3": {
11− "r2": 0.5693124584846623, 11+ "r2": 0.6045871453089328,
12− "n": 83542 12+ "n": 83524
13 }, 13 },
14 "M4": { 14 "M4": {
15− "r2": 0.7657314371141364, 15+ "r2": 0.7692004500025985,
16− "n": 83542 16+ "n": 83524,
17+ "n_fe": 1126
17 }, 18 },
18 "M5": { 19 "M5": {
19− "r2": 0.7695479150272374, 20+ "r2": 0.7756471970293983,
20− "n": 142146 21+ "n": 142121,
22+ "n_fe": 1155
21 } 23 }
22 } 24 }
\ No newline at end of file
modified results/reproduced/fsa_premia.csv +870 −869
@@ -1,870 +1,871 @@
1 fsa_c,fe,n,prov,lat,lon,premium_pct 1 fsa_c,fe,n,prov,lat,lon,premium_pct
2−V6S,1.1804782045116122,107,BC,49.25335851214953,-123.2259642411215,227.03700911064502 2+V6S,1.17526912822097,107,BC,49.25335851214953,-123.2259642411215,225.88155390516368
3−V6T,1.1053952849514863,61,BC,49.26204722459016,-123.24006857868852,203.3812977040153 3+V6T,1.0972184291976694,61,BC,49.26204722459016,-123.24006857868852,201.41356286837836
4−V8E,1.078189575214807,132,BC,50.10202857348485,-122.97235536969697,195.2388568337827 4+V8E,1.0807668765341398,132,BC,50.10202857348485,-122.97235536969697,196.49540833038782
5−V6G,1.0316073687454952,138,BC,49.289252171739136,-123.13348826014492,181.8013827877746 5+V6G,1.0410980329029769,138,BC,49.289252171739136,-123.13348826014492,184.96400910399754
6−V7T,1.0144316693907731,54,BC,49.32848744444445,-123.14147361111111,177.00257635944098 6+V7T,1.0210648698162883,54,BC,49.32848744444445,-123.14147361111111,179.3120806595744
7−V5Y,0.9958410224213045,114,BC,49.254106732456144,-123.11079856754387,171.9004917241993 7+V5Y,0.9993683882860218,114,BC,49.254106732456144,-123.11079856754387,173.31725968528366
8−V5Z,0.9795490900266165,174,BC,49.24777875402299,-123.11981959022988,167.50659700062286 8+V5Z,0.9834038311932753,174,BC,49.24777875402299,-123.11981959022988,168.98851586500302
9−V6Z,0.9692717721220476,235,BC,49.27605226255319,-123.12563951702128,164.77142584817287 9+V6Z,0.977874276992598,235,BC,49.27605226255319,-123.12563951702128,167.50523401026953
10−V6M,0.9689812312964965,64,BC,49.23410638125,-123.1465720203125,164.69451011364615 10+V6M,0.9725709645710968,64,BC,49.23410638125,-123.1465720203125,166.09032534747473
11−V6K,0.9512844025434589,86,BC,49.26588249186047,-123.16110177790698,160.0514614888253 11+V6K,0.9535247073420147,86,BC,49.26588249186047,-123.16110177790698,161.07025905732186
12−V6E,0.9415239596107334,147,BC,49.28400365578232,-123.12564494761905,157.5255908997475 12+V6E,0.9497588721736324,147,BC,49.28400365578232,-123.12564494761905,160.08896035861179
13−V6J,0.9166955501593661,97,BC,49.26358798969073,-123.14441420103093,151.21036303147034 13+V6J,0.9218468686461497,97,BC,49.26358798969073,-123.14441420103093,152.929735331412
14−V6P,0.9031430064513273,180,BC,49.21633932722222,-123.13091813777777,147.82878982396585 14+V6P,0.9049568981072843,180,BC,49.21633932722222,-123.13091813777777,148.69363406865372
15−M5R,0.8698908655621355,117,ON,43.67220532820513,-79.39600831538462,139.723458624102 15+M5R,0.8782672497030353,117,ON,43.67220532820513,-79.39600831538462,142.14388249638336
16−V5V,0.8174453352810126,66,BC,49.2510103469697,-123.09044469545454,127.47502973739469 16+V6B,0.8243481414000168,317,BC,49.27784318264984,-123.11714510694007,129.43344718033433
17−V6B,0.8159767278677059,317,BC,49.27784318264984,-123.11714510694007,127.14120341228804 17+V5V,0.8156828404166128,66,BC,49.2510103469697,-123.09044469545454,127.45392626354479
18−V7L,0.807700624691377,194,BC,49.31319002010309,-123.07022435515464,125.26911685353777 18+V7L,0.8120588479939885,194,BC,49.31319002010309,-123.07022435515464,126.63112676834483
19−V6H,0.7984133601793226,53,BC,49.259071949056604,-123.1211127018868,123.18666807339773 19+H3Z,0.807085826476779,80,QC,45.483907550875,-73.59167753325,125.50688305950004
20−V5T,0.7756421441723007,146,BC,49.26285982212329,-123.09317585157534,118.16186381971949 20+V6H,0.8024619813413025,53,BC,49.259071949056604,-123.1211127018868,124.46658110627764
21−H3Z,0.7753115103250867,80,QC,45.483907550875,-73.59167753325,118.08974404664542 21+M4V,0.7826151024442844,79,ON,43.686205711392404,-79.40124440632911,120.05553756911902
22−M4V,0.7724727779611622,79,ON,43.686205711392404,-79.40124440632911,117.47152352843244 22+V5T,0.7807184089863208,146,BC,49.26285982212329,-123.09317585157534,119.63855523945735
23−M4G,0.7642882272477791,57,ON,43.7090933877193,-79.36629159649122,115.69888085264006 23+M4G,0.7688424536373797,57,ON,43.7090933877193,-79.36629159649122,117.04556515758502
24−M5M,0.7632314357613094,62,ON,43.7304442483871,-79.41810049838709,115.47105251644037 24+M5M,0.7606019388466919,62,ON,43.7304442483871,-79.41810049838709,115.26434712404318
25−V7P,0.752041454788166,103,BC,49.324985714563105,-123.11346022427185,113.0733755372494 25+V7P,0.7573725857463602,103,BC,49.324985714563105,-123.11346022427185,114.57030379591929
26−V7J,0.7434590322879703,110,BC,49.31863358181818,-123.03439226363635,111.25251468017066 26+V7J,0.7481867895455604,110,BC,49.31863358181818,-123.03439226363635,112.60832965754051
27−V5X,0.74139171590815,113,BC,49.214213138053104,-123.10437581681416,110.81624001055852 27+V5X,0.7435205078844768,113,BC,49.214213138053104,-123.10437581681416,111.618550398238
28−V5N,0.7348901251769409,170,BC,49.25667369235294,-123.06651573941177,109.45004513099623 28+V7M,0.7404066931609469,143,BC,49.317949494405596,-123.07715153076923,110.9606342862616
29−V7M,0.7323330412171332,143,BC,49.317949494405596,-123.07715153076923,108.91514796015862 29+M5S,0.7398670830327186,81,ON,43.66527621395062,-79.39243932530864,110.84682849948236
30−V6A,0.7317183302559875,87,BC,49.27844599885057,-123.0969782275862,108.7867649920097 30+V6A,0.7375177355155836,87,BC,49.27844599885057,-123.0969782275862,110.3520574485926
31−M5S,0.731346539858279,81,ON,43.66527621395062,-79.39243932530864,108.70915450592777 31+V5N,0.7360196621837929,170,BC,49.25667369235294,-123.06651573941177,110.0371705617551
32−M4W,0.7153519387954302,116,ON,43.672825213793104,-79.38232881551724,105.3974898200682 32+M4W,0.725217962446334,116,ON,43.672825213793104,-79.38232881551724,107.78062133575293
33−T1W,0.7101778224452885,144,BC,51.07958369780555,-115.3408182382014,104.33748397133473 33+T1W,0.7129930252611619,144,AB,51.07958369780555,-115.3408182382014,105.25597952742815
34−V5C,0.70300610554675,334,BC,49.266616878443116,-123.00446478353294,102.87727574317778 34+V5C,0.7110496789234353,334,BC,49.266616878443116,-123.00446478353294,104.85748340472058
35−M6J,0.7027346706338978,103,ON,43.64523133038835,-79.42044304563106,102.82221524052618 35+M6J,0.7063858189834853,103,ON,43.64523133038835,-79.42044304563106,103.90428132277707
36−M4L,0.6945433755858104,80,ON,43.66916659525,-79.31544520050001,101.16762450517211 36+M4L,0.6946148712439855,80,ON,43.66916659525,-79.31544520050001,101.51820542104444
37−M4S,0.6866269389095908,113,ON,43.703525412389375,-79.39309123097345,99.58138072782508 37+H2V,0.6929110617692211,167,QC,45.51882259209581,-73.61069515143713,101.17514912758222
38−V5H,0.6807764258259574,406,BC,49.22717825960591,-123.000975341133,98.4171362831655 38+M4S,0.6922320656789888,113,ON,43.703525412389375,-79.39309123097345,101.03859835184035
39−L6J,0.6790708797152167,70,ON,43.48274887828571,-79.65925323399999,98.0790151306448 39+BC_other,0.6909861843054594,156,BC,49.1725713019993,-123.20161300879089,100.78828407012246
40−M5E,0.6784077430350592,136,ON,43.64484033602941,-79.37409938382353,97.94770521316553 40+V5H,0.6886953519744665,406,BC,49.22717825960591,-123.000975341133,100.32883823490448
41−H2V,0.6699111139308156,167,QC,45.51882259209581,-73.61069515143713,96.27294197642517 41+M5E,0.6878682150415277,136,ON,43.64484033602941,-79.37409938382353,100.16320736321637
42−V5K,0.66471253094417,88,BC,49.28709072545455,-123.00190307215908,95.25524837380401 42+M5T,0.6705678432542886,88,ON,43.653551057045455,-79.39621801784091,96.73009217032622
43−M5T,0.6630552873217685,88,ON,43.653551057045455,-79.39621801784091,94.93193084065415 43+M5P,0.6691296615976036,53,ON,43.69288705283019,-79.41585144528301,96.44736191791277
44−BC_other,0.6614337449661847,178,BC,49.3558738771904,-122.44415465176056,94.61609659684665 44+L6J,0.6688962357214141,70,ON,43.48274887828571,-79.65925323399999,96.4015113718921
45−M5P,0.6602780676018791,53,ON,43.69288705283019,-79.41585144528301,94.39131309290207 45+M5J,0.6651144489953363,136,ON,43.64255669529412,-79.37989593058823,95.66016543287516
46−M5J,0.6553999438184206,136,ON,43.64255669529412,-79.37989593058823,93.44535732570567 46+V5K,0.6583689777911231,88,BC,49.28709072545455,-123.00190307215908,94.34478683299506
47−V5P,0.6552806791872345,50,BC,49.221308523999994,-123.066947012,93.42228751224329 47+M4M,0.6574600731621396,80,ON,43.661866098625,-79.344496877875,94.16822620716361
48−M4M,0.65198389188783,80,ON,43.661866098625,-79.344496877875,92.7856653518877 48+V5P,0.6517675640610547,50,BC,49.221308523999994,-123.066947012,93.06606182898487
49−V8S,0.641183094169243,51,BC,48.45529912882353,-123.24218735,90.7146309227369 49+V8W,0.6493218133931004,101,BC,48.42692640128713,-123.36505527742574,92.59444734012077
50−M6G,0.6394847795643633,55,ON,43.667948712727274,-79.42046832545455,90.39101236052556 50+M5V,0.6481992653719978,608,ON,43.642139918141446,-79.39927199338815,92.37837212447657
51−M5V,0.6389143181866381,608,ON,43.642139918141446,-79.39927199338815,90.28243261452818 51+V8S,0.6436398774111826,51,BC,48.45529912882353,-123.24218735,91.50324103778101
52−M6P,0.6369420167643874,65,ON,43.660300795384615,-79.46310644461538,89.90750815561216 52+M4P,0.6431770557561339,113,ON,43.70969964955753,-79.39240470619468,91.41462969802193
53−M4P,0.6348943633138071,113,ON,43.70969964955753,-79.39240470619468,89.51904124977936 53+M6P,0.642356620048751,65,ON,43.660300795384615,-79.46310644461538,91.25765070529306
54−V5L,0.6317952064186573,58,BC,49.2797864724138,-123.0641884862069,88.93260121055873 54+M6G,0.6413953898288941,55,ON,43.667948712727274,-79.42046832545455,91.07389640090003
55−V5R,0.6309986143115941,195,BC,49.23825596102564,-123.04046092461539,88.78215892019338 55+V5L,0.6344777986844075,58,BC,49.2797864724138,-123.0641884862069,89.75668651962656
56−V8W,0.6275550946413989,101,BC,48.42692640128713,-123.36505527742574,88.13320183208712 56+V5R,0.6333984535278476,195,BC,49.23825596102564,-123.04046092461539,89.55198405128858
57−V7C,0.6257346157859758,190,BC,49.167680536842106,-123.15963086684211,87.7910208772483 57+V7C,0.6294791317206749,190,BC,49.167680536842106,-123.15963086684211,88.81052278838905
58−V5S,0.6189051512019341,138,BC,49.20814695144927,-123.03039088768115,86.51287823380403 58+V5S,0.6203825317239264,138,BC,49.20814695144927,-123.03039088768115,87.10077721304175
59−V7E,0.6148631289320997,134,BC,49.131808500000005,-123.17006823358209,85.76051059409424 59+M5G,0.6164807638103483,56,ON,43.656454582142864,-79.38556616964286,86.37217574516055
60−V5A,0.6106279110167313,121,BC,49.27571034876033,-122.91564597190082,84.97543800190333 60+V7E,0.612891083522055,134,BC,49.131808500000005,-123.17006823358209,85.70435856180477
61−M5G,0.6063599811827952,56,ON,43.656454582142864,-79.38556616964286,84.187658101977 61+M4Y,0.6094583204097851,207,ON,43.6664629410628,-79.3819039231884,85.06797239634682
62−M4Y,0.6003369943295772,207,ON,43.6664629410628,-79.3819039231884,83.08163239140869 62+V5A,0.603149961348282,121,BC,49.27571034876033,-122.91564597190082,83.9041718709705
63−M6S,0.592061079264905,103,ON,43.642857884951454,-79.47543324786407,81.57271679272586 63+M6S,0.5957612366546494,103,ON,43.642857884951454,-79.47543324786407,82.5503621975548
64−L6L,0.5914416126861398,196,ON,43.40279550326531,-79.71027687969388,81.46027339411663 64+V3J,0.5910596229344843,417,BC,49.25901872844433,-122.88441025418952,81.69409540520165
65−V3J,0.5857893430352522,417,BC,49.25901872844433,-122.88441025418952,80.43750420455834 65+H2T,0.5851146798404696,55,QC,45.52445799363637,-73.594340012,80.6171387423831
66−L5H,0.5837005086502931,109,ON,43.54200570247706,-79.60519678504588,80.0609935125797 66+L6L,0.5845693324339911,196,ON,43.40279550326531,-79.71027687969388,80.51866650743385
67−V6X,0.5753475161253988,480,BC,49.181608957689804,-123.1269859278566,78.5632095774166 67+H3J,0.5839256659648087,140,QC,45.48786321028572,-73.56970971307142,80.40251008175004
68−M6K,0.5752793694267674,165,ON,43.63956636872727,-79.41825212878788,78.55104149879877 68+H3B,0.5831734983940129,142,QC,45.49276104415493,-73.59793923485915,80.26686818309012
69−H3J,0.5690686195217985,140,QC,45.48786321028572,-73.56970971307142,77.44554217824937 69+V6X,0.5819923314013515,480,BC,49.181608957689804,-123.1269859278566,80.0540686091789
70−M5A,0.5685767149758085,300,ON,43.654056123900006,-79.36410062996667,77.35827737412278 70+M6K,0.5819567866358102,165,ON,43.63956636872727,-79.41825212878788,80.04766874326697
71−V8Y,0.5676598828600917,61,BC,48.519147915081966,-123.37316194868853,77.19574412867283 71+M5A,0.5773553529005901,300,ON,43.654056123900006,-79.36410062996667,79.22109449810625
72−V0V,0.5671933035845843,159,BC,49.352252605353705,-123.03645617196308,77.11308755117679 72+L5H,0.576073625813267,109,ON,43.54200570247706,-79.60519678504588,78.99152911817919
73−L6K,0.5662736645017535,90,ON,43.44110139511111,-79.68307507288888,76.95028230629113 73+H2J,0.5738666961918695,91,QC,45.529258230329674,-73.58201836043956,78.59694298265826
74−H3B,0.5631330080122484,142,QC,45.49276104415493,-73.59793923485915,76.39541403525307 74+V0V,0.5717085542172698,159,BC,49.352252605353705,-123.03645617196308,78.21192103892028
75−V3H,0.5598895128907591,256,BC,49.28109370378906,-122.84500172046874,75.8242032308791 75+V8V,0.568939987531199,140,BC,48.421299179142856,-123.36135712042856,77.71921181515904
76−M8V,0.5586420168839532,266,ON,43.62014299,-79.4852561931579,75.60499999545705 76+V8Y,0.5665165130350017,61,BC,48.519147915081966,-123.37316194868853,77.28903530927987
77−H2T,0.555187136270546,55,QC,45.52445799363637,-73.594340012,74.99935250766477 77+V9A,0.5663225727155693,269,BC,48.43592613301115,-123.39741033691449,77.25465515109731
78−V9A,0.554676170870422,269,BC,48.43592613301115,-123.39741033691449,74.90995673450776 78+H2Z,0.5655253271019088,59,QC,45.504079639322036,-73.56302240915254,77.11339597138995
79−V8B,0.5539777793365264,171,BC,49.70227148058479,-123.14849389748538,74.78784374783174 79+M8V,0.5648597943710705,266,ON,43.62014299,-79.4852561931579,76.99556042535687
80−L5G,0.55301614522612,132,ON,43.56012846212121,-79.58319322666668,74.6198425859698 80+V3H,0.564474051981556,256,BC,49.28109370378906,-122.84500172046874,76.92729890147302
81−V8V,0.552500459386001,140,BC,48.421299179142856,-123.36135712042856,74.5298168202458 81+L6K,0.5638101557978078,90,ON,43.44110139511111,-79.68307507288888,76.80987652537806
82−M6H,0.5512154197209821,90,ON,43.665936627444445,-79.440062647,74.30568312409139 82+H3G,0.561293227274876,354,QC,45.4970781629096,-73.57571249483051,76.36541827347527
83−H2Z,0.5509174131080784,59,QC,45.504079639322036,-73.56302240915254,74.25374661694937 83+H2Y,0.5606696566403143,113,QC,45.504820934690265,-73.55542577486726,76.25547625955595
84−H2Y,0.5468729210596371,113,QC,45.504820934690265,-73.55542577486726,73.55040201893372 84+V8B,0.5548547799778198,171,BC,49.70227148058479,-123.14849389748538,75.23354648134959
85−V6Y,0.5464942038747733,466,BC,49.16321200064378,-123.13240907210302,73.48468794355938 85+M6H,0.553200974107313,90,ON,43.665936627444445,-79.440062647,74.94398371976443
86−L7R,0.5446753045180734,160,ON,43.333123727625,-79.798798251625,73.16942356027178 86+V6Y,0.5521386530062903,466,BC,49.16321200064378,-123.13240907210302,74.7582357138435
87−V5J,0.5436188811902339,87,BC,49.21711755287357,-122.98784176551725,72.98657993869271 87+L5G,0.5507631147298387,132,ON,43.56012846212121,-79.58319322666668,74.51801432622773
88−H2J,0.54337519536702,91,QC,45.529258230329674,-73.58201836043956,72.94443069735024 88+V5J,0.5458091776851312,87,BC,49.21711755287357,-122.98784176551725,73.65560100448121
89−V5B,0.5424184390295778,69,BC,49.27002504927536,-122.97860230869564,72.77904414718621 89+L7R,0.5447035614730857,160,ON,43.333123727625,-79.798798251625,73.46371065478596
90−H3G,0.5418689773997604,354,QC,45.4970781629096,-73.57571249483051,72.68413476890947 90+V5B,0.5442399596088123,69,BC,49.27002504927536,-122.97860230869564,73.38331119325277
91−M8Y,0.5314437163426666,95,ON,43.627862064842105,-79.49140403652632,70.89320923731736 91+H3K,0.540990418696123,101,QC,45.48020237792079,-73.56505899425743,72.82080946112748
92−V3N,0.5255823637027038,238,BC,49.220909621512604,-122.93663795228778,69.89447370411241 92+M8Y,0.5368836179894719,95,ON,43.627862064842105,-79.49140403652632,72.11252422734135
93−H3K,0.5225612395108933,101,QC,45.48020237792079,-73.56505899425743,69.3819759490384 93+V3N,0.529161514807602,238,BC,49.220909621512604,-122.93663795228778,70.7885719833135
94−M4J,0.5207868502660874,53,ON,43.68624149056603,-79.33681994716981,69.08169288095935 94+H3E,0.5172834525514556,312,QC,45.463389512019226,-73.54601841179488,68.77193527114025
95−V7A,0.5159935646435766,102,BC,49.13961574607843,-123.11682765980393,68.27317530928244 95+M4J,0.5149836611739064,53,ON,43.68624149056603,-79.33681994716981,68.38424100847014
96−V3K,0.5089489254271079,222,BC,49.24278744994002,-122.86744199414414,67.09191715336569 96+M5B,0.5132449909237935,165,ON,43.657262665393944,-79.37669975890908,68.091730701213
97−M5B,0.5031929114215871,165,ON,43.657262665393944,-79.37669975890908,66.13289645414025 97+H2S,0.5106445955501645,74,QC,45.534869613513514,-73.60592596283783,67.6551935729074
98−V5E,0.49960849042481015,103,BC,49.2210851446602,-122.96103201747573,65.53847218169003 98+V7A,0.5099508937021795,102,BC,49.13961574607843,-123.11682765980393,67.53893118568035
99−H3E,0.49880157726176205,312,QC,45.463389512019226,-73.54601841179488,65.40495088678568 99+V3K,0.5088358355592709,222,BC,49.24278744994002,-122.86744199414414,67.35221965266092
100−M2N,0.4973121705344165,508,ON,43.768244577165355,-79.40971892173228,65.15877901073037 100+M2N,0.5034255030416995,508,ON,43.768244577165355,-79.40971892173228,66.44923342731592
101−V8R,0.4960185358362434,83,BC,48.433864826385545,-123.32675938771084,64.94526201976483 101+V5E,0.5025821947169344,103,BC,49.2210851446602,-122.96103201747573,66.30892457324352
102−M8W,0.49520496638206046,59,ON,43.599655339322034,-79.53986481135594,64.81112216641587 102+V8R,0.4994638940480567,83,BC,48.433864826385545,-123.32675938771084,65.7911310799812
103−L7B,0.4936042443827514,89,ON,43.93770927191011,-79.55990434382022,64.54751641348386 103+M2K,0.49540341096665336,169,ON,43.77005613668639,-79.37893308011834,65.11930389171361
104−M6B,0.4923108274560211,72,ON,43.707824917500005,-79.44787965944444,64.33482544920128 104+H3A,0.49494759087545953,99,QC,45.50463486888889,-73.57192755505051,65.04405634653014
105−M2K,0.4889622706651797,169,ON,43.77005613668639,-79.37893308011834,63.78546125539981 105+M6B,0.4931454499158759,72,ON,43.707824917500005,-79.44787965944444,64.74689153931313
106−H2S,0.4871231402319538,74,QC,45.534869613513514,-73.60592596283783,63.48451525338725 106+H3C,0.4930967097869042,659,QC,45.49481268691957,-73.56064805188164,64.738861950255
107−M8Z,0.4835510949270026,105,ON,43.62729407685714,-79.51700381647619,62.90158290844445 107+M8W,0.4892111686539538,59,ON,43.599655339322034,-79.53986481135594,64.1000042835817
108−H3A,0.4802536984864513,99,QC,45.50463486888889,-73.57192755505051,62.36531643627436 108+M8Z,0.4865856256208906,105,ON,43.62729407685714,-79.51700381647619,63.66971777566162
109−H3C,0.47764982917432325,659,QC,45.49481268691957,-73.56064805188164,61.943088323428476 109+L6G,0.48530707826938985,100,ON,43.854794586999994,-79.33263630100001,63.460592008564376
110−M9A,0.47671732422527124,108,ON,43.65755771944445,-79.5263898787037,61.79214598028098 110+L7B,0.4831962266629335,89,ON,43.93770927191011,-79.55990434382022,63.115914864463775
111−L6G,0.47610881714314024,100,ON,43.854794586999994,-79.33263630100001,61.69372426181214 111+H1Y,0.4823216123886552,50,QC,45.5469413234,-73.5762097886,62.973313726546955
112−V4L,0.4750009106749055,56,BC,49.01915098571429,-123.05950948571429,61.514681938217606 112+M9A,0.4810865477613443,108,ON,43.65755771944445,-79.5263898787037,62.77215539890546
113−V8M,0.4724758251619226,68,BC,48.58669803220589,-123.42030706867648,61.10735803499161 113+H4A,0.47970726048698936,111,QC,45.4729043845045,-73.61696003018018,62.547800596774515
114−V6V,0.46121239282697785,78,BC,49.17682761794872,-122.98094028076922,59.302917383336705 114+V8M,0.4773178125423123,68,BC,48.58669803220589,-123.42030706867648,62.159864749558565
115−V4B,0.4607953033138201,247,BC,49.02796160186308,-122.80140418079172,59.23648766161384 115+V4L,0.47526751889216207,56,BC,49.01915098571429,-123.05950948571429,61.82773001177493
116−V4M,0.4586472045767333,155,BC,49.02987598774193,-123.08553847548387,58.89479908535795 116+V4B,0.4650643943938377,247,BC,49.02796160186308,-122.80140418079172,60.18497639638867
117−M6E,0.4557754430654226,56,ON,43.68869573928571,-79.44732337857144,58.43914569408124 117+V6V,0.46174768856444176,78,BC,49.17682761794872,-122.98094028076922,59.65457003855212
118−H1Y,0.45573399361347966,50,QC,45.5469413234,-73.5762097886,58.43257861442779 118+V4M,0.45182513396926133,155,BC,49.02987598774193,-123.08553847548387,58.07822248184888
119−M1N,0.45054896557695234,72,ON,43.69452649861111,-79.26598770416666,57.61322726791889 119+H3X,0.4515089007324615,62,QC,45.48277969854839,-73.63506315354839,58.02824079723736
120−H4A,0.44474148811845743,111,QC,45.4729043845045,-73.61696003018018,56.700544760098445 120+M6E,0.450952148509718,56,ON,43.68869573928571,-79.44732337857144,57.940282710619414
121−M9B,0.44141741655146827,134,ON,43.642383943358205,-79.55127546089551,56.18052570383634 121+M1N,0.4470700399118938,72,ON,43.69452649861111,-79.26598770416666,57.32832998318762
122−V8L,0.4402844087039524,116,BC,48.65562943827587,-123.41203305137932,56.003672149736076 122+M9B,0.443961234508386,134,ON,43.642383943358205,-79.55127546089551,56.83998629686313
123−L5E,0.4384119008232674,76,ON,43.5830920156579,-79.56751400013158,55.71182737031886 123+H2H,0.44318657528781125,72,QC,45.53300684277778,-73.57666343305556,56.71853580276951
124−V3B,0.4381594239830589,385,BC,49.27628869674761,-122.77632486068681,55.67251870263421 124+V3B,0.4398747910056386,385,BC,49.27628869674761,-122.77632486068681,56.20037630900037
125−L3R,0.43569036006580947,176,ON,43.855311036931816,-79.32248972954545,55.28862742487484 125+L3R,0.4374758972066806,176,ON,43.855311036931816,-79.32248972954545,55.826117278190665
126−L3T,0.4332793576759261,209,ON,43.8155042723445,-79.40845262038277,54.91467715167857 126+V8L,0.43536510941326867,116,BC,48.65562943827587,-123.41203305137932,55.49754830362834
127−L5J,0.4307227295867225,108,ON,43.51483070259259,-79.6303898437963,54.51912379351196 127+L3T,0.4353280287593169,209,ON,43.8155042723445,-79.40845262038277,55.49178245975064
128−M2M,0.4305992841095872,133,ON,43.78746035263158,-79.41528160977444,54.500050283842214 128+V3L,0.4335213348977101,187,BC,49.216944285026734,-122.9022059106952,55.211110031772925
129−V3L,0.42986851610063087,187,BC,49.216944285026734,-122.9022059106952,54.38718783286951 129+L5E,0.43343170218638793,76,ON,43.5830920156579,-79.56751400013158,55.19719866261963
130−M3H,0.42503481661559,130,ON,43.74061505453846,-79.44508818569231,53.6427272613899 130+M2M,0.4315843795995638,133,ON,43.78746035263158,-79.41528160977444,54.910764022166056
131−L7N,0.4234002966043148,80,ON,43.3461326945,-79.77773671474999,53.39180027754835 131+H4C,0.4314475094688007,115,QC,45.47649434634782,-73.5859912552174,54.88956281657673
132−V3E,0.42156974600514674,159,BC,49.29629804591195,-122.77784996603772,53.11126567037676 132+L5J,0.42944716861976767,108,ON,43.51483070259259,-79.6303898437963,54.580040575186686
133−H2H,0.4215173627508789,72,QC,45.53300684277778,-73.57666343305556,53.10324541408129 133+H2L,0.429179849017544,252,QC,45.517315464920635,-73.55602448519842,54.53872382286333
134−V8N,0.4212281650714269,80,BC,48.476387493124996,-123.32230179749999,53.05897471259158 134+M3H,0.4290035151480416,130,ON,43.74061505453846,-79.44508818569231,54.5114758141477
135−V3M,0.41854162547385637,368,BC,49.20012438967392,-122.92354608970108,52.64832757314997 135+V3M,0.4232119313263673,368,BC,49.20012438967392,-122.92354608970108,53.61919600132599
136−H4C,0.4161095728703602,115,QC,45.47649434634782,-73.5859912552174,52.27752989315648 136+L4K,0.42164075824261305,235,ON,43.809756358808514,-79.52441011289362,53.37802316716647
137−L7S,0.4147427756932494,107,ON,43.323556469439254,-79.80677573831775,52.069539567835356 137+V3E,0.4204583495658373,159,BC,49.29629804591195,-122.77784996603772,53.19677483766243
138−H2L,0.41472337169274454,252,QC,45.517315464920635,-73.55602448519842,52.066588839040875 138+V8N,0.4179594216533956,80,BC,48.476387493124996,-123.32230179749999,52.81442507214496
139−L4K,0.41376264111412725,235,ON,43.809756358808514,-79.52441011289362,51.920563973665665 139+L7S,0.41758591110559473,107,ON,43.323556469439254,-79.80677573831775,52.757357930777445
140−M2J,0.40851328693186795,195,ON,43.778135812820516,-79.34705057076923,51.125168608266705 140+L7N,0.4158177818861284,80,ON,43.3461326945,-79.77773671474999,52.48750182326975
141−V4K,0.40741750994063264,142,BC,49.09987876711268,-123.0508074506338,50.95965982262969 141+H3H,0.4150944015513991,198,QC,45.49211574984848,-73.58344043858585,52.3772352503024
142−H3X,0.40180336076987555,62,QC,45.48277969854839,-73.63506315354839,50.11452435171471 142+M2J,0.413808396468995,195,ON,43.778135812820516,-79.34705057076923,52.181403298759356
143−L6C,0.3995739022703362,104,ON,43.89060367115384,-79.34802891634617,49.780223043411056 143+V8T,0.40600220716156593,88,BC,48.43808258875001,-123.35765040897728,50.99807112204455
144−H3H,0.39699643938263796,198,QC,45.49211574984848,-73.58344043858585,49.394667168632076 144+V4K,0.4043336640621946,142,BC,49.09987876711268,-123.0508074506338,50.746334407638
145−M6N,0.3959882391517223,94,ON,43.674688193617015,-79.4755747137234,49.24412333261212 145+H2X,0.40385009423873947,158,QC,45.5102038413924,-73.56781236512658,50.67345565172572
146−L4J,0.3955158174216123,299,ON,43.80784435979933,-79.45008760247492,49.173633817358954 146+L4J,0.3998045017031058,299,ON,43.80784435979933,-79.45008760247492,50.06512360572004
147−V8T,0.3954137299838138,88,BC,48.43808258875001,-123.35765040897728,49.15840584060125 147+L6C,0.39705775476891003,104,ON,43.89060367115384,-79.34802891634617,49.65349826164858
148−M4C,0.39014316453624853,82,ON,43.6912887792683,-79.30571371341463,48.37432479088053 148+M6N,0.3941324151941371,94,ON,43.674688193617015,-79.4755747137234,49.21635067499308
149−V3C,0.388835669331579,238,BC,49.25600513865546,-122.78412854411765,48.18045284366042 149+H3W,0.39365197626949433,66,QC,45.49156095515151,-73.63825344560605,49.14467855035354
150−H2X,0.3882171519799955,158,QC,45.5102038413924,-73.56781236512658,48.08882900080042 150+M4C,0.3900920246363904,82,ON,43.6912887792683,-79.30571371341463,48.61467466222245
151−V8P,0.38764316662838744,93,BC,48.47469091193548,-123.33396282354839,48.00385257216284 151+V8P,0.38998126088131785,93,BC,48.47469091193548,-123.33396282354839,48.598214454412016
152−L4L,0.38650068317425096,160,ON,43.7952306431875,-79.586533165625,47.83485717505522 152+V3C,0.38964379675812244,238,BC,49.25600513865546,-122.78412854411765,48.54807634864453
153−L4C,0.38593242034592007,327,ON,43.86483785409786,-79.44059626987767,47.75087198608161 153+L4L,0.38561410913203487,160,ON,43.7952306431875,-79.586533165625,47.950678475310006
154−M3A,0.38234749715982363,52,ON,43.75777056538462,-79.32943425384616,47.22214474885107 154+H3S,0.38538092279420944,66,QC,45.51107112287879,-73.62704547499999,47.9161824205782
155−V4A,0.38044824046730774,237,BC,49.03986656741906,-122.79532274247883,46.94279746522048 155+L4C,0.3844731564644404,327,ON,43.86483785409786,-79.44059626987767,47.78197001651592
156−L4B,0.3777181670321345,138,ON,43.851870642753624,-79.41356529130435,46.542179943823946 156+M3A,0.38262830137260206,52,ON,43.75777056538462,-79.32943425384616,47.509585029319304
157−L6M,0.376882006840981,339,ON,43.44442814038348,-79.75053074053096,46.419698420853116 157+L4B,0.38213979218441935,138,ON,43.851870642753624,-79.41356529130435,47.4375428397559
158−L6H,0.3739446166231429,353,ON,43.48226256807365,-79.71528860886686,45.990237686684196 158+V4A,0.3769266300932368,237,BC,49.03986656741906,-122.79532274247883,46.670927013085816
159−L6A,0.3718173218582694,168,ON,43.85975963309524,-79.50502111107143,45.680003515089275 159+M3C,0.3768462561904207,137,ON,43.72279223510949,-79.3353165359124,46.65913897198391
160−H3S,0.3708747449797889,66,QC,45.51107112287879,-73.62704547499999,45.54275360657583 160+L6M,0.3748104020974094,339,ON,43.44442814038348,-79.75053074053096,46.36086608668846
161−H3W,0.3707384706813834,66,QC,45.49156095515151,-73.63825344560605,45.522921221292954 161+L6H,0.37197436418047924,353,ON,43.48226256807365,-79.71528860886686,45.94636916322792
162−L3P,0.3697135810473311,72,ON,43.882825575,-79.2645793638889,45.37385269026082 162+H4P,0.3708056104586932,80,QC,45.500320964875,-73.653716276875,45.775893442559365
163−M3C,0.3673027207183044,137,ON,43.72279223510949,-79.3353165359124,45.02379877103551 163+L6A,0.367547967093789,168,ON,43.85975963309524,-79.50502111107143,45.30178023567806
164−V4P,0.3639694811566033,111,BC,49.068367194721446,-122.77679525598691,44.54120445563725 164+V3T,0.3672597601721178,566,BC,49.18861408988866,-122.84397303988108,45.259909290920874
165−V3T,0.3583480043065411,566,BC,49.18861408988866,-122.84397303988108,43.730948970874216 165+V4P,0.3662759485615314,111,BC,49.068367194721446,-122.77679525598691,45.11707118002462
166−H4P,0.3553610451705909,80,QC,45.500320964875,-73.653716276875,43.30227104017692 166+L3P,0.3613213637865232,72,ON,43.882825575,-79.2645793638889,44.39985457098818
167−M6A,0.34897636477085003,87,ON,43.713655064252876,-79.45583717068966,42.39024643001108 167+H4G,0.3610833149813682,63,QC,45.46368533269841,-73.57123447873015,44.36548444918853
168−L6E,0.3489357226168179,73,ON,43.89922047534247,-79.2700620630137,42.3844595012804 168+M6A,0.353827007425255,87,ON,43.713655064252876,-79.45583717068966,43.32171562721236
169−L4E,0.34707050988821775,198,ON,43.935920685252526,-79.45423850530302,42.119129720230156 169+H4B,0.3511865775749126,61,QC,45.4668393847541,-73.63225761721311,42.9437838617996
170−H4G,0.34345668527850876,63,QC,45.46368533269841,-73.57123447873015,41.606463013458054 170+V9B,0.35054500653010384,498,BC,48.45441336427711,-123.50507767174699,42.85210468153691
171−V9B,0.34157461690065855,498,BC,48.45441336427711,-123.50507767174699,41.340200607943814 171+L6E,0.34923595286538256,73,ON,43.89922047534247,-79.2700620630137,42.66522595421842
172−M3M,0.340626956831497,63,ON,43.73017160603175,-79.48714938396826,41.206321589579574 172+K1S,0.34569589613287166,118,ON,45.40162218135593,-75.69199319576272,42.161075847075224
173−K1S,0.3381891824816226,118,QC,45.40162218135593,-75.69199319576272,40.86251167652652 173+H9S,0.3447119048139399,98,QC,45.44487940408163,-73.7666272044898,42.02125938292649
174−L0P,0.338149863096045,51,ON,43.52162703470588,-80.00628927019608,40.85697315800276 174+M3M,0.3413871996779239,63,ON,43.73017160603175,-79.48714938396826,41.54986463092902
175−V2Y,0.3378276224829034,494,BC,49.14544117938051,-122.63097306337444,40.811590633046094 175+V2Y,0.3405065261587603,494,BC,49.14544117938051,-122.63097306337444,41.425260289432785
176−V8Z,0.3372262638344697,116,BC,48.48143344051724,-123.39820000551724,40.7269378211206 176+L4E,0.33876669540543564,198,ON,43.935920685252526,-79.45423850530302,41.17941819611537
177−V1M,0.33467751454796346,131,BC,49.16789236829544,-122.63967426788602,40.3687168404119 177+V8X,0.3371784946645242,133,BC,48.46558333045113,-123.36953724759398,40.95537489949326
178−M9C,0.3311506838604446,126,ON,43.63645783349206,-79.57141387119047,39.874532107476604 178+M9C,0.33676018045355055,126,ON,43.63645783349206,-79.57141387119047,40.896423594003736
179−V8X,0.33109585357706456,133,BC,48.46558333045113,-123.36953724759398,39.86686295749624 179+V8Z,0.33377967278546694,116,BC,48.48143344051724,-123.39820000551724,40.477105923257504
180−L7L,0.3299453840223126,186,ON,43.38178980392473,-79.76737650123655,39.70604291696338 180+V1M,0.3307387941481054,131,BC,49.16789236829544,-122.63967426788602,40.050580926863
181−V3Z,0.3244111596397202,239,BC,49.04730085529476,-122.77752989349919,38.9350138197706 181+H4R,0.3291694758032024,241,QC,45.51329138576764,-73.70988624414939,39.830969346312095
182−V4E,0.3238696365883542,74,BC,49.12691328971437,-122.90216997681118,38.859797674621646 182+L7L,0.3276384693662239,186,ON,43.38178980392473,-79.76737650123655,39.617051029099294
183−L4S,0.31857691068848465,75,ON,43.91031441333333,-79.4261700016,38.12679233632377 183+V3Z,0.3235927974763137,239,BC,49.04730085529476,-122.77752989349919,39.05334729943175
184−L4G,0.31856342003757493,225,ON,43.998765813333335,-79.46276066222222,38.124928928556415 184+L0P,0.3157466430185069,51,ON,43.52162703470588,-80.00628927019608,37.966582296972206
185−M1M,0.3177863738768571,95,ON,43.728766697894734,-79.22684345610526,38.017641172001085 185+V4E,0.31519166123220177,74,BC,49.12691328971437,-122.90216997681118,37.890034599932186
186−H9S,0.3171117473192809,98,QC,45.44487940408163,-73.7666272044898,37.924562206153766 186+L4S,0.31434256856622794,75,ON,43.91031441333333,-79.4261700016,37.77300287526331
187−M6M,0.3158135419086408,85,ON,43.6942619417647,-79.48466584176471,37.74562396766319 187+M6M,0.3142077570781991,85,ON,43.6942619417647,-79.48466584176471,37.754430743631964
188−L7P,0.3127805400482295,166,ON,43.360644596024095,-79.84873890680723,37.328474161757974 188+L5B,0.3138288062288823,419,ON,43.58468133002386,-79.63852984818617,37.70223847488139
189−H4B,0.3106312635091662,61,QC,45.4668393847541,-73.63225761721311,37.03363425384354 189+M1M,0.3131915116294624,95,ON,43.728766697894734,-79.22684345610526,37.61450953953089
190−L5B,0.3056300047885481,419,ON,43.58468133002386,-79.63852984818617,36.350004525030144 190+L4G,0.3125045519927812,225,ON,43.998765813333335,-79.46276066222222,37.520006389696725
191−H4R,0.3052377874696266,241,QC,45.51329138576764,-73.70988624414939,36.29653617811168 191+L7P,0.30229045851800646,166,ON,43.360644596024095,-79.84873890680723,36.12251340153507
192−K2A,0.3029348882019475,51,QC,45.38773149607843,-75.7896050764706,35.98302012126573 192+H9R,0.2998853699893312,101,QC,45.45726239059406,-73.8144499291089,35.79552008761577
193−V4C,0.29861990607128586,207,BC,49.15516404004479,-122.90830273705352,35.397519939236034 193+K2A,0.29893290404036327,51,ON,45.38773149607843,-75.7896050764706,35.66624105542138
194−M2H,0.2977353015216674,57,ON,43.802804316666666,-79.35995885684211,35.27779963745956 194+M2R,0.29809398383960944,107,ON,43.780080790186915,-79.44509874121495,35.552475631967816
195−M2R,0.2976596813085579,107,ON,43.780080790186915,-79.44509874121495,35.267570288199664 195+M2H,0.29619598283285353,57,ON,43.802804316666666,-79.35995885684211,35.29544090000209
196−L4A,0.29417284431378565,166,ON,43.986498592771085,-79.2666258813253,34.79673565876309 196+H2K,0.29580676462874256,152,QC,45.53025866802631,-73.55666822355263,35.24279169814915
197−L4H,0.2930684073602628,162,ON,43.885418864314815,-79.81617704042593,34.6479433436774 197+L5M,0.29146233104469066,288,ON,43.560154465555556,-79.71829526427084,34.65651281884492
198−L5M,0.29168030907638653,288,ON,43.560154465555556,-79.71829526427084,34.46116842555633 198+V4C,0.290608616530728,207,BC,49.15516404004479,-122.90830273705352,34.5416036562409
199−V4N,0.2913222098919541,391,BC,49.1533318688766,-122.73194988090775,34.413026611092 199+L5R,0.28923058881129715,118,ON,43.60354915847458,-79.65688163381357,34.35632928291605
200−V3Y,0.29004689821046076,124,BC,49.21945656048387,-122.68549274919356,34.24171736766803 200+V4N,0.2882834893028961,391,BC,49.1533318688766,-122.73194988090775,34.22914070912682
201−L7K,0.28985779937756473,57,ON,43.87511605508772,-80.01585890017543,34.216334815568985 201+H9X,0.28819121722855856,66,QC,45.41710128727273,-73.9327119471212,34.216755679282016
202−L7M,0.28695860189390043,242,ON,43.38847158508265,-79.81273113739668,33.827778678055466 202+V3Y,0.28785976889651343,124,BC,49.21945656048387,-122.68549274919356,34.17227713105713
203−L7T,0.28486998697345145,136,ON,43.31194977764706,-79.84213952720587,33.548555678903845 203+H3L,0.28647873967130266,52,QC,45.5472493025,-73.66891250807693,33.987109185728094
204−L5R,0.28320350839385877,118,ON,43.60354915847458,-79.65688163381357,33.32618521080335 204+L4H,0.2855136980334544,162,ON,43.885418864314815,-79.81617704042593,33.85786841782033
205−L9E,0.2825686825919059,81,ON,43.50156401320987,-79.84531200876543,33.241573168151064 205+L7M,0.2852336347866421,242,ON,43.38847158508265,-79.81273113739668,33.820384997689025
206−V1Y,0.27893966828545286,522,BC,49.878937206226055,-119.49267727406131,32.75891391129184 206+L4A,0.28465722394043425,166,ON,43.986498592771085,-79.2666258813253,33.74327170293747
207−H2K,0.2776937920130024,152,QC,45.53025866802631,-73.55666822355263,32.59361572242059 207+H1X,0.28460921290733054,52,QC,45.554701448653844,-73.57006875423077,33.73685070443295
208−M1T,0.27703123029591886,108,ON,43.78121283768519,-79.29809576240741,32.50579336579169 208+M1T,0.28258312006312125,108,ON,43.78121283768519,-79.29809576240741,33.46616174129857
209−L5C,0.2757978389447288,75,ON,43.56143002253333,-79.64395328426667,32.34246261234672 209+L9E,0.280872538549864,81,ON,43.50156401320987,-79.84531200876543,33.23805214802755
210−L1W,0.2720905128473944,86,ON,43.82465718953488,-79.09300978372093,31.852734299109507 210+L7T,0.2807452296905446,136,ON,43.31194977764706,-79.84213952720587,33.22109084327573
211−H9R,0.27160536817561837,101,QC,45.45726239059406,-73.8144499291089,31.78878216187886 211+H4M,0.2775037221113502,77,QC,45.50154046558441,-73.67926745493506,32.78995281370454
212−L3Y,0.2712650947372387,161,ON,44.06078280124223,-79.46152809341615,31.74394556861626 212+H9W,0.27567603435451904,55,QC,45.43171237272727,-73.86369415963637,32.547475896261744
213−V3A,0.26956647077249735,317,BC,49.09596835659738,-122.65821511368323,31.520352099837655 213+H7T,0.2738743302125401,141,QC,45.56247171503546,-73.76089263929077,32.30887956447326
214−T2L,0.2654418746907213,55,BC,51.07511494178182,-114.1220316057091,30.979000965744575 214+L1W,0.27350856106805654,86,ON,43.82465718953488,-79.09300978372093,32.26049390831687
215−H1X,0.26263849891443153,52,QC,45.554701448653844,-73.57006875423077,30.612331803093973 215+L5C,0.2729202608660453,75,ON,43.56143002253333,-79.64395328426667,32.182707916033436
216−H3L,0.2625035703270524,52,QC,45.5472493025,-73.66891250807693,30.594709654562013 216+V1Y,0.27262379295044653,522,BC,49.878937206226055,-119.49267727406131,32.1435257925476
217−L5L,0.2613504565564743,108,ON,43.539662820740745,-79.69211816796296,30.444205887154773 217+V3A,0.2689691536649881,317,BC,49.09596835659738,-122.65821511368323,31.66147027792119
218−M1P,0.2561588520619206,143,ON,43.76638952783217,-79.26548178083917,29.76874603889934 218+L7K,0.2689395436091926,57,ON,43.87511605508772,-80.01585890017543,31.65757183215703
219−V3R,0.2560167047811601,331,BC,49.19229688286874,-122.81132853478071,29.75030107550396 219+G1R,0.26527928676804213,66,QC,46.81043285166666,-71.21550812030303,31.176552168963067
220−H7T,0.25504375161771803,141,QC,45.56247171503546,-73.76089263929077,29.624121502975974 220+L3Y,0.2651193980848394,161,ON,44.06078280124223,-79.46152809341615,31.155580199404696
221−V3V,0.2530114409498969,174,BC,49.17875063774303,-122.85778090112797,29.360952529175254 221+T2L,0.26326214752847704,55,AB,51.07511494178182,-114.1220316057091,30.912217487829242
222−L5V,0.2518941046670265,67,ON,43.59289476850746,-79.68674291238807,29.21649356297893 222+M1P,0.26196419470263294,143,ON,43.76638952783217,-79.26548178083917,30.74240983020724
223−L7G,0.2516729165440695,148,ON,43.64606253405405,-79.91023786108109,29.187915569985456 223+L5L,0.2592573366207857,108,ON,43.539662820740745,-79.69211816796296,30.38898722972567
224−V8K,0.2508555956262157,86,BC,48.85732078,-123.51460901755814,29.082370722137597 224+V3R,0.2535624279305617,331,BC,49.19229688286874,-122.81132853478071,29.648544232041264
225−M9M,0.250558842902886,59,ON,43.73781486355932,-79.54368708474576,29.04407086016718 225+L5V,0.24787756175247733,67,ON,43.59289476850746,-79.68674291238807,28.913600615260005
226−H4M,0.24999606612054437,77,QC,45.50154046558441,-73.67926745493506,28.97146828462638 226+M9M,0.24644424978953663,59,ON,43.73781486355932,-79.54368708474576,28.728959565035762
227−L0B,0.24978304335016552,70,QC,44.09488145,-78.78865007,28.943997351223615 227+V3V,0.24632449876789106,174,BC,49.17875063774303,-122.85778090112797,28.713545063582036
228−H9X,0.2480320017563573,66,QC,45.41710128727273,-73.9327119471212,28.718408613861502 228+L9T,0.2451123360127275,262,ON,43.51137571935114,-79.86930545099236,28.55761782186086
229−L9T,0.24796752411577086,262,ON,43.51137571935114,-79.86930545099236,28.71010942213306 229+H1V,0.24364247763773184,73,QC,45.55560602027398,-73.53918237863013,28.368795135934732
230−V9C,0.24240821014556274,209,BC,48.416148858660286,-123.51049595956938,27.996554787597063 230+L7G,0.24027983003447465,148,ON,43.64606253405405,-79.91023786108109,27.937861060417845
231−G1R,0.24085726100414803,66,QC,46.81043285166666,-71.21550812030303,27.798192505513164 231+V9C,0.2394318933041539,209,BC,48.416148858660286,-123.51049595956938,27.82942382927882
232−V3S,0.2407738382510881,454,BC,49.1192701284593,-122.76601217607927,27.787531673142453 232+L6B,0.23640055032972176,65,ON,43.881371161384614,-79.23594610692308,27.442515725285777
233−V2X,0.237922362386942,419,BC,49.222562085966594,-122.59707398639618,27.42366763214863 233+V3S,0.23545413842954666,454,BC,49.1192701284593,-122.76601217607927,27.32195966865687
234−L6B,0.23743678474795157,65,ON,43.881371161384614,-79.23594610692308,27.361808568372847 234+V2X,0.23488936321965134,419,BC,49.222562085966594,-122.59707398639618,27.250071684347297
235−L9P,0.2324440420020216,70,ON,44.10489174485714,-79.14941283571429,26.727508588470727 235+H4L,0.23479858489749356,74,QC,45.517496101486486,-73.67814538121623,27.23852066064454
236−V4W,0.23068385729957303,92,BC,49.055138149307716,-122.4773074040243,26.504640968103544 236+J4Z,0.234183721481014,221,QC,45.45574204900452,-73.43254233108597,27.16031039590261
237−K1Z,0.23028323410895138,69,QC,45.38943826086957,-75.7428131942029,26.453970425785343 237+K1Z,0.23056038023325004,69,ON,45.38943826086957,-75.7428131942029,26.700398909462365
238−H1V,0.2241121627423738,73,QC,45.55560602027398,-73.53918237863013,25.676016822146796 238+H8N,0.23004437810016853,184,QC,45.44214373027174,-73.61254208,26.63503809797212
239−L5N,0.22182567171466946,190,ON,43.58591173736843,-79.75825687336842,25.388988006740743 239+L0B,0.22835188570120893,70,ON,44.09488145,-78.78865007,26.420890531233177
240−L5A,0.2197715894515022,134,ON,43.59328066985074,-79.61504483873135,25.131693053445648 240+V8K,0.22739052929104142,86,BC,48.85732078,-123.51460901755814,26.29941339850783
241−V3X,0.2193644082089254,183,BC,49.11450359978964,-122.8427320581033,25.080752146977026 241+V4W,0.22668832399895625,92,BC,49.055138149307716,-122.4773074040243,26.210756413377222
242−L9G,0.21858717835722685,187,ON,43.21118370160428,-79.98012703294118,24.983573422530302 242+H1W,0.2259301801736601,87,QC,45.54510330011494,-73.54502566551724,26.115106770391037
243−M1S,0.2180866448951671,97,ON,43.787444254948454,-79.27613653587629,24.921030615514162 243+L5A,0.2246963941824619,134,ON,43.59328066985074,-79.61504483873135,25.959603666880547
244−L3S,0.2167562357713371,74,ON,43.84829711351351,-79.25293174594594,24.754945042003662 244+M1S,0.22183935477931085,97,ON,43.787444254948454,-79.27613653587629,25.600245710363232
245−V3W,0.2167298841101111,468,BC,49.13638065208122,-122.85442025145565,24.751657585270802 245+L9P,0.21697786956904055,70,ON,44.10489174485714,-79.14941283571429,24.991123791702496
246−L4Y,0.21664629925366008,64,ON,43.6208864684375,-79.6047929059375,24.741230671651614 246+L5N,0.21675075802544405,190,ON,43.58591173736843,-79.75825687336842,24.962740087897693
247−J4Z,0.21616933650059256,221,QC,45.45574204900452,-73.43254233108597,24.68174793750142 247+V3X,0.21562857338362199,183,BC,49.11450359978964,-122.8427320581033,24.82258747343462
248−V1W,0.21328276128972076,370,BC,49.832129482891894,-119.47655952902703,24.322363639102274 248+M1H,0.21533871966220317,63,ON,43.77534122857143,-79.24616266031745,24.786412424927807
249−H9W,0.21064971349616676,55,QC,45.43171237272727,-73.86369415963637,23.995447495622212 249+L4Y,0.21521564860822545,64,ON,43.6208864684375,-79.6047929059375,24.771055774627527
250−B3K,0.2106061449473588,57,NS,44.65699289578948,-63.59714011035088,23.990045311599538 250+V3W,0.21450708732184576,468,BC,49.13638065208122,-122.85442025145565,24.682679148670307
251−L9H,0.21033896648360711,139,ON,43.27702428446043,-79.96245085330935,23.956922266851844 251+L3S,0.21250612373514086,74,ON,43.84829711351351,-79.25293174594594,24.433443087101626
252−M1H,0.20942067505305362,63,ON,43.77534122857143,-79.24616266031745,23.84314593528678 252+B3K,0.21224276591701569,57,NS,44.65699289578948,-63.59714011035088,24.400676881835935
253−H8N,0.2085593889264417,184,QC,45.44214373027174,-73.61254208,23.736527472908907 253+L9G,0.20813082776374786,187,ON,43.21118370160428,-79.98012703294118,23.890199237787947
254−H1W,0.20824694341724903,87,QC,45.54510330011494,-73.54502566551724,23.697872589663717 254+M1K,0.2079005554644618,61,ON,43.728040239016394,-79.25964839704918,23.86167404115782
255−L7E,0.20744140978473538,113,ON,43.89710461008849,-79.76053293628318,23.598269915060378 255+M9W,0.20759185741675956,95,ON,43.72228922073684,-79.58006120947368,23.823444085256142
256−M1K,0.20721098520948297,61,ON,43.728040239016394,-79.25964839704918,23.569793117216275 256+J2L,0.2066747968572522,114,QC,45.30858490666667,-72.6717706204386,23.709942540192962
257−L1N,0.20577258488525926,121,ON,43.87736059090909,-78.93659660826447,23.392178058135226 257+M1W,0.2058398427211216,78,ON,43.80231812564103,-79.31967673461538,23.606693522084242
258−M9W,0.20558638780087254,95,ON,43.72228922073684,-79.58006120947368,23.369204933175492 258+V1W,0.20328988509343052,370,BC,49.832129482891894,-119.47655952902703,23.291903212650578
259−H4L,0.205538317468728,74,QC,45.517496101486486,-73.67814538121623,23.36327467705379 259+L1N,0.2029993110803112,121,ON,43.87736059090909,-78.93659660826447,23.25608299401334
260−M1W,0.2034939970028547,78,ON,43.80231812564103,-79.31967673461538,23.11133821706699 260+L4Z,0.20231139029199216,136,ON,43.6058992894853,-79.64538685147058,23.17132173009537
261−L7C,0.20147576139105433,125,ON,43.78316503648,-79.85564845344,22.8631210946336 261+M1J,0.2017484177977701,59,ON,43.74670331694915,-79.22795723220338,23.101999179060016
262−M1J,0.20015689810223247,59,ON,43.74670331694915,-79.22795723220338,22.701188241791414 262+L9H,0.2011124851994698,139,ON,43.27702428446043,-79.96245085330935,23.02373949144676
263−V9J,0.1984099260827385,54,BC,49.776672143703706,-125.12482071407406,22.487019826757184 263+K2P,0.20111007124591843,104,ON,45.41479849423077,-75.6930021576923,23.023442518212356
264−L4Z,0.19805876524468397,136,ON,43.6058992894853,-79.64538685147058,22.444014733518248 264+M3J,0.19832834181800235,66,ON,43.75870534272727,-79.49077877454545,22.681700125638393
265−P1P,0.19738877957983106,92,ON,44.924791784021735,-79.37739580163044,22.3620064741465 265+T2N,0.1956796517757935,136,AB,51.058159152882354,-114.10323192552205,22.357184288808774
266−T2N,0.19607155400478782,136,BC,51.058159152882354,-114.10323192552205,22.20093421734266 266+L7E,0.19449919743960295,113,ON,43.89710461008849,-79.76053293628318,22.212832437198095
267−V0N,0.19391273945034332,581,BC,49.57642752473322,-123.83567457752153,21.937409614707292 267+G1S,0.19161088785980612,51,QC,46.793530874313724,-71.24401846627451,21.860353222084015
268−M3J,0.19370897234524534,66,ON,43.75870534272727,-79.49077877454545,21.91256531305863 268+L7C,0.1898344699088251,125,ON,43.78316503648,-79.85564845344,21.644070464270392
269−K2P,0.1930146359101215,104,QC,45.41479849423077,-75.6930021576923,21.827946357473937 269+M1V,0.18658298432299658,65,ON,43.81505365076923,-79.28574184923077,21.249188846394485
270−V9P,0.19243477643979595,223,BC,49.31774374699551,-124.29305313959641,21.75732374660193 270+P1P,0.18560969680402312,92,ON,44.924791784021735,-79.37739580163044,21.131235934564362
271−L3M,0.1886662627068947,196,ON,43.2000495252551,-79.57639688744898,21.299343095177072 271+L3M,0.1852492759781628,196,ON,43.2000495252551,-79.57639688744898,21.08758558119208
272−L8B,0.18823796065593784,174,ON,43.342240413390805,-79.90926895304598,21.24740146189774 272+V9J,0.18423348086612382,54,BC,49.776672143703706,-125.12482071407406,20.964647853972316
273−T2M,0.1879172847751219,88,BC,51.06505927036364,-114.07836954055682,21.20852657808925 273+H4N,0.18394190710958408,78,QC,45.53066907051282,-73.67492530307693,20.929382878609527
274−L9L,0.18669969417658538,86,ON,44.096615484186046,-78.95768452988372,21.061034026659087 274+V9P,0.1825896605931547,223,BC,49.31774374699551,-124.29305313959641,20.765967056017832
275−L0G,0.18506656951618647,194,ON,44.050904217835054,-79.67670641974226,20.863487619437638 275+L8B,0.1823753970549809,174,ON,43.342240413390805,-79.90926895304598,20.740094084541628
276−M1V,0.1846197696072784,65,ON,43.81505365076923,-79.28574184923077,20.809497886381024 276+T2M,0.18158308925676206,88,AB,51.06505927036364,-114.07836954055682,20.644468653830405
277−L9Y,0.18384413645803252,435,ON,44.5030662103908,-80.25696926636782,20.715830365589593 277+L9Y,0.17969477080500962,435,ON,44.5030662103908,-80.25696926636782,20.416868436045334
278−V4R,0.18376655736929393,107,BC,49.237776287850465,-122.57068483551403,20.706465704729137 278+M9R,0.17787883570182772,62,ON,43.68725427096774,-79.5586979032258,20.198397642065125
279−L3X,0.18236524907748553,104,ON,44.04138856153846,-79.46753677980769,20.537437191650287 279+J3E,0.17776647921268057,66,QC,45.59116374333334,-73.3089478730303,20.18489333076767
280−P0C,0.17780054670032977,61,QC,45.10526486557377,-79.69947767213115,19.988473546599828 280+M1B,0.17723079882201564,149,ON,43.803317,-79.2149676771812,20.120529880814342
281−M1B,0.1763891571147483,149,ON,43.803317,-79.2149676771812,19.819242518194514 281+V0N,0.1768815257333958,581,BC,49.57642752473322,-123.83567457752153,20.078582338336503
282−M9R,0.17576912032541883,62,ON,43.68725427096774,-79.5586979032258,19.744973206995642 282+K1R,0.1768491891457974,106,ON,45.4142082745283,-75.70626637358491,20.074699469519743
283−P0E,0.17340654764681196,58,ON,44.86174264620689,-79.53869767586208,19.462400935098234 283+H7N,0.1764505971715233,81,QC,45.56311512506173,-73.7109016574074,20.026848195198287
284−J2L,0.17309139326543202,114,QC,45.30858490666667,-72.6717706204386,19.42475776804946 284+L3X,0.1748821324176739,104,ON,44.04138856153846,-79.46753677980769,19.838737875055877
285−V4S,0.17001402338850785,60,BC,49.174902812223884,-122.34484167250189,19.057808524799214 285+V4R,0.17405636840748867,107,BC,49.237776287850465,-122.57068483551403,19.73982020523937
286−M1E,0.16988157682496954,132,ON,43.768366069772725,-79.19072617977272,19.042040771413117 286+J8E,0.17292861608085427,310,QC,46.18479280074194,-74.59726172512903,19.6048594598633
287−N9V,0.16903723704107382,67,ON,42.13768198432836,-83.05490569537314,18.941571261604583 287+L9L,0.17170529701865092,86,ON,44.096615484186046,-78.95768452988372,19.458634013777342
288−V2W,0.16903499510276418,152,BC,49.19990025657895,-122.54076818157895,18.941304602238283 288+L0G,0.17136077733740934,194,ON,44.050904217835054,-79.67670641974226,19.417485251951526
289−G1S,0.16602174383787144,51,QC,46.793530874313724,-71.24401846627451,18.58344399842784 289+H4W,0.17003488182776738,120,QC,45.472802090916666,-73.66415563333334,19.25925506601045
290−H4N,0.16561330839867897,78,QC,45.53066907051282,-73.67492530307693,18.53502020706681 290+M1E,0.16910601270125855,132,ON,43.768366069772725,-79.19072617977272,19.148530258317976
291−N0B,0.1646851144554284,479,ON,43.57875182079332,-80.3547770758664,18.42504776502034 291+J4K,0.16842863577675893,81,QC,45.520879472345676,-73.51744505432099,19.06784912218784
292−V4V,0.16300896345508156,176,BC,50.050945243548064,-119.43456814102274,18.22671576636603 292+H9H,0.1679587114533664,81,QC,45.485777092469135,-73.83807338049382,19.01190938850148
293−V9M,0.16292438062847475,71,BC,49.67281577788732,-124.91141238014085,18.21671623946617 293+N9V,0.16664991324662218,67,ON,42.13768198432836,-83.05490569537314,18.856248701346658
294−K1R,0.16257117353881623,106,QC,45.4142082745283,-75.70626637358491,18.174968630384015 294+J4Y,0.16522109892177783,138,QC,45.43730300688406,-73.45070323681159,18.68654645597523
295−N1L,0.16228512244535898,175,ON,43.51137985811428,-80.18754607822858,18.141169385773924 295+N1L,0.16468302158197412,175,ON,43.51137985811428,-80.18754607822858,18.622701093199588
296−H7N,0.1580511181960176,81,QC,45.56311512506173,-73.7109016574074,17.642016625709743 296+J4X,0.163042378886043,84,QC,45.445137734642856,-73.48965533154762,18.42824318667009
297−L4T,0.15389866275370415,72,ON,43.704407573611114,-79.66491500694445,17.15452623506868 297+H8S,0.16089918337354384,64,QC,45.438862841562496,-73.67310251359375,18.174700100571116
298−J8E,0.15255032235436972,310,QC,46.18479280074194,-74.59726172512903,16.99666850127668 298+V2W,0.15983433755254506,152,BC,49.19990025657895,-122.54076818157895,18.048929240193033
299−L9W,0.15124394191990986,223,ON,43.92403650174888,-80.14036480224216,16.843926134192454 299+H7R,0.1588885466757348,52,QC,45.55126828365384,-73.85937917384615,17.937332421845586
300−J4K,0.14984323740544703,81,QC,45.520879472345676,-73.51744505432099,16.68037688819226 300+P0C,0.15486654854239312,61,ON,45.10526486557377,-79.69947767213115,17.46394131821074
301−L1V,0.14752529032366832,112,ON,43.833086972589285,-79.10519722794642,16.410231161787546 301+V9M,0.1512780226450614,71,BC,49.67281577788732,-124.91141238014085,17.04317434092115
302−L0L,0.14365955923849202,277,ON,44.47351584458483,-79.71052313790614,15.961089202895629 302+L4T,0.1506351212559842,72,ON,43.704407573611114,-79.66491500694445,16.96795130464357
303−J4Y,0.14301353045569296,138,QC,45.43730300688406,-73.45070323681159,15.886199194740879 303+J7J,0.1506075926048651,71,QC,45.669819523802815,-73.91754450943662,16.96473137904031
304−V9K,0.1418770063886397,106,BC,49.34103003575472,-124.49989882075472,15.75456655631653 304+N0B,0.15045766609890776,479,ON,43.57875182079332,-80.3547770758664,16.94719658004282
305−J3E,0.1418520196957813,66,QC,45.59116374333334,-73.3089478730303,15.751674268649518 305+P0E,0.15020584117428112,58,ON,44.86174264620689,-79.53869767586208,16.917750068917094
306−H4W,0.1418011948991263,120,QC,45.472802090916666,-73.66415563333334,15.745791362842354 306+H1N,0.14978421444012235,71,QC,45.63860454507043,-73.30701558352114,16.86846481051174
307−V9V,0.14118842752226812,67,BC,49.22770787626866,-124.01844621567164,15.674887843786856 307+V4V,0.14900200902963054,176,BC,50.050945243548064,-119.43456814102274,16.777085408411608
308−L1X,0.13876001816714295,99,ON,43.87296507060606,-79.09863644959596,15.394322665424287 308+V4S,0.1489995936388619,60,BC,49.174902812223884,-122.34484167250189,16.77680334645817
309−M9V,0.13645529271970827,74,ON,43.74569663621621,-79.58294284554054,15.12867667161606 309+L1V,0.1432235848319578,112,ON,43.833086972589285,-79.10519722794642,16.104243726872227
310−H8S,0.13541255950206796,64,QC,45.438862841562496,-73.67310251359375,15.008690743675611 310+J5R,0.14203416523125353,195,QC,45.39404981748718,-73.49770819610256,15.966229158545907
311−J4X,0.13525578348921702,84,QC,45.445137734642856,-73.48965533154762,14.990661553006834 311+L9W,0.13911210473900287,223,ON,43.92403650174888,-80.14036480224216,15.627863425216603
312−N1E,0.13483561946977318,231,ON,43.56429529991342,-80.24257606437229,14.942356763128206 312+M9V,0.13760837254504665,74,ON,43.74569663621621,-79.58294284554054,15.454120748433064
313−L1C,0.13457043151167042,135,ON,43.915537442592594,-78.6954826154074,14.911879475522106 313+H7W,0.13689136879605482,92,QC,45.53145113597826,-73.75233587967391,15.371369381085366
314−L9B,0.13371098404397702,130,ON,43.20781327438462,-79.906366351,14.813161179370326 314+V9V,0.136034248989238,67,BC,49.22770787626866,-124.01844621567164,15.272524662183828
315−L9N,0.13364629512088105,95,ON,44.097551243894735,-79.48612865515788,14.805734279838045 315+L1X,0.13352425462281417,99,ON,43.87296507060606,-79.09863644959596,14.983554083651661
316−L8E,0.13103330118126424,276,ON,43.23032534894927,-79.70976097423913,14.50613918248147 316+H7P,0.13201777903640657,68,QC,45.57778821426471,-73.7929977160294,14.810464576879468
317−H9H,0.13045674057421894,81,QC,45.485777092469135,-73.83807338049382,14.440138481894337 317+K1N,0.13176238088683195,179,ON,45.428573260893856,-75.68628930670391,14.781145940796803
318−V0M,0.12830414386290764,168,BC,49.2799258399177,-121.87038038850376,14.19405996507981 318+V9K,0.12921657043998874,106,BC,49.34103003575472,-124.49989882075472,14.489306541876612
319−P0G,0.12437863620080056,56,QC,45.48389126964286,-80.18177038249999,13.746669000559253 319+L8E,0.12834879625860396,276,ON,43.23032534894927,-79.70976097423913,14.389998772206013
320−N1G,0.12355630283818339,142,ON,43.51916822739437,-80.22523459260563,13.653169768791296 320+L1C,0.12778679553929673,135,ON,43.915537442592594,-78.6954826154074,14.325729571974444
321−J7J,0.12278474793832232,71,QC,45.669819523802815,-73.91754450943662,13.565513928766325 321+N1E,0.12763223099998933,231,ON,43.56429529991342,-80.24257606437229,14.308060233813901
322−L6W,0.12083743217339349,68,ON,43.682876894705885,-79.74447497970588,13.344581195852934 322+L0L,0.12666635535678622,277,ON,44.47351584458483,-79.71052313790614,14.19770616534497
323−H7R,0.12000491668916723,52,QC,45.55126828365384,-73.85937917384615,13.2502593446028 323+J7C,0.12385819846739131,85,QC,45.674720692,-73.85670615941176,13.877470935847702
324−K1N,0.11951938683894593,179,QC,45.428573260893856,-75.68628930670391,13.195286309750331 324+L9N,0.12320280255058169,95,ON,44.097551243894735,-79.48612865515788,13.80286055871871
325−T3B,0.11794579973353975,166,BC,51.09102969589759,-114.1887421325,13.017303739085984 325+L9B,0.122601009560923,130,ON,43.20781327438462,-79.906366351,13.734395398024478
326−H1N,0.11781419332702744,71,QC,45.63860454507043,-73.30701558352114,13.00243091656801 326+V0M,0.12149964800214501,168,BC,49.2799258399177,-121.87038038850376,13.609201661461645
327−L9K,0.11746100930095775,89,ON,43.22972317078652,-79.94180702674157,12.96252731013421 327+L6W,0.11909350681675447,68,ON,43.682876894705885,-79.74447497970588,13.336170489804665
328−V7Z,0.11740793101176632,161,BC,49.48020777018633,-123.78973111801243,12.956531611563982 328+N1G,0.11734692027122821,142,ON,43.51916822739437,-80.22523459260563,13.138391828358298
329−V1Z,0.11679450175265556,206,BC,49.9142771546602,-119.54923195999999,12.887262018235578 329+T3B,0.11435311473090116,166,AB,51.09102969589759,-114.1887421325,12.800184000922044
330−J5R,0.11659463470734929,195,QC,45.39404981748718,-73.49770819610256,12.864701829317537 330+L9K,0.11015737778192439,89,ON,43.22972317078652,-79.94180702674157,12.327895592875215
331−L1B,0.11598766581075311,61,ON,43.904745081967214,-78.59676506721311,12.796217251890262 331+L1B,0.10871639582987165,61,ON,43.904745081967214,-78.59676506721311,12.166149687067174
332−T3Z,0.11423443805273754,57,BC,51.07982419124561,-114.37972288145613,12.59863304847142 332+L6P,0.10612243170762271,168,ON,43.77936111619048,-79.70181926464286,11.875571756344705
333−H7W,0.11334625481731486,92,QC,45.53145113597826,-73.75233587967391,12.498669229931657 333+V1Z,0.10532934578505368,206,BC,49.9142771546602,-119.54923195999999,11.786879990049858
334−N4L,0.10998490126734649,76,ON,44.59777284894737,-80.6061725331579,12.121156261477605 334+J1X,0.10420335149132308,189,QC,45.26396233380953,-72.1679159478836,11.66107943970951
335−L6P,0.1096399753787446,168,ON,43.77936111619048,-79.70181926464286,12.0824894410001 335+V7Z,0.1041187476309666,161,BC,49.48020777018633,-123.78973111801243,11.651632880950658
336−K7L,0.1083810592633451,104,ON,44.24980467307692,-76.48424197211538,11.94147576960447 336+K7L,0.10364613057083033,104,ON,44.24980467307692,-76.48424197211538,11.598876882133569
337−H7P,0.1076023528178804,68,QC,45.57778821426471,-73.7929977160294,11.854340151844568 337+N1H,0.10068366330810355,175,ON,43.550857119514426,-80.25948843673834,11.268758087307095
338−P1H,0.10635134923772295,248,QC,45.3442503408871,-79.16595985427419,11.714497461949257 338+P0G,0.10059477290047582,56,ON,45.48389126964286,-80.18177038249999,11.25886780162675
339−N1H,0.1058915280542202,175,ON,43.550857119514426,-80.25948843673834,11.663140577908383 339+T3Z,0.10056154115879176,57,AB,51.07982419124561,-114.37972288145613,11.255170537105519
340−N3C,0.10481753867555801,83,ON,43.42923438530121,-80.30735017566265,11.543279926993776 340+L1S,0.09987434847087974,77,ON,43.83910035454546,-79.01866184935065,11.17874306062916
341−L3Z,0.10416413249770225,142,ON,44.10803914197183,-79.57151869929577,11.470420664729431 341+L6Y,0.09678095644396387,239,ON,43.65304793025105,-79.75833926945607,10.835355014031055
342−L1S,0.1041092393190939,77,ON,43.83910035454546,-79.01866184935065,11.464301866959993 342+L6V,0.09542884105217779,126,ON,43.71161605730158,-79.77140255039681,10.68559409440104
343−V9Z,0.10151064198388882,193,BC,48.3795976538342,-123.7358888427461,11.1750270463294 343+P1H,0.09523008826146008,248,ON,45.3442503408871,-79.16595985427419,10.66359720972605
344−L6V,0.10124486716926005,126,ON,43.71161605730158,-79.77140255039681,11.1454834502706 344+L7A,0.0949305076768024,229,ON,43.69588395563319,-79.83145152152838,10.630449510025187
345−L6Y,0.09930456309204876,239,ON,43.65304793025105,-79.75833926945607,10.930036499459472 345+N3C,0.094811913317162,83,ON,43.42923438530121,-80.30735017566265,10.617330140665793
346−L7A,0.09836530196643618,229,ON,43.69588395563319,-79.83145152152838,10.825893145071252 346+L3Z,0.0944231959077103,142,ON,44.10803914197183,-79.57151869929577,10.574339614777294
347−L1P,0.09691220620511941,54,ON,43.90063765185185,-78.97610719259258,10.664969456578532 347+N4L,0.09436536369715251,76,ON,44.59777284894737,-80.6061725331579,10.56794504119436
348−L0R,0.09667170982854911,380,ON,43.17768153526316,-79.73874219378948,10.638358132502734 348+V9Z,0.0905196869457705,193,BC,48.3795976538342,-123.7358888427461,10.143553025790686
349−V0R,0.09473135947576897,437,SK,49.06612451256293,-124.17702642073226,10.423889095094442 349+L1P,0.08950912532484244,54,ON,43.90063765185185,-78.97610719259258,10.032302400583992
350−V1V,0.09396983746497818,318,BC,49.92333347330189,-119.47242695264151,10.339830883182909 350+N2L,0.08933209534127315,340,ON,43.469219171823525,-80.53441638308823,10.012825107981183
351−J7C,0.09096981071475317,85,QC,45.674720692,-73.85670615941176,10.009304480841585 351+V1V,0.08720155143562121,318,BC,49.92333347330189,-119.47242695264151,9.778687462737201
352−L1R,0.09044116900649772,60,ON,43.91527840183333,-78.9355045855,9.951164343201668 352+J3L,0.08478494719602103,83,QC,45.450346099156626,-73.29606788987952,9.51371611558962
353−L8J,0.087040057133147,94,ON,43.190589089999996,-79.77384639712766,9.577843345771475 353+G1K,0.08423930913110744,55,QC,46.81410239781819,-71.21762357163637,9.453977562743132
354−L6X,0.08685422748757747,163,ON,43.67325457944786,-79.79315870331288,9.557482425870113 354+L1R,0.08344021103232097,60,ON,43.91527840183333,-78.9355045855,9.366548034405465
355−N2L,0.08483462002296623,340,ON,43.469219171823525,-80.53441638308823,9.336442598533147 355+L6T,0.08339640945491457,132,ON,43.712688483560605,-79.71501677265152,9.361757711998674
356−L6Z,0.0836260141328074,65,ON,43.727775798461536,-79.79614451523078,9.204377753250403 356+L0R,0.08283826420427419,380,ON,43.17768153526316,-79.73874219378948,9.300734997683291
357−V2V,0.08159156866701436,287,BC,49.14825194761137,-122.30213873650396,8.982433245635901 357+T2P,0.08087172550891232,142,AB,51.089312576154924,-114.04637674989436,9.086002082375021
358−L0S,0.08143871544415182,568,ON,43.03739442007043,-79.13348632630282,8.9657762025527 358+L6X,0.08069490189935734,163,ON,43.67325457944786,-79.79315870331288,9.066714807007958
359−V3G,0.08138127353823263,133,BC,49.0617366123704,-122.23524791544733,8.959517180454446 359+V0R,0.07802181872112528,437,BC,49.06612451256293,-124.17702642073226,8.775559720601823
360−L6T,0.0812849479458038,132,ON,43.712688483560605,-79.71501677265152,8.949022095892012 360+L6S,0.07549477369685188,148,ON,43.72892907324324,-79.74147481925677,8.501026009268609
361−V9N,0.0809784189641955,211,BC,49.68736416042654,-124.98150034459717,8.915631181004757 361+L6Z,0.07536557852113528,65,ON,43.727775798461536,-79.79614451523078,8.487009105625564
362−V1P,0.07994855961265046,146,BC,49.820497558150684,-119.1847251269178,8.803521138400217 362+V3G,0.07439087457185056,133,BC,49.0617366123704,-122.23524791544733,8.381317906586428
363−L6S,0.07954872358591139,148,ON,43.72892907324324,-79.74147481925677,8.760026266800814 363+L8J,0.07394023404368281,94,ON,43.190589089999996,-79.77384639712766,8.33248789545884
364−K4M,0.07423064000854183,78,QC,45.23120148974359,-75.6854476648718,8.183166610730797 364+V9N,0.07335210527263734,211,BC,49.68736416042654,-124.98150034459717,8.268793174673483
365−L1Z,0.07005195471226247,54,ON,43.87696430925926,-79.01385894444445,7.73204640422922 365+V2V,0.07261457112118562,287,BC,49.14825194761137,-122.30213873650396,8.18897068169635
366−T2P,0.06913614646421633,142,AB,51.089312576154924,-114.04637674989436,7.633429671454506 366+H7V,0.07112154805758884,54,QC,45.54451400981481,-73.73801037277778,8.02756257623698
367−L1L,0.06882541657471,97,ON,44.00525680927835,-79.35818542134021,7.599989943376073 367+V1P,0.06973355559526856,146,BC,49.820497558150684,-119.1847251269178,7.877725144326786
368−L4P,0.06820815644115981,145,ON,44.23179672068965,-79.46308373696552,7.533593253336646 368+L1L,0.06898453890440069,97,ON,44.00525680927835,-79.35818542134021,7.796953181171373
369−L0A,0.06797473134060196,70,ON,44.14305905,-78.49365753714285,7.508495142896576 369+L0S,0.06620891417452562,568,ON,43.03739442007043,-79.13348632630282,7.498164147057418
370−N2K,0.06738267234246235,80,ON,43.5008907105,-80.501320989875,7.44486260993642 370+L1Z,0.06329656502260915,54,ON,43.87696430925926,-79.01385894444445,7.185547405384507
371−L9S,0.06546019865641509,265,ON,44.350557079132074,-79.55886513750943,7.2385011146977485 371+N2K,0.06258752898614643,80,ON,43.5008907105,-80.501320989875,7.109575926127154
372−V2R,0.06445101716660498,484,BC,49.11622883219008,-121.96896889028926,7.130332594392397 372+K4M,0.06194112225478674,78,ON,45.23120148974359,-75.6854476648718,7.0403619478562
373−G1K,0.06316759380875454,55,QC,46.81410239781819,-71.21762357163637,6.992927216702971 373+H1L,0.059821817570359107,76,QC,45.60282324578947,-73.51671064736843,6.81375102097439
374−J1X,0.06308628415435895,189,QC,45.26396233380953,-72.1679159478836,6.984228012437632 374+L8R,0.05976573936389456,63,ON,43.25899366063492,-79.86772430587301,6.8077612653403285
375−K4P,0.06114177960845631,53,QC,45.25093009056604,-75.57615913018867,6.77639882261496 375+V2S,0.059126131539596984,472,BC,49.05290787267465,-122.27883282912707,6.739468028311912
376−L1H,0.061047385400046714,90,ON,43.90765315955555,-78.85127471088889,6.7663202246593945 376+V2R,0.05895019959371373,484,BC,49.11622883219008,-121.96896889028926,6.720690797804929
377−N1S,0.06070175594894115,133,ON,43.35720466518797,-80.33013079112781,6.729425016406165 377+L9S,0.056980934657455004,265,ON,44.350557079132074,-79.55886513750943,6.51073627932961
378−V2S,0.05977519158049158,472,BC,49.05290787267465,-122.27883282912707,6.630579134728598 378+L4P,0.05603463152388247,145,ON,44.23179672068965,-79.46308373696552,6.409992510419382
379−L8R,0.05927363782669111,63,ON,43.25899366063492,-79.86772430587301,6.577111577041639 379+N1S,0.05481966549732574,133,ON,43.35720466518797,-80.33013079112781,6.280786490988954
380−N3W,0.058094039857484306,103,ON,43.08615220718446,-79.95115340291262,6.4514675519488085 380+J3Y,0.05397152646070118,127,QC,45.4884242543307,-73.40272128346457,6.190683822319287
381−V9H,0.056957101221968336,71,BC,49.95499467873239,-125.23089622943664,6.330507540766361 381+N2G,0.05211322128920059,223,ON,43.44972541690583,-80.49608713085202,5.993532365927812
382−T3E,0.05519466365407862,180,BC,51.02094003887222,-114.13436668295,6.143271703866016 382+T3E,0.05203485332673761,180,AB,51.02094003887222,-114.13436668295,5.98522619423516
383−J3L,0.05242560464462071,83,QC,45.450346099156626,-73.29606788987952,5.849761282444987 383+L0A,0.05147932102946058,70,ON,44.14305905,-78.49365753714285,5.926364329397349
384−V1L,0.05225756743466979,116,BC,49.53047789172413,-117.24065378534483,5.831976078215018 384+N3W,0.0511465378793067,103,ON,43.08615220718446,-79.95115340291262,5.891119684928636
385−P2A,0.05212398621782855,114,ON,45.34847275052632,-79.9544787359649,5.817839858257523 385+L1H,0.050586322932155724,90,ON,43.90765315955555,-78.85127471088889,5.83181451028425
386−L6R,0.05158144020894757,152,ON,43.7481342406579,-79.76458317111842,5.76044438282497 386+T3H,0.04943010624113046,333,AB,51.04475090209009,-114.19409437124023,5.70952071259494
387−T2J,0.05152037687036497,105,AB,50.946966696733334,-114.04238945461904,5.753986494173113 387+J2W,0.04804448625997412,57,QC,45.35475680017544,-73.29383549403508,5.563148919756311
388−T3H,0.049421405822747726,333,BC,51.04475090209009,-114.19409437124023,5.532244734528757 388+L6R,0.047518799312484726,152,ON,43.7481342406579,-79.76458317111842,5.507670333695214
389−H7V,0.04801973795276921,54,QC,45.54451400981481,-73.73801037277778,5.384427197584829 389+T2J,0.04420261873831966,105,AB,50.946966696733334,-114.04238945461904,5.158367342914039
390−N2G,0.04710295558928515,223,ON,43.44972541690583,-80.49608713085202,5.287856887086839 390+V9H,0.04269978336073569,71,BC,49.95499467873239,-125.23089622943664,5.000450319588312
391−L0E,0.044443898205236754,172,ON,44.36828162587209,-79.3480987483721,5.008262327511104 391+J4W,0.04150356191114646,57,QC,45.46804607070175,-73.48594258982456,4.874921623727491
392−L1E,0.04372928439434354,56,ON,43.905460348214284,-78.79403846071429,4.93324877904513 392+K4P,0.041302316195027514,53,ON,45.25093009056604,-75.57615913018867,4.853818118588626
393−V1B,0.0414788525943809,170,BC,50.26711615129412,-119.21577168017647,4.697369174151178 393+J0R,0.04038040809783896,157,QC,45.8826938212102,-74.14700997923566,4.757197079346476
394−V9T,0.0412436545349835,217,BC,49.21972360341014,-124.00877634557604,4.672747451701587 394+J0P,0.03994086491096078,155,QC,45.34918655290323,-74.25366221458064,4.711161885062953
395−L9C,0.04028594028853549,138,ON,43.22865918514493,-79.9049214102174,4.572548858720871 395+J9B,0.03738500688373898,59,QC,45.53487765661017,-75.82994977644067,4.443876738364505
396−H1L,0.03835347372125123,76,QC,45.60282324578947,-73.51671064736843,4.3706610377558075 396+V9T,0.0351120560319375,217,BC,49.21972360341014,-124.00877634557604,4.206750529964154
397−V9G,0.03780152114724084,118,BC,48.98843013449152,-123.8094584461017,4.313069278166948 397+L9J,0.03478154916587653,86,ON,44.33197742732558,-79.65344772069767,4.17231517429828
398−V2T,0.035280366498354025,371,BC,49.061333793978804,-122.3374954819645,4.050411138637489 398+L1E,0.034611678495971736,56,ON,43.905460348214284,-78.79403846071429,4.154620856249469
399−L9A,0.032059228120771055,93,ON,43.230498331182794,-79.87018009010752,3.7157895866057444 399+K1L,0.03437530619337486,77,ON,45.429657666233766,-75.69417856233767,4.130004498118822
400−L8P,0.03177048648837888,185,ON,43.25269047291892,-79.87207854156757,3.6858468432819924 400+V2T,0.033984867706799586,371,BC,49.061333793978804,-122.3374954819645,4.089356072626749
401−L9J,0.03148302007194451,86,ON,44.33197742732558,-79.65344772069767,3.656044928185076 401+V1L,0.03371495338312852,116,BC,49.53047789172413,-117.24065378534483,4.061264655789487
402−P0B,0.031096325328504,148,QC,45.18178659256757,-79.33909377648648,3.6159694294772393 402+P2A,0.033403193351320255,114,ON,45.34847275052632,-79.9544787359649,4.028827569166693
403−K9A,0.029675966870087885,172,ON,43.97218776046512,-78.17118944215116,3.46890207977284 403+L8P,0.03327494319329336,185,ON,43.25269047291892,-79.87207854156757,4.015486711093441
404−N9H,0.029408506698370133,52,ON,42.23368632788462,-83.0283619396154,3.441231969946257 404+N9H,0.030705590974346792,52,ON,42.23368632788462,-83.0283619396154,3.7485773284498647
405−J3Y,0.028012827660904887,127,QC,45.4884242543307,-73.40272128346457,3.296961911643148 405+L9C,0.029785539707513627,138,ON,43.22865918514493,-79.9049214102174,3.653167216274311
406−L3V,0.025600408366766414,259,ON,44.615391754787645,-79.41481792880309,3.0480666682546564 406+J7V,0.028789981055051556,188,QC,45.39879618202127,-74.02428400989362,3.5500257590010964
407−L8N,0.02490641230902063,115,ON,43.266314594608694,-79.87640939313044,2.976576526036312 407+L0E,0.028088634157127177,172,ON,44.36828162587209,-79.3480987483721,3.477426731182387
408−L0K,0.022717821982345086,393,ON,44.67388622412214,-79.4995409778626,2.751449432129127 408+T2G,0.027155049811477535,175,AB,51.04185611505714,-114.04932871784,3.380866905842028
409−L9X,0.02168671457020108,76,ON,44.42492145473684,-79.76359958578946,2.645556254013526 409+V9G,0.02496460175727907,118,BC,48.98843013449152,-123.8094584461017,3.1546643200382585
410−L8S,0.019626413015020595,98,ON,43.255361169489795,-79.92338614204083,2.434293162400647 410+V1B,0.02456025977716364,170,BC,50.26711615129412,-119.21577168017647,3.112962990176249
411−L4N,0.018362260530559164,443,ON,44.36614929,-79.69143380963882,2.3048824109009436 411+L8N,0.02383967083905944,115,ON,43.266314594608694,-79.87640939313044,3.038687693862774
412−K0M,0.017815426976036997,630,QC,44.72031158911111,-78.66953249409524,2.2489539615772713 412+J0E,0.02052617720295359,169,QC,45.256827643786984,-72.51327230159764,2.697834676926547
413−K1L,0.017459535488465603,77,QC,45.429657666233766,-75.69417856233767,2.212570903843547 413+K9A,0.01892117285414801,172,ON,43.97218776046512,-78.17118944215116,2.5331364117288757
414−V4T,0.016342248987467972,303,BC,49.83898614834983,-119.62138801613861,2.0984339518516526 414+L9A,0.017918318714023978,93,ON,43.230498331182794,-79.87018009010752,2.4303621737769676
415−T2G,0.016066647103622763,175,AB,51.04185611505714,-114.04932871784,2.0702993082753585 415+M3N,0.016525144547326107,78,ON,43.75969713846154,-79.5147439974359,2.2877581984635853
416−M3N,0.012415298564842163,78,ON,43.75969713846154,-79.5147439974359,1.6982846609315816 416+T2S,0.016321422959846482,83,AB,51.03134312391566,-114.06967831022892,2.266922096437618
417−T2T,0.012174381488590583,179,BC,51.03527700482681,-114.1033319393687,1.6737867586312571 417+H1E,0.015995590566308424,61,QC,45.639319499016395,-73.59184662836066,2.2336056485149136
418−T2S,0.010169038915281562,83,AB,51.03134312391566,-114.06967831022892,1.4701002842926414 418+L8S,0.015229744016894666,98,ON,43.255361169489795,-79.92338614204083,2.155340367817815
419−T2C,0.008909831064345059,63,AB,50.97791365350794,-114.01982215649207,1.342408749343349 419+T2T,0.014667435292098326,179,AB,51.03527700482681,-114.1033319393687,2.097913675922536
420−J4W,0.007904388093398763,57,QC,45.46804607070175,-73.48594258982456,1.24056594395352 420+L3V,0.013649379575258807,259,ON,44.615391754787645,-79.41481792880309,1.9940252023274319
421−L1G,0.006771120953080574,113,ON,43.91715984070797,-78.86290392743362,1.1258983240970855 421+P0B,0.012867191912177054,148,ON,45.18178659256757,-79.33909377648648,1.914277926839536
422−T2K,0.00669084297919897,94,AB,51.08990296297872,-114.03468307115958,1.1177804677195535 422+L4N,0.012808544163848017,443,ON,44.36614929,-79.69143380963882,1.9083010591831817
423−N3A,0.0063866080623870836,65,ON,43.388550998153846,-80.69892163446154,1.087021587390713 423+J7W,0.009786086853401038,71,QC,45.37554612774648,-73.96327079619718,1.600752579854059
424−V9R,0.005430083858730188,179,BC,49.1598357326257,-123.9549141860894,0.9903756340323255 424+L9X,0.007994871580556579,76,ON,44.42492145473684,-79.76359958578946,1.4189266534037515
425−L2N,0.004555185596724837,143,ON,43.19328054608392,-79.25154262377623,0.9020579700297571 425+T2C,0.006727872637547536,63,AB,50.97791365350794,-114.01982215649207,1.2905103493722425
426−N3L,0.0028100053025440198,142,ON,43.193817748873236,-80.37609570323944,0.7261192538624339 426+V4T,0.006122165155890047,303,BC,49.83898614834983,-119.62138801613861,1.2291765064916804
427−V4Z,0.002376277008197647,56,BC,49.13533029107143,-121.83477772375,0.682440958903241 427+L0K,0.004894967574615925,393,ON,44.67388622412214,-79.4995409778626,1.1050245010301607
428−L9R,0.002290846823019154,152,ON,44.17238007480263,-79.82964322625,0.6738400067235917 428+J0L,0.002342345937590408,142,QC,45.50281547225352,-73.38125935084507,0.8472707417459757
429−V9S,0.002135385926167295,104,BC,49.17739737269231,-123.9608011451923,0.6581903777508336 429+L1G,0.0005890615246887574,113,ON,43.91715984070797,-78.86290392743362,0.6706117058920213
430−L1K,0.0009589457157231866,107,ON,43.93721370897197,-78.84509529841122,0.5398416638225267 430+V9S,-0.0006248605487747442,104,BC,49.17739737269231,-123.9608011451923,0.5484795726372838
431−L2T,0.0009474255803954889,70,ON,43.13641252942857,-79.23093479585714,0.538683437912213 431+K0M,-0.0006865320543246539,630,ON,44.72031158911111,-78.66953249409524,0.5422787877291002
432−L9M,-0.0007129460589529039,155,ON,44.777720782516134,-79.99173975354839,0.3718903668352924 432+V9R,-0.001113017280556956,179,BC,49.1598357326257,-123.9549141860894,0.4994081337145184
433−L0M,-0.0017027586656147857,171,ON,44.35767363011696,-80.04025075491228,0.27259015680285437 433+T2K,-0.001835340404738343,94,AB,51.08990296297872,-114.03468307115958,0.42684129875960597
434−N2P,-0.004167925338504795,132,ON,43.38946819090909,-80.42802763848485,0.025705939743159156 434+L2N,-0.0031610099807637313,143,ON,43.19328054608392,-79.25154262377623,0.2937966967084815
435−J7V,-0.004252810064427266,188,QC,45.39879618202127,-74.02428400989362,0.01721564546250942 435+L2T,-0.004302237025098091,70,ON,43.13641252942857,-79.23093479585714,0.17940398997993157
436−L8W,-0.00442495170183056,102,ON,43.202362101176476,-79.84451420960784,0.0 436+L9R,-0.005443652208105189,152,ON,44.17238007480263,-79.82964322625,0.06512293071665454
437−N2V,-0.006857586294052585,83,ON,43.47464735530121,-80.58455511361446,-0.2429678134505453 437+N3A,-0.006745686906861847,65,ON,43.388550998153846,-80.69892163446154,-0.06508054835623334
438−J2W,-0.009389800444562474,57,QC,45.35475680017544,-73.29383549403508,-0.49525442529453345 438+V4Z,-0.007252358391566682,56,BC,49.13533029107143,-121.83477772375,-0.11570189708874912
439−J0R,-0.010341835865715422,157,QC,45.8826938212102,-74.14700997923566,-0.5899413878315385 439+L1K,-0.00737790854787675,107,ON,43.93721370897197,-78.84509529841122,-0.12824159913125133
440−L1J,-0.010625081381041838,92,ON,43.8850832026087,-78.87201904434782,-0.6180948537520603 440+N3L,-0.007923843664386566,142,ON,43.193817748873236,-80.37609570323944,-0.18275021875122643
441−K1G,-0.012340713240247162,76,QC,45.39126694078947,-75.63062015657894,-0.7884514400705034 441+N2P,-0.01033770196942191,132,ON,43.38946819090909,-80.42802763848485,-0.4234043467868376
442−N1R,-0.013026986566615077,203,ON,43.36206823640394,-80.30770722334975,-0.8565143219733562 442+L8W,-0.012858378730275734,102,ON,43.202362101176476,-79.84451420960784,-0.6740886775579935
443−V1H,-0.01323749733898689,248,BC,50.23016935092742,-119.36660286112904,-0.8773828971120667 443+J6A,-0.01504606068499146,57,QC,45.7380557854386,-73.45582268017543,-0.8911446700864856
444−L1A,-0.013476679155038924,70,ON,43.95435924342857,-78.33330382114286,-0.9010883896081845 444+K1G,-0.01537958050220158,76,ON,45.39126694078947,-75.63062015657894,-0.9241939258028076
445−L9V,-0.014322756974816645,106,ON,44.114992899339626,-80.1780948931132,-0.9848983208243123 445+N2V,-0.01697330230471121,83,ON,43.47464735530121,-80.58455511361446,-1.081967441104148
446−N1M,-0.014794806064163075,113,ON,43.70789140911504,-80.38913877318583,-1.03162727935463 446+L9M,-0.017469765464745407,155,ON,44.777720782516134,-79.99173975354839,-1.1310644117056845
447−L8V,-0.01611474763745385,82,ON,43.23082543378049,-79.84865088390244,-1.1621735732556315 447+J8B,-0.018247295952696457,63,QC,45.95271738031746,-74.19538946809524,-1.2079081453926332
448−L8G,-0.01632261170713421,115,ON,43.21631983095652,-79.76012484382608,-1.1827162709767136 448+L0M,-0.01829506320110083,171,ON,44.35767363011696,-80.04025075491228,-1.2126270590789745
449−N2Z,-0.01652169298911701,94,ON,44.14978056021277,-81.6611459730851,-1.2023869844031476 449+J7K,-0.019283571199114648,97,QC,45.73135646350516,-73.6164832056701,-1.3102309182883354
450−L4M,-0.017917328635821343,225,ON,44.4151304892,-79.67037419293332,-1.340176280744676 450+L1J,-0.020465662197450423,92,ON,43.8850832026087,-78.87201904434782,-1.4268222815706832
451−J0P,-0.01904399238114042,155,QC,45.34918655290323,-74.25366221458064,-1.4512701327894062 451+N1R,-0.020532437575156652,203,ON,43.36206823640394,-80.30770722334975,-1.433404322982934
452−L2H,-0.020531384658484718,180,ON,43.09176563638889,-79.13382590288889,-1.5977417951225759 452+N2J,-0.020860305888505272,138,ON,43.471584916666664,-80.51553577275362,-1.465715889201269
453−H1E,-0.021280302797521914,61,QC,45.639319499016395,-73.59184662836066,-1.6714094422526138 453+J7N,-0.021353686713925887,60,QC,45.68818441733333,-74.04742859633333,-1.514318824763916
454−L2S,-0.021745649083668637,99,ON,43.145723185858586,-79.26472465969697,-1.7171556419531275 454+L8G,-0.02328543616090847,115,ON,43.21631983095652,-79.76012484382608,-1.7043848458392463
455−N2J,-0.02203194874493764,138,ON,43.471584916666664,-80.51553577275362,-1.7452899593864313 455+L4M,-0.023640024543252727,225,ON,44.4151304892,-79.67037419293332,-1.7392331502412262
456−N6K,-0.023465443135621142,166,ON,42.9553523,-81.33914045801205,-1.8860366312038468 456+N1M,-0.023773599427374805,113,ON,43.70789140911504,-80.38913877318583,-1.752357444229391
457−V9X,-0.02394243758048996,59,BC,49.10567828254237,-123.88313378559322,-1.9328252868432871 457+V1H,-0.024299523985188937,248,BC,50.23016935092742,-119.36660286112904,-1.804014707094559
458−V9W,-0.02422636746183485,199,BC,49.99335749145729,-125.23855869517587,-1.960665535597128 458+T2E,-0.025112840375471186,190,AB,51.062121287763155,-114.0495289422737,-1.8838466426817302
459−T2E,-0.0252271166638331,190,BC,51.062121287763155,-114.0495289422737,-2.058729244553348 459+L1A,-0.026269939290892427,70,ON,43.95435924342857,-78.33330382114286,-1.9973110798686022
460−V0E,-0.026497960331198393,700,BC,50.898603938257146,-119.29765466632858,-2.1831182320469544 460+L8V,-0.02638293196043413,82,ON,43.23082543378049,-79.84865088390244,-2.008384039718525
461−L4R,-0.027736353747338186,93,ON,44.741758260107524,-79.87705481580645,-2.3041790384911387 461+N2H,-0.027317070803915437,147,ON,43.45354730836734,-80.4863982244898,-2.0998790733367523
462−N2H,-0.027983024799252982,147,ON,43.45354730836734,-80.4863982244898,-2.3282747974301077 462+N6K,-0.02939328103036972,166,ON,42.9553523,-81.33914045801205,-2.3029294450068294
463−T3L,-0.028534251000418807,92,BC,51.120225515065215,-114.23180294525001,-2.3820991754082477 463+L2H,-0.029455799174896827,180,ON,43.09176563638889,-79.13382590288889,-2.309037093662236
464−N0H,-0.028642027019075946,670,ON,44.66555842619403,-81.1174007480597,-2.392619477180491 464+K2B,-0.030566697083125954,83,ON,45.36093364722892,-75.7876555366265,-2.4175015223996676
465−N5A,-0.02911945229657203,152,ON,43.3782347431579,-80.97541295197368,-2.439208585618313 465+L9V,-0.030733231804630865,106,ON,44.114992899339626,-80.1780948931132,-2.4337510435150977
466−J7W,-0.029239756574232705,71,QC,45.37554612774648,-73.96327079619718,-2.450944860181248 466+L2S,-0.03198436827364752,99,ON,43.145723185858586,-79.26472465969697,-2.555743405270028
467−K2B,-0.03029024888426245,83,QC,45.36093364722892,-75.7876555366265,-2.5533655869446448 467+N2Z,-0.03229123840509684,94,ON,44.14978056021277,-81.6611459730851,-2.585641549441897
468−V2P,-0.033818421487415574,354,BC,49.169235317655364,-121.94796330166668,-2.8965683374637785 468+V9W,-0.03269034594113035,199,BC,49.99335749145729,-125.23855869517587,-2.624512596637474
469−P1L,-0.033952278845074825,142,QC,45.04683863676056,-79.30050257021126,-2.909565476345022 469+V2P,-0.03621404264841907,354,BC,49.169235317655364,-121.94796330166668,-2.9670304620298404
470−J9B,-0.034943948081325976,59,QC,45.53487765661017,-75.82994977644067,-3.005799349424254 470+N5A,-0.0365787996573212,152,ON,43.3782347431579,-80.97541295197368,-3.0024174635426393
471−N2R,-0.03566579223464935,95,ON,43.38452937810526,-80.47648910189474,-3.0757887822996377 471+T3L,-0.03694603744861067,92,AB,51.120225515065215,-114.23180294525001,-3.03803210159298
472−N3H,-0.036626202242266745,76,ON,43.397080284210524,-80.3627992011842,-3.168831078205725 472+L4R,-0.04025254525263103,93,ON,44.741758260107524,-79.87705481580645,-3.358108146556227
473−J7K,-0.03667678208838341,97,QC,45.73135646350516,-73.6164832056701,-3.1737286599685777 473+N2A,-0.04058329564437091,164,ON,43.44052803140244,-80.42939044335367,-3.3900672046184077
474−K2C,-0.037264829385532154,90,QC,45.356755594444444,-75.73311679333334,-3.230650349160036 474+K2C,-0.04103628757509809,90,ON,45.356755594444444,-75.73311679333334,-3.4338208138386506
475−V1X,-0.03773560096276031,249,BC,49.88835567522089,-119.40594159975903,-3.276195886909017 475+N3H,-0.04317778020146535,76,ON,43.397080284210524,-80.3627992011842,-3.6403953066999284
476−N2A,-0.03794760361445887,164,ON,43.44052803140244,-80.42939044335367,-3.2966994163852625 476+N2R,-0.04379469021147609,95,ON,43.38452937810526,-80.47648910189474,-3.6998221789950048
477−V2A,-0.039588351411470046,375,BC,49.478745628186665,-119.59137499122667,-3.4552350497204287 477+V0E,-0.04458092482264606,700,BC,50.898603938257146,-119.29765466632858,-3.7755069549656906
478−N1A,-0.03980819747000027,115,QC,42.915351391130436,-79.59609689486958,-3.4764577028226884 478+V9X,-0.04487040570409366,59,BC,49.10567828254237,-123.88313378559322,-3.803358074651386
479−K7G,-0.04294706267020064,86,ON,44.32062370465116,-76.22611226627906,-3.778957089975732 479+ON_other,-0.04527110542584691,792,ON,44.18863054855812,-80.77438548690711,-3.8418963206566015
480−J0E,-0.04359591507859753,169,QC,45.256827643786984,-72.51327230159764,-3.84137009480241 480+N0H,-0.04562610060125171,670,ON,44.66555842619403,-81.1174007480597,-3.876025925257931
481−N2E,-0.04415952986410713,165,ON,43.412239487878786,-80.50482639951515,-3.8955512502868883 481+V1X,-0.04658900456156227,249,BC,49.88835567522089,-119.40594159975903,-3.968539532567772
482−J0L,-0.047799961026705196,142,QC,45.50281547225352,-73.38125935084507,-4.244776828857278 482+J0N,-0.047311419671549566,69,QC,45.5494614284058,-73.98656197521738,-4.037889058055011
483−N2C,-0.04810734500002365,53,ON,43.423936110943394,-80.45844726301887,-4.274205926573405 483+K1K,-0.04737603507496005,118,ON,45.440794961864405,-75.64409064491525,-4.044089488241842
484−N0E,-0.0482354121242402,265,ON,42.81847826516981,-80.3967485586415,-4.2864644687588545 484+P1L,-0.0485956341427832,142,ON,45.04683863676056,-79.30050257021126,-4.161045892796167
485−N3T,-0.049448935860125845,221,ON,43.12832690570136,-80.28644899339366,-4.402544668687258 485+V2A,-0.04934670445323053,375,BC,49.478745628186665,-119.59137499122667,-4.23300066088289
486−P0A,-0.049684352512766164,248,QC,45.600351127338705,-79.37440322991935,-4.425047252776848 486+N2C,-0.05108664354918618,53,ON,43.423936110943394,-80.45844726301887,-4.399484529238739
487−V9L,-0.05026608838261139,209,BC,48.79673454985646,-123.69628812631579,-4.480630462107826 487+N2E,-0.05166282785795103,165,ON,43.412239487878786,-80.50482639951515,-4.454552180081173
488−K1K,-0.051491648217426904,118,QC,45.440794961864405,-75.64409064491525,-4.597623459257649 488+K7G,-0.05343401276389119,86,ON,44.32062370465116,-76.22611226627906,-4.623631055913324
489−V2H,-0.053009524852259876,50,BC,50.712199501200004,-120.219862567,-4.742322651972897 489+T3C,-0.053882310315034786,133,AB,51.043106818428576,-114.11852290539849,-4.666378466052379
490−T1S,-0.053053498916681534,193,AB,50.73936428580311,-113.97767873340415,-4.746511427113842 490+J9J,-0.05464873509691291,205,QC,45.42411272809756,-75.8202948869756,-4.7394165234783125
491−ON_other,-0.0536761395850286,684,ON,43.97643260476321,-81.5292601108632,-4.805801662729814 491+N1A,-0.056534767922554095,115,ON,42.915351391130436,-79.59609689486958,-4.918911790714553
492−T3C,-0.05642365757709076,133,BC,51.043106818428576,-114.11852290539849,-5.066990460634269 492+G3N,-0.0594548876779611,50,QC,46.8604562884,-71.6037735276,-5.196154966116673
493−N6P,-0.0564465453130445,142,ON,42.922160668309864,-81.30056109366197,-5.069163237424834 493+V9L,-0.059511097784253286,209,BC,48.79673454985646,-123.69628812631579,-5.201483750555758
494−K2S,-0.05716647046855107,142,QC,45.2632119915493,-75.91135835985915,-5.13748173978853 494+N3T,-0.061078512240667675,221,ON,43.12832690570136,-80.28644899339366,-5.349955926257433
495−J6A,-0.05817651777623383,57,QC,45.7380557854386,-73.45582268017543,-5.2332489980847825 495+J8X,-0.06225910164897219,56,QC,45.43907190696429,-75.70541064946428,-5.461632830530084
496−V0H,-0.058784165840915684,849,BC,49.31001310598351,-119.39933548908127,-5.290816338814364 496+K2S,-0.06228640328157548,142,ON,45.2632119915493,-75.91135835985915,-5.464213847064325
497−L2J,-0.05946250029738477,75,ON,43.12737035826667,-79.1056206624,-5.3550390567319806 497+N6A,-0.06314779953539625,69,ON,42.99502053405797,-81.25506155231884,-5.545611556234475
498−N5L,-0.05953106311318588,62,ON,42.672857961612905,-81.21872409983871,-5.361527959304368 498+T6G,-0.06373050485173486,85,AB,53.521995021882354,-113.52217228999999,-5.600634597865827
499−J8B,-0.06277391719258225,63,QC,45.95271738031746,-74.19538946809524,-5.667929637950042 499+T1S,-0.0645817953892181,193,AB,50.73936428580311,-113.97767873340415,-5.680961688679864
500−N0A,-0.0637103972684044,348,ON,42.85369584227011,-80.00877328399424,-5.756228390890605 500+V2H,-0.0659602822571135,50,BC,50.712199501200004,-120.219862567,-5.810889671800923
501−J7N,-0.0657845971497136,60,QC,45.68818441733333,-74.04742859633333,-5.951506218141233 501+L2J,-0.06683165165501084,75,ON,43.12737035826667,-79.1056206624,-5.892927432368234
502−K2G,-0.06638589175480131,118,QC,45.32112633220339,-75.73968497627119,-6.008040071614995 502+H1A,-0.06750238505409968,78,QC,45.6763038924359,-73.49814576371796,-5.956027025162025
503−T6G,-0.06735616995533211,85,AB,53.521995021882354,-113.52217228999999,-6.099194191779489 503+N6P,-0.067590222625863,142,ON,42.922160668309864,-81.30056109366197,-5.9642872566024625
504−N6G,-0.06794909712641677,346,ON,43.01457084965318,-81.30885259725433,-6.154854028184598 504+N0E,-0.06820455717595286,265,ON,42.81847826516981,-80.3967485586415,-6.022038902650994
505−L8H,-0.06836472367624476,212,ON,43.249103854150945,-79.79440873896228,-6.19385045788583 505+P0A,-0.0688337358648572,248,ON,45.600351127338705,-79.37440322991935,-6.081149235569261
506−N6A,-0.06878098636684289,69,ON,42.99502053405797,-81.25506155231884,-6.232890332103624 506+N5L,-0.06918834440059161,62,ON,42.672857961612905,-81.21872409983871,-6.114447757397723
507−L8K,-0.07419492115796883,161,ON,43.22433335677019,-79.79639729229814,-6.739167636630672 507+K2G,-0.07234118547603002,118,ON,45.32112633220339,-75.73968497627119,-6.409987842622666
508−K9J,-0.07725481629271908,164,ON,44.29660480060976,-78.34030950914634,-7.024099850177789 508+N6G,-0.07284783529282021,346,ON,43.01457084965318,-81.30885259725433,-6.457393195164951
509−K0L,-0.07779960969583147,651,QC,44.64028227691221,-78.0389360588052,-7.0747387121164245 509+J5Y,-0.07471548024998231,62,QC,45.77274464854839,-73.4220271016129,-6.6319345316855465
510−N0R,-0.08069919723233535,62,ON,42.1817883416129,-82.8326099501613,-7.343793379284536 510+V0H,-0.07499732458204325,849,BC,49.31001310598351,-119.39933548908127,-6.658246083678209
511−T3A,-0.08072327993616953,155,BC,51.112874849587094,-114.14530373469677,-7.346024764397985 511+T5J,-0.07534966284025005,132,AB,53.50722204999243,-113.51211324997728,-6.691128161523874
512−N1T,-0.0821428177406394,59,ON,43.3885720081356,-80.28538220050848,-7.4774572761990505 512+J5Z,-0.07760760248983646,62,QC,45.75228943532258,-73.47918886193548,-6.9015762839158
513−N2T,-0.0822941830143237,55,ON,43.45487761618182,-80.56768615909091,-7.491460916341253 513+L8K,-0.08157873038734409,161,ON,43.22433335677019,-79.79639729229814,-7.27054892788177
514−K7H,-0.08399426224876054,98,ON,44.89056791020408,-76.25965309591837,-7.648599151072921 514+N0A,-0.08162287963460638,348,ON,42.85369584227011,-80.00877328399424,-7.274642772974893
515−V1S,-0.08631536816542082,123,BC,50.65291599463415,-120.44123575430895,-7.862707953264936 515+L8H,-0.08260084347436913,212,ON,43.249103854150945,-79.79440873896228,-7.36528049194225
516−N0J,-0.08641524836462472,161,ON,42.9666729,-80.67902310347826,-7.871910184780662 516+T3A,-0.08409411777637918,155,AB,51.112874849587094,-114.14530373469677,-7.503506307842711
517−N3R,-0.08814477898215824,133,ON,43.165602426315786,-80.26691915759399,-8.031110825974896 517+J0J,-0.08579829963754247,59,QC,45.12998289186441,-73.20860397288136,-7.661002915066206
518−T3M,-0.0888909391596048,428,BC,50.886853350981305,-113.94985476746496,-8.099708752937197 518+T2R,-0.08835134868675691,175,AB,51.04224406318286,-114.07805922938859,-7.89644822418083
519−L2M,-0.08936850252161865,131,ON,43.19091561618321,-79.21873946549618,-8.143586486962185 519+K9J,-0.08849389351570787,164,ON,44.29660480060976,-78.34030950914634,-7.909576173531619
520−J0N,-0.09054372332167654,69,QC,45.5494614284058,-73.98656197521738,-8.25147464611964 520+T3M,-0.08969705270404149,428,AB,50.886853350981305,-113.94985476746496,-8.020308985158097
521−L9Z,-0.09219900519996498,269,ON,44.49517134635688,-80.03543523791822,-8.403218693264225 521+N1T,-0.09230824292758773,59,ON,43.3885720081356,-80.28538220050848,-8.260172154630773
522−K7K,-0.09253021284299219,99,ON,44.24960937777777,-76.48077874444445,-8.433551223849435 522+N2T,-0.09232328363632036,55,ON,43.45487761618182,-80.56768615909091,-8.261551976283798
523−T5J,-0.09286809251955777,132,AB,53.50722204999243,-113.51211324997728,-8.464484439799403 523+K0L,-0.09379646957104135,651,ON,44.64028227691221,-78.0389360588052,-8.396600267539533
524−H1A,-0.09361665700264642,78,QC,45.6763038924359,-73.49814576371796,-8.5329790361795 524+V1S,-0.09547241604125853,123,BC,50.65291599463415,-120.44123575430895,-8.549994086162272
525−K2K,-0.09370179912062526,57,QC,45.34002822719298,-75.90601469,-8.540766400548527 525+N0R,-0.09580856960392507,62,ON,42.1817883416129,-82.8326099501613,-8.580730165145422
526−V4Y,-0.094259924718046,53,BC,50.49616109415095,-119.17137182981132,-8.591797897623755 526+N3R,-0.09801721844435582,133,ON,43.165602426315786,-80.26691915759399,-8.782420416000603
527−K1V,-0.09596508736061035,144,QC,45.344846499305554,-75.67010186944444,-8.747530936258997 527+K1V,-0.09811786144962974,144,ON,45.344846499305554,-75.67010186944444,-8.791600365387154
528−V2C,-0.09657053148991392,173,BC,50.671482222080925,-120.27492817618499,-8.80276248644204 528+J9H,-0.09824939042305629,146,QC,45.398076996712334,-75.82984558938355,-8.803596123646795
529−J8X,-0.09669632863703015,56,QC,45.43907190696429,-75.70541064946428,-8.814234117181785 529+J8V,-0.09875278285477479,145,QC,45.53350748572414,-75.72872859531034,-8.849492150332672
530−K9H,-0.0995284661974331,95,ON,44.32140996105263,-78.32272694842105,-9.072119394048329 530+L2M,-0.09879875848269215,131,ON,43.19091561618321,-79.21873946549618,-8.853682755832448
531−N2N,-0.10016087787095723,64,ON,43.42809295953125,-80.54164111375,-9.129605067970791 531+K2K,-0.09949075410975636,57,ON,45.34002822719298,-75.90601469,-8.91673379075215
532−T2R,-0.10053343901852944,175,BC,51.04224406318286,-114.07805922938859,-9.163453540882527 532+J8Z,-0.10015448090309381,58,QC,45.470742276034485,-75.76220811758621,-8.977168136793956
533−J5Z,-0.1019374589650587,62,QC,45.75228943532258,-73.47918886193548,-9.290900374100952 533+K7H,-0.10042863641969794,98,ON,44.89056791020408,-76.25965309591837,-9.002119127903974
534−J5Y,-0.1037454154596442,62,QC,45.77274464854839,-73.4220271016129,-9.454750318470618 534+K7K,-0.1008754300118614,99,ON,44.24960937777777,-76.48077874444445,-9.042767316626755
535−V0X,-0.10879286454731378,258,BC,49.343928061550386,-120.84517905930232,-9.910621395500463 535+N0J,-0.10238039961693013,161,ON,42.9666729,-80.67902310347826,-9.17955223278838
536−N7A,-0.10955318730759264,82,ON,43.77818807841464,-81.71039511365854,-9.979092367195207 536+T7Y,-0.10435078228281017,51,AB,53.49568616568627,-114.00289912196078,-9.358327083503148
537−N0C,-0.11229629944563654,145,QC,44.261915983448276,-80.49218534731034,-10.225691432524576 537+J9A,-0.1045778501959466,109,QC,45.43871744880734,-75.76881452467889,-9.3789065624574
538−N2M,-0.11281656290162427,125,ON,43.4365857704,-80.51066402056,-10.272385576877097 538+J8R,-0.10510694326560076,122,QC,45.508486319344264,-75.6364396490164,-9.426840872985709
539−J9J,-0.11333671325479558,205,QC,45.42411272809756,-75.8202948869756,-10.319045291123075 539+L9Z,-0.10544166483994141,269,ON,44.49517134635688,-80.03543523791822,-9.457152590125862
540−N4X,-0.11382560262680605,56,ON,43.26144080285714,-81.14235964982143,-10.362878641049477 540+V2C,-0.10545291510268702,173,BC,50.671482222080925,-120.27492817618499,-9.458171215219046
541−T4C,-0.11662576561423417,267,BC,51.19104134085768,-114.48006859438202,-10.6135260999344 541+J1N,-0.10701806533781123,70,QC,45.35772506128572,-71.993409861,-9.599771937721513
542−K4A,-0.1170315812869165,154,QC,45.46647758246753,-75.47618535584415,-10.649793172597889 542+K9H,-0.10911418949133196,95,ON,44.32140996105263,-78.32272694842105,-9.78906358054622
543−T2W,-0.11898268001321294,106,BC,50.946770699132074,-114.09871725133962,-10.82395428931714 543+N2N,-0.10963728529473718,64,ON,43.42809295953125,-80.54164111375,-9.836240202786195
544−N6H,-0.11924063690148597,108,ON,42.97997429722222,-81.30905698805556,-10.846954897866912 544+V4Y,-0.11463775324606677,53,BC,50.49616109415095,-119.17137182981132,-10.285975812647507
545−T2V,-0.12039966229962192,126,BC,50.98247552287301,-114.08486332539682,-10.950225683169279 545+J0T,-0.11788555192771423,358,QC,46.148242611284914,-74.44540547818436,-10.576876253388324
546−N0M,-0.12186042111608338,446,ON,43.25123665311659,-81.55955899966368,-11.080210964419967 546+T2V,-0.12001977150901967,126,AB,50.98247552287301,-114.08486332539682,-10.767521323524964
547−N0L,-0.12359650971997675,291,ON,42.81714113254296,-81.43224214075602,-11.23444967205427 547+N2M,-0.12026156006758282,125,ON,43.4365857704,-80.51066402056,-10.789094107789865
548−T4S,-0.12468210501736597,141,BC,52.30142235089362,-114.07134656192198,-11.330760849121301 548+K4A,-0.12173624081556371,154,ON,45.46647758246753,-75.47618535584415,-10.92055475815017
549−V1E,-0.12492703476031769,181,BC,50.69203729475138,-119.27570478651934,-11.35247592363189 549+T4C,-0.12177629731057896,267,AB,51.19104134085768,-114.48006859438202,-10.924122897040412
550−N5X,-0.12736681417426116,134,ON,43.03566094470149,-81.25201826664178,-11.56849270416962 550+T2W,-0.12426111058170837,106,AB,50.946770699132074,-114.09871725133962,-11.145185055768525
551−L2P,-0.12765429751872276,90,ON,43.155465055,-79.21607653588889,-11.59391163570801 551+N6H,-0.12558899568572665,108,ON,42.97997429722222,-81.30905698805556,-11.263095737708406
552−T3G,-0.129239320699817,197,BC,51.13917428569035,-114.2030954104467,-11.73392634252406 552+N0C,-0.12602142076306364,145,ON,44.261915983448276,-80.49218534731034,-11.301459505071332
553−K0A,-0.1304699454572893,661,QC,45.308073349621786,-75.64156954795764,-11.842481948703497 553+N7A,-0.12605262436767717,82,ON,43.77818807841464,-81.71039511365854,-11.304227176077852
554−L2G,-0.1349681765143164,154,ON,43.071450003831174,-79.08829508045454,-12.23814427687081 554+V0X,-0.1266527223647623,258,BC,49.343928061550386,-120.84517905930232,-11.35743736443885
555−G3N,-0.13797905361243953,50,QC,46.8604562884,-71.6037735276,-12.501987039970341 555+N4X,-0.12835914422349287,56,ON,43.26144080285714,-81.14235964982143,-11.508569986256067
556−K2M,-0.13853633173318425,50,QC,45.284702838,-75.85338759999999,-12.550734184081602 556+T3G,-0.13239931473801927,197,AB,51.13917428569035,-114.2030954104467,-11.865369202414167
557−J0J,-0.13951777735908857,59,QC,45.12998289186441,-73.20860397288136,-12.636518780160987 557+N5X,-0.13319864593327782,134,ON,43.03566094470149,-81.25201826664178,-11.935789813748066
558−K1C,-0.1418891592095005,107,QC,45.466917899252344,-75.53161265093458,-12.84344550580354 558+L2P,-0.13592400637693738,90,ON,43.155465055,-79.21607653588889,-12.175469773197811
559−N4S,-0.14318921376083146,137,ON,43.1273468849635,-80.75039276416058,-12.956680159589984 559+T4S,-0.13696847698600442,141,AB,52.30142235089362,-114.07134656192198,-12.26715202573092
560−J9A,-0.1441607554112892,109,QC,45.43871744880734,-75.76881452467889,-13.041205303711479 560+N0L,-0.13699942814864335,291,ON,42.81714113254296,-81.43224214075602,-12.269867417354874
561−V0B,-0.14429424979057293,379,BC,49.53745346570712,-115.96558055134037,-13.052813039231758 561+N0M,-0.13773546964234168,446,ON,43.25123665311659,-81.55955899966368,-12.334416676802517
562−S7T,-0.1453494197232688,51,SK,52.07849445098039,-106.62304235294118,-13.144508710879709 562+V1E,-0.14096296335096273,181,BC,50.69203729475138,-119.27570478651934,-12.616900692536015
563−J8Z,-0.14657345292187643,58,QC,45.470742276034485,-75.76220811758621,-13.250757676302783 563+K0A,-0.14529287179619593,661,ON,45.308073349621786,-75.64156954795764,-12.994443559323399
564−L2V,-0.14822360348827623,132,ON,43.10173325136364,-79.2118617298485,-13.393788943638441 564+L2G,-0.14559226814952925,154,ON,43.071450003831174,-79.08829508045454,-13.020488806520902
565−V1A,-0.14828799112564953,60,BC,49.66129267016667,-116.11226016966665,-13.399365133429441 565+K1C,-0.14684923195115396,107,ON,45.466917899252344,-75.53161265093458,-13.129750220367352
566−K4K,-0.14847235480462315,130,QC,45.54547568307692,-75.27687764076923,-13.41532967338901 566+K2M,-0.14691591951094782,50,ON,45.284702838,-75.85338759999999,-13.13554319218212
567−K2J,-0.14885456823376722,219,QC,45.26246168082192,-75.74210132922374,-13.448417173499616 567+J8T,-0.1478748463709537,138,QC,45.48932907355072,-75.6714575634058,-13.21879992805497
568−T2Y,-0.14943603312599174,242,BC,50.91409439144628,-114.10573004583472,-13.498729251508623 568+T3R,-0.1503854778846355,212,AB,51.176205910367926,-114.15519126550943,-13.436402269801873
569−K7C,-0.1494903258546555,115,QC,45.12517176782609,-76.1401131226087,-13.503425514042833 569+T2Y,-0.1511917493270741,242,AB,50.91409439144628,-114.10573004583472,-13.506167897810318
570−T3R,-0.14981331306066356,212,BC,51.176205910367926,-114.15519126550943,-13.5313582897579 570+K4K,-0.15311115297981803,130,ON,45.54547568307692,-75.27687764076923,-13.672025250562992
571−L3C,-0.15042263383294033,180,ON,43.00941052244444,-79.2677785815,-13.584029380877949 571+K2J,-0.15330681799861104,219,ON,45.26246168082192,-75.74210132922374,-13.688914962947873
572−V2E,-0.15049264422967923,96,BC,50.65609850531251,-120.32967717645833,-13.590079185488479 572+S7T,-0.1550662340883252,51,SK,52.07849445098039,-106.62304235294118,-13.840638563072194
573−K0G,-0.15446681432312334,271,QC,44.85958675608856,-76.0534657107011,-13.932805431282713 573+N4S,-0.1564555293180132,137,ON,43.1273468849635,-80.75039276416058,-13.96025624153453
574−S7V,-0.15637524724723728,136,SK,52.111332816176464,-106.55482377941178,-14.096902265378331 574+K1J,-0.15696566886640698,93,ON,45.44147644408602,-75.60722332365592,-14.00413732386998
575−K7P,-0.1565198685826757,111,ON,44.2642552018018,-76.5895731882883,-14.109324787788468 575+L2V,-0.15914782399352834,132,ON,43.10173325136364,-79.2118617298485,-14.191589037776653
576−K1J,-0.1572790127426706,93,QC,45.44147644408602,-75.60722332365592,-14.174503449143572 576+V2E,-0.16004802408841443,96,BC,50.65609850531251,-120.32967717645833,-14.268799020036205
577−K7M,-0.157675153955466,162,ON,44.23766259814815,-76.55549595740742,-14.208495732119363 577+L3C,-0.16082776875759883,180,ON,43.00941052244444,-79.2677785815,-14.335621411395705
578−J9H,-0.15811826606103344,146,QC,45.398076996712334,-75.82984558938355,-14.246502564949559 578+K7C,-0.16230764371869208,115,ON,45.12517176782609,-76.1401131226087,-14.462300222806846
579−N0N,-0.15912583604203198,101,ON,43.31897140832758,-84.11388968963736,-14.332861700988264 579+V0B,-0.16279549962853423,379,BC,49.53745346570712,-115.96558055134037,-14.50402011768136
580−V0G,-0.16157390121620455,223,BC,49.6145897903139,-117.59159587112109,-14.542323945606594 580+V1A,-0.1630812979374374,60,BC,49.66129267016667,-116.11226016966665,-14.528451232797757
581−NS_other,-0.16308157998377829,257,NS,44.670621341322956,-63.57441999957199,-14.671069591394115 581+QC_other,-0.1631888369130637,2249,QC,46.43354452567808,-72.48989747912405,-14.537642261391614
582−V0A,-0.16329872416497282,216,BC,50.714463405833335,-116.29578651166666,-14.689596260567894 582+K7M,-0.16384892396321438,162,ON,44.23766259814815,-76.55549595740742,-14.594036242494257
583−T2X,-0.16350240689189294,308,AB,50.873968733237014,-114.03810157447401,-14.706970746734772 583+T2X,-0.16523638173318303,308,AB,50.873968733237014,-114.03810157447401,-14.71245124360846
584−L8M,-0.1636532283473464,60,ON,43.249101201500004,-79.83506483133333,-14.719833795510539 584+S7V,-0.16569200927999414,136,SK,52.111332816176464,-106.55482377941178,-14.751301748869562
585−N0K,-0.164910987607,100,ON,43.520550788,-81.1330954651,-14.827028287655054 585+K7P,-0.16640623493801115,111,ON,44.2642552018018,-76.5895731882883,-14.81216681818861
586−T3S,-0.16640451194915337,68,AB,50.89733853780882,-113.90858358629411,-14.954141247422836 586+T3S,-0.1709404609557328,68,AB,50.89733853780882,-113.90858358629411,-15.197553332744496
587−N6M,-0.1667254121943166,88,ON,42.959287870454546,-81.16822283977272,-14.981428105932704 587+G1B,-0.17211774091859317,80,QC,46.913393748375,-71.211540741,-15.297330809471143
588−J8V,-0.16726136800665903,145,QC,45.53350748572414,-75.72872859531034,-15.026982095143293 588+L8M,-0.17257284606338652,60,ON,43.249101201500004,-79.83506483133333,-15.335870659490269
589−T7Y,-0.16982340324007417,51,AB,53.49568616568627,-114.00289912196078,-15.244407316434327 589+N6M,-0.17277509348120287,88,ON,42.959287870454546,-81.16822283977272,-15.352992029596258
590−T1X,-0.1700661417664844,280,AB,51.033251305803574,-113.83611824495357,-15.264978267325201 590+K0G,-0.17333635979077,271,ON,44.85958675608856,-76.0534657107011,-15.40048821312503
591−N5P,-0.17062057211172296,92,ON,42.79119512054348,-81.19517504934782,-15.311944913608189 591+V0A,-0.17345066396290001,216,BC,50.714463405833335,-116.29578651166666,-15.410157737638396
592−K9V,-0.173518903318219,160,ON,44.361686321875,-78.7387511219375,-15.557043586340946 592+N0N,-0.17357139819549872,101,ON,43.31897140832758,-84.11388968963736,-15.420370010831707
593−K0K,-0.1740962990857937,958,ON,44.17536760449896,-77.4878504154071,-15.605786518640109 593+K2H,-0.17791784920615578,75,ON,45.33028508133333,-75.81309203333333,-15.787193461509075
594−K2H,-0.1742431777305529,75,QC,45.33028508133333,-75.81309203333333,-15.618181316053958 594+T1X,-0.17942593036784582,280,AB,51.033251305803574,-113.83611824495357,-15.914097493781032
595−T1V,-0.1743027611105373,57,AB,50.58292484452632,-113.86776337435089,-15.623208920238064 595+N0K,-0.18060281924308225,100,ON,43.520550788,-81.1330954651,-16.012999047520204
596−L3K,-0.17628427817031825,129,ON,42.88904969635659,-79.25578863782945,-15.790237431637921 596+T3P,-0.18069486912561022,253,AB,51.17833795156522,-114.09156757443874,-16.020729685284152
597−T3P,-0.17656659168466074,253,BC,51.17833795156522,-114.09156757443874,-15.814007630168526 597+T1V,-0.1826843492029886,57,AB,50.58292484452632,-113.86776337435089,-16.187638684371265
598−B4A,-0.17721145604878344,64,NS,44.719498523125,-63.67272478703125,-15.868278675993686 598+B4A,-0.18274092030711805,64,NS,44.719498523125,-63.67272478703125,-16.19237990808119
599−R4A,-0.17736006231573362,64,MB,49.97712428125,-97.082911921875,-15.880780248102756 599+K9V,-0.18438345700457287,160,ON,44.361686321875,-78.7387511219375,-16.329924008068986
600−J0T,-0.17743017246886064,358,QC,46.148242611284914,-74.44540547818436,-15.886677652744098 600+N5P,-0.1849127598786163,92,ON,42.79119512054348,-81.19517504934782,-16.37419910126223
601−L2R,-0.17758313001255682,112,ON,43.16434000366071,-79.24555078178571,-15.899542436014558 601+J8P,-0.18557261907101144,142,QC,45.495513789507044,-75.61699411866196,-16.429362152781792
602−N3S,-0.17776493874949895,168,ON,43.141816089880955,-80.23651459267857,-15.914831244118954 602+V0G,-0.18611670489245583,223,BC,49.6145897903139,-117.59159587112109,-16.47481938448451
603−N5H,-0.1781747645229553,70,ON,42.748521108571424,-80.971583648,-15.949284453051826 603+N3S,-0.18667939587252252,168,ON,43.141816089880955,-80.23651459267857,-16.521805029786172
604−J8R,-0.17929163441454815,122,QC,45.508486319344264,-75.6364396490164,-16.043105763761766 604+L2R,-0.18906251857423856,112,ON,43.16434000366071,-79.24555078178571,-16.720506951747215
605−J1N,-0.1804870587244355,70,QC,45.35772506128572,-71.993409861,-16.143409911161434 605+L3K,-0.19068635252538974,129,ON,42.88904969635659,-79.25578863782945,-16.855629282188467
606−N4W,-0.18574365264458,87,ON,43.735207721494255,-80.95589748678161,-16.58305342672707 606+K1T,-0.19244075990922982,105,ON,45.34646260666666,-75.6276648504762,-17.001370497986013
607−S7N,-0.18756519456975765,64,SK,52.130339984375,-106.61524309375,-16.73486258683029 607+N5H,-0.1928099960257303,70,ON,42.748521108571424,-80.971583648,-17.032010932492557
608−N4K,-0.18834756886167947,128,ON,44.57313645859375,-80.94117025554688,-16.799981612708148 608+K0K,-0.1930032709525692,958,ON,44.17536760449896,-77.4878504154071,-17.048045014966583
609−T1P,-0.18864646034403162,111,QC,50.99826015185585,-113.06265668605405,-16.82484567352255 609+S7N,-0.19330997316968043,64,SK,52.130339984375,-106.61524309375,-17.073482662383377
610−K1T,-0.18999570098607374,105,QC,45.34646260666666,-75.6276648504762,-16.936993298068227 610+J8M,-0.19336708831039054,70,QC,45.546715387285715,-75.47510518428571,-17.078218886833362
611−K8V,-0.19205162833411246,158,ON,44.10843447949367,-77.59376858829114,-17.107589378493294 611+R4A,-0.19477962525191464,64,MB,49.97712428125,-97.082911921875,-17.195266279567946
612−T5R,-0.19212916626729673,90,AB,53.51974478922222,-113.58348787433333,-17.114016435515968 612+T1P,-0.19610378968289577,111,AB,50.99826015185585,-113.06265668605405,-17.304840799325827
613−T0L,-0.19346065950097385,195,BC,50.39541854311795,-113.75713177927179,-17.22430512118539 613+T5R,-0.1966995262969777,90,AB,53.51974478922222,-113.58348787433333,-17.3540906620392
614−T1Y,-0.19468629044434657,117,AB,51.082419657683765,-113.95306329388035,-17.325695427947252 614+G0A,-0.1982935841182359,251,QC,47.04669310326693,-71.08397035792828,-17.485728073517258
615−N4G,-0.1969032614416998,154,ON,42.86819488597402,-80.73421016928572,-17.508778943001012 615+N4K,-0.20153153192893597,128,ON,44.57313645859375,-80.94117025554688,-17.752472893697046
616−N5C,-0.19819916534608226,65,ON,43.03590883015384,-80.88003193200001,-17.615610401842975 616+N4W,-0.20180174228721176,87,ON,43.735207721494255,-80.95589748678161,-17.774694025138594
617−N4T,-0.19848070112835797,77,ON,43.15392157220779,-80.74144718467532,-17.63880129073009 617+T1Y,-0.2020811926068385,117,AB,51.082419657683765,-113.95306329388035,-17.79766870288464
618−V9Y,-0.19850428272176485,182,BC,49.25749696203297,-124.81564689582419,-17.64074347613055 618+K8V,-0.20501525169508109,158,ON,44.10843447949367,-77.59376858829114,-18.0385017181814
619−T4G,-0.19854316418064438,64,BC,52.02315580226563,-114.13229756289063,-17.643945661923198 619+T2B,-0.206236410210414,70,AB,51.06845201591428,-114.00161875937142,-18.138528612960293
620−N6C,-0.19970487160917125,84,ON,42.96066521678571,-81.24055645678571,-17.739563751156062 620+N6C,-0.2066201573601536,84,ON,42.96066521678571,-81.24055645678571,-18.16993669251261
621−B4B,-0.2030366259626995,62,NS,44.727949188870966,-63.73745066274193,-18.013179254820844 621+T5N,-0.20743221362325542,113,AB,53.54539032336283,-113.54715079973451,-18.236360334414094
622−T2B,-0.20354566188966572,70,BC,51.06845201591428,-114.00161875937142,-18.05490287180691 622+N4T,-0.20755013364066843,77,ON,43.15392157220779,-80.74144718467532,-18.246001335782513
623−V8A,-0.20365025620257746,125,BC,49.8330482188,-124.51024824992,-18.063473414714682 623+J0H,-0.20773530144861135,63,QC,45.62615276698413,-72.96024870301588,-18.26113814303778
624−K0H,-0.20373243790222628,368,ON,44.54784385244979,-76.70812114743184,-18.070206821047606 624+T6C,-0.20820847764605094,77,AB,53.52104868753247,-113.45856809337663,-18.29980587782698
625−T6C,-0.20429001530078647,77,AB,53.52104868753247,-113.45856809337663,-18.115876288678223 625+T3K,-0.20859398357378514,281,AB,51.15350566254804,-114.07426258329538,-18.331295716808327
626−T3K,-0.2063569523182626,281,BC,51.15350566254804,-114.07426258329538,-18.28495082172147 626+N4G,-0.21001608684581186,154,ON,42.86819488597402,-80.73421016928572,-18.447354505040824
627−T2A,-0.2068738719285211,173,AB,51.048503691647404,-113.94861355354335,-18.327180017604906 627+T4G,-0.2106750423866362,64,AB,52.02315580226563,-114.13229756289063,-18.501076370554202
628−N3Y,-0.2070197345560645,167,ON,42.830615786287424,-80.31463039461077,-18.33909216093703 628+N5C,-0.21119643965078846,65,ON,43.03590883015384,-80.88003193200001,-18.543558610341737
629−K8N,-0.20793652584889644,169,ON,44.17634237988165,-77.36603500059171,-18.413923862441074 629+T0L,-0.2113287270939648,195,AB,50.39541854311795,-113.75713177927179,-18.554333561992298
630−N4N,-0.2090735600912463,69,ON,44.153381187826085,-81.01464794014493,-18.506637305539986 630+T2A,-0.2113300332093483,173,AB,51.048503691647404,-113.94861355354335,-18.55443993936069
631−L2A,-0.209252640130999,138,ON,42.909871753550725,-78.94049532369564,-18.52122983351665 631+J0B,-0.2124535579905668,171,QC,45.36823870298245,-71.82857520409357,-18.645894658966778
632−L2E,-0.20950694367231712,156,ON,43.10226510269231,-79.09245250358974,-18.541947538907657 632+G1C,-0.2139106905157592,51,QC,46.87777760215686,-71.19809814490196,-18.764352046901323
633−J8T,-0.21084696414142906,138,QC,45.48932907355072,-75.6714575634058,-18.651029893962356 633+V9Y,-0.21437548267502135,182,BC,49.25749696203297,-124.81564689582419,-18.802100965742174
634−V1T,-0.2118540650331221,206,BC,50.26094373674757,-119.2783588988835,-18.73291527395382 634+J8N,-0.21781705231823822,137,QC,45.66451380350365,-75.6703680459854,-19.081068871063668
635−N5V,-0.21282605020520945,123,ON,43.003776806585364,-81.16931486130082,-18.81186729897163 635+V8A,-0.21873600697469833,125,BC,49.8330482188,-124.51024824992,-19.155395542969146
636−T5N,-0.21310964972900634,113,AB,53.54539032336283,-113.54715079973451,-18.83488895012465 636+K8N,-0.21912586492191682,169,ON,44.17634237988165,-77.36603500059171,-19.186907311550627
637−T4A,-0.21431087539381297,92,AB,51.26673251702174,-113.98727289956523,-18.932328029726463 637+B3M,-0.2196357456434154,62,NS,44.67639700096774,-63.6608700383871,-19.228101846515067
638−R3X,-0.21437903918187873,72,MB,49.827297,-97.05047131944444,-18.937853721009468 638+L2E,-0.21974466532685538,156,ON,43.10226510269231,-79.09245250358974,-19.236899016991583
639−N0G,-0.2151729441187276,553,ON,43.97892691253165,-80.97054398990959,-19.002183819761576 639+T4A,-0.21990998185016455,92,AB,51.26673251702174,-113.98727289956523,-19.250249388508855
640−B3M,-0.21559113873930014,62,NS,44.67639700096774,-63.6608700383871,-19.036049589031457 640+N5V,-0.22108343156238203,123,ON,43.003776806585364,-81.16931486130082,-19.3449495862989
641−T4H,-0.2167659872747138,51,BC,51.809858034372546,-114.0841495807255,-19.131114113449886 641+B4B,-0.22119354859473334,62,NS,44.727949188870966,-63.73745066274193,-19.353830592110622
642−V2B,-0.2181191682337342,204,BC,50.70316767102941,-120.36667059338237,-19.2404703439375 642+V1T,-0.22140592479854826,206,BC,50.26094373674757,-119.2783588988835,-19.37095610083205
643−N6E,-0.22147415335318626,113,ON,42.90482126681416,-81.30740914168142,-19.51096336044418 643+N3Y,-0.22205942957191732,167,ON,42.830615786287424,-80.31463039461077,-19.423630352580247
644−N5W,-0.22356315974196603,101,ON,42.989466964950495,-81.1944702339604,-19.67892996946814 644+K0H,-0.22363742860923672,368,ON,44.54784385244979,-76.70812114743184,-19.55067951822047
645−T2Z,-0.22813357896496209,231,BC,50.92037550117316,-113.95398472974892,-20.045193305886077 645+N4N,-0.22395651950456347,69,ON,44.153381187826085,-81.01464794014493,-19.576346068722362
646−T4B,-0.2300839936628901,347,AB,51.2819993709539,-114.03012874095677,-20.200986356116847 646+N6E,-0.2240054455094058,113,ON,42.90482126681416,-81.30740914168142,-19.580280780548385
647−P0H,-0.23102893203526875,188,QC,46.25568537287234,-79.54258782340426,-20.27635589079604 647+L2A,-0.22454972879559806,138,ON,42.909871753550725,-78.94049532369564,-19.62403997981914
648−N9A,-0.23128195252466197,59,ON,42.31471389,-83.03816794762712,-20.296525054531312 648+R3X,-0.2250263842151424,72,MB,49.827297,-97.05047131944444,-19.662342487489703
649−B3Z,-0.23217212230367767,69,NS,44.673411889130435,-63.87824647086956,-20.36744310997247 649+N9A,-0.22587219749253107,59,ON,42.31471389,-83.03816794762712,-19.730264416204246
650−T3J,-0.23452561250340362,362,BC,51.1217798170442,-113.94565146154143,-20.554637186076143 650+V2B,-0.22880236363909556,204,BC,50.70316767102941,-120.36667059338237,-19.965123821426968
651−N7G,-0.23907602884015602,94,ON,42.958166089361704,-81.62388720319149,-20.915325399757855 651+T2Z,-0.23062030574583428,231,AB,50.92037550117316,-113.95398472974892,-20.11049041877516
652−L3B,-0.24005850917596736,150,ON,42.990502262999996,-79.24073594066667,-20.99298638097621 652+N0G,-0.23191636109531855,553,ON,43.97892691253165,-80.97054398990959,-20.213964576433497
653−R3Y,-0.2414054580720947,160,MB,49.791164625,-97.19153735,-21.09933315284469 653+T4H,-0.23211945351466876,51,AB,51.809858034372546,-114.0841495807255,-20.230166870060827
654−K0J,-0.2426751134856812,297,QC,45.61193168956229,-77.29957147575757,-21.19944624363019 654+T4B,-0.23417924879628163,347,AB,51.2819993709539,-114.03012874095677,-20.394307290091596
655−N4B,-0.24287997944208806,58,ON,42.837924955,-80.49536132620689,-21.215588140921817 655+N5W,-0.2346154067634981,101,ON,42.989466964950495,-81.1944702339604,-20.429020376457917
656−N5R,-0.2439294463430385,163,ON,42.7606403997546,-81.17169572,-21.298226402833762 656+T3J,-0.23849464253650351,362,AB,51.1217798170442,-113.94565146154143,-20.73709702977935
657−S7W,-0.2499567338220808,87,SK,52.16823979310345,-106.55152913793103,-21.771157938524432 657+P0H,-0.24534565371110206,188,ON,46.25568537287234,-79.54258782340426,-21.2782721486355
658−T0M,-0.2501311667990634,274,BC,51.751131089675184,-114.01107841151095,-21.784802438271168 658+J8L,-0.24656738683854268,132,QC,45.601648478030306,-75.42771841962121,-21.374390364041172
659−J8P,-0.25052822360439425,142,QC,45.495513789507044,-75.61699411866196,-21.815852150085735 659+T3N,-0.24865845567118372,254,AB,51.16187492814961,-113.95376577783071,-21.538630147606263
660−T3N,-0.2508951550001368,254,BC,51.16187492814961,-113.95376577783071,-21.844535105920915 660+R3Y,-0.2493582406284632,160,MB,49.791164625,-97.19153735,-21.59351702721033
661−G1B,-0.25432785438153765,80,QC,46.913393748375,-71.211540741,-22.112359378817416 661+N7G,-0.25092391406357817,94,ON,42.958166089361704,-81.62388720319149,-21.716179924664303
662−N5Y,-0.2570905682917305,130,ON,43.01132548076923,-81.22519679069231,-22.32724367839497 662+J9P,-0.2516896426552937,61,QC,48.0283209347541,-77.73347803672131,-21.776101139343183
663−L8L,-0.2571617585049133,196,ON,43.25817463035714,-79.8444182330102,-22.332773021656095 663+L3B,-0.2529807200962309,150,ON,42.990502262999996,-79.24073594066667,-21.877029083588774
664−G0A,-0.2618860546473662,251,QC,47.04669310326693,-71.08397035792828,-22.698830639333735 664+N5R,-0.25517169762498093,163,ON,42.7606403997546,-81.17169572,-22.048007384141854
665−T4L,-0.2644863000720578,68,AB,52.47947012829412,-113.75273277383823,-22.899571550364005 665+B3Z,-0.2578297345971922,69,NS,44.673411889130435,-63.87824647086956,-22.254931534721656
666−T1B,-0.2667434089531703,74,AB,49.99869036922973,-110.66034874886486,-23.073399364206317 666+S7W,-0.2590970670045335,87,SK,52.16823979310345,-106.55152913793103,-22.353397971466336
667−B2T,-0.26674933832128456,73,NS,44.86450270068493,-63.59958094958904,-23.073855488987004 667+N5Y,-0.2620616964795292,130,ON,43.01132548076923,-81.22519679069231,-22.583250494342956
668−S4V,-0.26836463543086964,105,SK,50.426380095238095,-104.52712035238096,-23.198013764619297 668+N4B,-0.2620899954392401,58,ON,42.837924955,-80.49536132620689,-22.585441276819584
669−J0H,-0.2700032167638532,63,QC,45.62615276698413,-72.96024870301588,-23.323757017192925 669+K0J,-0.26370972446697244,297,ON,45.61193168956229,-77.29957147575757,-22.710730390154175
670−N6J,-0.2706258832278295,85,ON,42.95495317964706,-81.27103536564705,-23.37148588115845 670+J0S,-0.2675080956886079,94,QC,45.16434777244681,-74.06699474765956,-23.003746882581066
671−G1C,-0.2708251540678582,51,QC,46.87777760215686,-71.19809814490196,-23.386754188222348 671+T0M,-0.2678176528383358,274,AB,51.751131089675184,-114.01107841151095,-23.027577934509267
672−J8M,-0.2721280924790329,70,QC,45.546715387285715,-75.47510518428571,-23.486511526048915 672+L8L,-0.2691686313257009,196,ON,43.25817463035714,-79.8444182330102,-23.131495809627843
673−K7R,-0.27400952443937954,94,ON,44.23490647382979,-76.93860487585106,-23.630331112853643 673+N6J,-0.2749702066876613,85,ON,42.95495317964706,-81.27103536564705,-23.576163097032843
674−R2N,-0.2755070801142958,51,MB,49.81483982352941,-97.09690437254902,-23.744613350522147 674+T1B,-0.27878913713802456,74,AB,49.99869036922973,-110.66034874886486,-23.867463832258206
675−K7S,-0.2766749996089528,82,QC,45.44026800304878,-76.38341916695121,-23.833621515859406 675+T6E,-0.27881636436945745,141,AB,53.51888027510638,-113.4976996296454,-23.869536682220904
676−S7K,-0.2806404983952166,102,SK,52.13616694117647,-106.65187929411765,-24.135061123078174 676+S4V,-0.2792732129368284,105,SK,50.426380095238095,-104.52712035238096,-23.904308831912758
677−J0B,-0.281307600806928,171,QC,45.36823870298245,-71.82857520409357,-24.185653929599425 677+T4L,-0.2793008401480455,68,AB,52.47947012829412,-113.75273277383823,-23.90641111460513
678−B4E,-0.28152899400713144,60,NS,44.79974237333333,-63.74819542533333,-24.20243685241624 678+R2N,-0.28091029111239896,51,MB,49.81483982352941,-97.09690437254902,-24.028781513624498
679−T8N,-0.2860798691119654,197,AB,53.644245822131985,-113.62609420614214,-24.546598383501184 679+S7K,-0.28502857706211093,102,SK,52.13616694117647,-106.65187929411765,-24.34100935224982
680−T1H,-0.2877487301338265,76,AB,49.72202186397368,-112.82291102501316,-24.672414610326488 680+K7R,-0.2890411731698172,94,ON,44.23490647382979,-76.93860487585106,-24.64399004753426
681−T6E,-0.2878639083232192,141,AB,53.51888027510638,-113.4976996296454,-24.681090205593726 681+K7S,-0.28990208540310003,82,ON,45.44026800304878,-76.38341916695121,-24.7088370405637
682−J8N,-0.2883117379895408,137,QC,45.66451380350365,-75.6703680459854,-24.714812696305188 682+B2T,-0.294624875714778,73,NS,44.86450270068493,-63.59958094958904,-25.063583060633665
683−N0P,-0.29144415068513596,79,ON,42.4223845378481,-82.19406837708861,-24.950268008676566 683+T8N,-0.29513494752431113,197,AB,53.644245822131985,-113.62609420614214,-25.101796267853484
684−T1J,-0.29179486390006043,123,AB,49.68018809100813,-112.87858156254472,-24.97658432645252 684+AB_other,-0.295753336508108,174,AB,53.239350781017244,-112.92026738599999,-25.1480981741777
685−N5Z,-0.2919655431262191,109,ON,42.96926638238532,-81.20588527642202,-24.989388172277128 685+T1H,-0.2966139067925255,76,AB,49.72202186397368,-112.82291102501316,-25.212485787614046
686−K7A,-0.29391416555933,101,ON,44.91694675742574,-76.02319007227723,-25.135413213164437 686+N5Z,-0.3005241710259372,109,ON,42.96926638238532,-81.20588527642202,-25.50435371728903
687−T1K,-0.2954701052767596,130,AB,49.66959209143846,-112.83947596396922,-25.2518074225064 687+T1J,-0.3010444574340737,123,AB,49.68018809100813,-112.87858156254472,-25.54310270835447
688−T8W,-0.29812739978796704,57,AB,55.1382759208772,-118.81776772747368,-25.450171711472734 688+T1K,-0.30525276561347564,130,AB,49.66959209143846,-112.83947596396922,-25.855781891599094
689−K0B,-0.3037096648389852,109,QC,45.5398871293578,-74.78899778623853,-25.865169221770334 689+B4E,-0.3072219880445031,60,NS,44.79974237333333,-63.74819542533333,-26.001644683752055
690−K8P,-0.3083587571740355,110,ON,44.167248149090916,-77.40272639999999,-26.209028958119184 690+N0P,-0.3085567243265594,79,ON,42.4223845378481,-82.19406837708861,-26.1003470879118
691−B3T,-0.31016826411307313,75,NS,44.62445100986667,-63.699295172666666,-26.342433497637106 691+K7A,-0.3092495904811077,101,ON,44.91694675742574,-76.02319007227723,-26.151531922080174
692−T6H,-0.3109686053468414,100,AB,53.492754182549994,-113.52884051841,-26.401361101047073 692+T6H,-0.31082102881463625,100,AB,53.492754182549994,-113.52884051841,-26.267489102049126
693−T8A,-0.31237966793984884,74,AB,53.52932092121621,-113.29140752783783,-26.505140150706673 693+J0V,-0.3135250183416836,198,QC,45.80625693353535,-74.96071547803031,-26.466591732294052
694−R3W,-0.3132830801027067,61,MB,49.910494032786886,-97.04974427868852,-26.571506318486726 694+T8W,-0.31394467719442193,57,AB,55.1382759208772,-118.81776772747368,-26.497444203836416
695−T4R,-0.31642910308686084,113,AB,52.24614668221239,-113.77067537485841,-26.802151050253865 695+K8P,-0.31739394663451154,110,ON,44.167248149090916,-77.40272639999999,-26.75053757876016
696−K0E,-0.3166220188435542,196,ON,44.67909677933673,-75.70587330392857,-26.816270706676438 696+T8A,-0.3190969285672701,74,AB,53.52932092121621,-113.29140752783783,-26.87517393299611
697−V1N,-0.31912393351280793,99,BC,49.3180719179798,-117.70564845454545,-26.999141293852745 697+J0K,-0.3198349199109983,253,QC,46.15552006525692,-73.6171113883004,-26.92911951351109
698−J8L,-0.32219492855926324,132,QC,45.601648478030306,-75.42771841962121,-27.222982685502984 698+R3W,-0.3210286255654045,61,MB,49.910494032786886,-97.04974427868852,-27.016292596867686
699−P1B,-0.3226159605592327,58,QC,46.327072705,-79.45718005120689,-27.253617689043764 699+K0B,-0.32241122467077776,109,ON,45.5398871293578,-74.78899778623853,-27.11713008045953
700−J9P,-0.32376256130197234,61,QC,48.0283209347541,-77.73347803672131,-27.336980943715172 700+T4R,-0.3228629545764182,113,AB,52.24614668221239,-113.77067537485841,-27.150046017294837
701−R2M,-0.3311102165101745,55,MB,49.84438450909091,-97.1110911090909,-27.86892708249408 701+B3T,-0.329564360323033,75,NS,44.62445100986667,-63.699295172666666,-27.636610962075757
702−J0S,-0.3317659362069906,94,QC,45.16434777244681,-74.06699474765956,-27.916209344109276 702+P1B,-0.3299890626134084,58,ON,46.327072705,-79.45718005120689,-27.6673373338974
703−T8X,-0.33466073101606375,110,BC,55.18361406446364,-118.76795371426364,-28.12457539313361 703+K0E,-0.33725087457863145,196,ON,44.67909677933673,-75.70587330392857,-28.190700945139834
704−V0P,-0.3348068981260518,74,BC,50.09331618310811,-125.73371992756758,-28.13508044846207 704+V1N,-0.33909675726506017,99,BC,49.3180719179798,-117.70564845454545,-28.323130224930402
705−V1C,-0.3350134952829835,177,BC,49.51573370864407,-115.76521734293785,-28.149926002947055 705+R2M,-0.3419032217191773,55,MB,49.84438450909091,-97.1110911090909,-28.52400680380135
706−V1K,-0.3372345388024032,84,BC,50.10189925785715,-120.77951860488095,-28.309331055858966 706+T4P,-0.3475690307201432,118,AB,52.28910296960169,-113.79569321624575,-28.927831053594588
707−T0K,-0.33850456854632655,214,BC,49.5811402515514,-113.17127403997196,-28.40032254460062 707+T8X,-0.34778966911446874,110,AB,55.18361406446364,-118.76795371426364,-28.94351057301655
708−R2V,-0.33975796417098136,112,MB,49.9582585625,-97.11326158928571,-28.490009048972365 708+V1C,-0.34950650315180587,177,BC,49.51573370864407,-115.76521734293785,-29.065398112361528
709−T4P,-0.34026485076445834,118,AB,52.28910296960169,-113.79569321624575,-28.526247319562437 709+R2V,-0.3526094474308729,112,MB,49.9582585625,-97.11326158928571,-29.285163093901
710−K0C,-0.3402876632895529,278,QC,45.13970386151079,-74.9117643503597,-28.52787779774133 710+V1K,-0.35594690349708746,84,BC,50.10189925785715,-120.77951860488095,-29.520777360471705
711−AB_other,-0.34549367548754634,167,AB,53.33971860125749,-112.85711816273651,-28.898995677451666 711+V0P,-0.3565519748977992,74,BC,50.09331618310811,-125.73371992756758,-29.56340942341359
712−K7V,-0.34902768481720753,60,QC,45.46505088,-76.68998030333334,-29.14982381453357 712+T0K,-0.3580731446434306,214,AB,49.5811402515514,-113.17127403997196,-29.670473981655466
713−B0J,-0.35021232912195044,244,NS,44.560062126065574,-63.8680221977459,-29.233706376931867 713+K0C,-0.3583401672050073,278,ON,45.13970386151079,-74.9117643503597,-29.689251044786047
714−MB_other,-0.35244170871531905,316,MB,49.99048039556962,-97.55004429113924,-29.391295579487362 714+T6W,-0.3583803730158298,748,AB,53.41624393383289,-113.60160719538904,-29.692077888629175
715−V8G,-0.3537472688682483,71,BC,54.51653568943662,-128.57427450760562,-29.483419340787485 715+R3T,-0.35943826739715934,69,MB,49.80754247826087,-97.15994439130435,-29.76641691604106
716−R3T,-0.35440419562236913,69,MB,49.80754247826087,-97.15994439130435,-29.529728356750475 716+T6R,-0.3607894248199183,202,AB,53.44882881371287,-113.57414020029702,-29.861249461875396
717−R2C,-0.35483513114898824,54,MB,49.89991798148148,-96.99823859259259,-29.560089957955892 717+K7V,-0.36411814906461903,60,ON,45.46505088,-76.68998030333334,-30.09433386920337
718−T6W,-0.35643297139795715,748,BC,53.41624393383289,-113.60160719538904,-29.672551809391333 718+R2C,-0.3675554875916396,54,MB,49.89991798148148,-96.99823859259259,-30.334210803353333
719−K6V,-0.36182470524979066,174,ON,44.60597935402299,-75.70335219425287,-30.05071828987361 719+T4X,-0.3675767217796658,185,AB,53.34461808345405,-113.43301640874053,-30.335690084114418
720−T5S,-0.3622638380505652,94,AB,53.56806994067021,-113.68405186848936,-30.081428570423885 720+T0C,-0.36785874471622887,286,AB,52.809778188076926,-113.76291371336713,-30.355334247188047
721−T6R,-0.36629982973939323,202,AB,53.44882881371287,-113.57414020029702,-30.363050649140067 721+K6V,-0.3713699715502821,174,ON,44.60597935402299,-75.70335219425287,-30.599443653882176
722−K6A,-0.3663606686686149,53,QC,45.579260579433964,-74.60925065867924,-30.36728715769921 722+R3M,-0.37179058395797676,56,MB,49.868542375,-97.1621845,-30.6286282508502
723−T6M,-0.3668686683736232,324,AB,53.46811515964815,-113.66421756104629,-30.40265157196549 723+V8G,-0.3734251989886659,71,BC,54.51653568943662,-128.57427450760562,-30.74193110930471
724−T4J,-0.36722347162335006,57,AB,52.6656679124386,-113.6356559595614,-30.427340557235027 724+T5S,-0.3747936133347205,94,AB,53.56806994067021,-113.68405186848936,-30.83664002905354
725−R3M,-0.36986155683856786,56,MB,49.868542375,-97.1621845,-30.610637279004173 725+MB_other,-0.3752048896014478,310,MB,50.057041141935485,-97.61945688709677,-30.865079428910736
726−T4X,-0.3801069562843314,185,AB,53.34461808345405,-113.43301640874053,-31.317929584348057 726+B0J,-0.37683525955054936,244,NS,44.560062126065574,-63.8680221977459,-30.977703091778473
727−T0C,-0.381815244694568,286,BC,52.809778188076926,-113.76291371336713,-31.43515821056989 727+T6M,-0.3772705227495856,324,AB,53.46811515964815,-113.66421756104629,-31.00773942020717
728−V0K,-0.382177144728845,392,BC,51.32351947540816,-121.26977584655613,-31.45996733968056 728+K6A,-0.3775055124405095,53,ON,45.579260579433964,-74.60925065867924,-31.023949985464505
729−T5P,-0.38363920403788737,71,AB,53.54041232887324,-113.59272009281689,-31.560103711978236 729+T5K,-0.38266531800416,263,AB,53.54230627982509,-113.51101078396579,-31.378936374132405
730−T7X,-0.384161960234008,240,AB,53.55771771704167,-113.899984026875,-31.595871742030447 730+T4J,-0.38615268800554303,57,AB,52.6656679124386,-113.6356559595614,-31.617826621432997
731−B0N,-0.38513482461160076,163,NS,45.04967581233129,-63.71622660552148,-31.66238732112796 731+T7X,-0.38886990518264264,240,AB,53.55771771704167,-113.899984026875,-31.80338362403914
732−J0V,-0.38536194282907654,198,QC,45.80625693353535,-74.96071547803031,-31.677906275520794 732+J0X,-0.3896082840746607,535,QC,45.8648612691215,-76.07448895816822,-31.853719980139815
733−T8H,-0.3863576185218103,91,AB,53.55821312362637,-113.27576578582418,-31.745899068516138 733+T5P,-0.389672988345835,71,AB,53.54041232887324,-113.59272009281689,-31.858129192872763
734−J0K,-0.38644658766740014,253,QC,46.15552006525692,-73.6171113883004,-31.751971307434058 734+T8H,-0.3911318351413333,91,AB,53.55821312362637,-113.27576578582418,-31.957465267064713
735−R2G,-0.38657221223513194,52,MB,49.93583401923077,-97.06944544230768,-31.760544398030433 735+R2G,-0.3941666615424323,52,MB,49.93583401923077,-97.06944544230768,-32.16364952290901
736−R2P,-0.390656777268796,80,MB,49.9607538625,-97.16705175,-32.03870442421272 736+J0W,-0.3942933238934488,78,QC,46.457720865384616,-75.4674183874359,-32.1722412904066
737−T8L,-0.3913081533497673,135,AB,53.68476113185185,-113.22869478911112,-32.082958372036344 737+T8L,-0.39710474748028624,135,AB,53.68476113185185,-113.22869478911112,-32.36266604333606
738−R0E,-0.39611309293751934,202,MB,50.27952075247524,-96.23922542574257,-32.40851289278361 738+R2P,-0.3981480418522563,80,MB,49.9607538625,-97.16705175,-32.43319489561346
739−T5K,-0.40227399426581,263,AB,53.54230627982509,-113.51101078396579,-32.82365723070703 739+S7H,-0.4046855374949906,71,SK,52.11500907042254,-106.61225757746479,-32.873471867109004
740−S7H,-0.4031824950933272,71,SK,52.11500907042254,-106.61225757746479,-32.8846592793009 740+V0K,-0.40825853247648464,392,BC,51.32351947540816,-121.26977584655613,-33.11288664664684
741−QC_other,-0.4082664865496549,3523,QC,46.4638677084956,-70.17726339510645,-33.22500720206782 741+T6J,-0.40876432430220316,134,AB,53.457298902835824,-113.51917695604477,-33.146709047558865
742−T6J,-0.40898388582033746,134,AB,53.457298902835824,-113.51917695604477,-33.27289435404314 742+B0N,-0.4098050322684701,163,NS,45.04967581233129,-63.71622660552148,-33.21624760908048
743−K6H,-0.41028938269430837,145,QC,45.01923576827586,-74.72070429172415,-33.35994954436947 743+K6H,-0.4112456455355292,145,ON,45.01923576827586,-74.72070429172415,-33.31238790168113
744−V2K,-0.41222252947060184,97,BC,53.88901506525773,-122.7872925028866,-33.48865010446327 744+T6X,-0.418922264084991,353,AB,53.419388071558075,-113.4506835627762,-33.8223633139577
745−T6X,-0.4140623224324154,353,AB,53.419388071558075,-113.4506835627762,-33.6109047218052 745+R0E,-0.41907534897067705,202,MB,50.27952075247524,-96.23922542574257,-33.83249333450846
746−SK_other,-0.4147662546377066,123,SK,51.95476379674797,-105.94395302439024,-33.65762169933005 746+NS_other,-0.41958294015530473,436,NS,45.185989916284406,-62.76937610711009,-33.86607085505301
747−T5L,-0.42257613182939313,69,AB,53.57890355217391,-113.5562797073913,-34.17372953376514 747+SK_other,-0.4214622872734531,120,SK,51.88126193425,-106.14511785408334,-33.99024274661275
748−T4N,-0.4232194832933637,87,BC,52.249740075574714,-113.81555739891954,-34.21606534137517 748+T7Z,-0.42477234495712346,83,AB,53.525670301807224,-114.00905485891566,-34.20837763211375
749−T5E,-0.42468028999853213,99,AB,53.599494127979796,-113.49768972818181,-34.3120927983638 749+T4N,-0.4289847092580072,87,AB,52.249740075574714,-113.81555739891954,-34.48493302850055
750−T7Z,-0.42591297404400447,83,AB,53.525670301807224,-114.00905485891566,-34.39301534733732 750+T5L,-0.42941837273192796,69,AB,53.57890355217391,-113.5562797073913,-34.513338360414934
751−T8V,-0.42597480964880197,83,BC,55.177643593289154,-118.7983257912289,-34.397072069486036 751+V2K,-0.4309617773414404,97,BC,53.88901506525773,-122.7872925028866,-34.61433281814704
752−B4N,-0.42678392380877295,53,QC,45.07236364735849,-64.49812433264151,-34.45013085920648 752+T5E,-0.4320011317099999,99,AB,53.599494127979796,-113.49768972818181,-34.68225639252721
753−T1A,-0.43162774867455694,69,AB,50.048656826594204,-110.72037531453623,-34.76687519894048 753+T5T,-0.435843950158647,341,AB,53.52009546558651,-113.66132208032845,-34.93277895802366
754−T5T,-0.4331708223197652,341,AB,53.52009546558651,-113.66132208032845,-34.86745709202362 754+T8V,-0.4371088908960541,83,AB,55.177643593289154,-118.7983257912289,-35.01503310231282
755−K8A,-0.4335653027194386,109,QC,45.81360440587156,-77.12971027954129,-34.89314553645466 755+G0S,-0.43743860687078195,83,QC,46.53187009807229,-71.45519242759036,-35.0364561520612
756−T1R,-0.4350414144028231,51,AB,50.56000350454902,-111.89459957015686,-34.98917962903625 756+T1R,-0.44309881966157416,51,AB,50.56000350454902,-111.89459957015686,-35.40312494324925
757−K6J,-0.43691155657848263,56,QC,45.027655595,-74.77072785928571,-35.11064549146855 757+K6J,-0.44343681198821244,56,ON,45.027655595,-74.77072785928571,-35.42495450202375
758−T5W,-0.4432339710682361,78,AB,53.56880679628205,-113.42045126602564,-35.51960870687751 758+B4N,-0.4460614987509097,53,NS,45.07236364735849,-64.49812433264151,-35.594221535498704
759−T5Z,-0.4433593540800726,187,AB,53.63351592491979,-113.46677246411765,-35.52769294571855 759+T1A,-0.44675009344193656,69,AB,50.048656826594204,-110.72037531453623,-35.63855574671777
760−T6T,-0.4439970165792508,273,AB,53.45183086904762,-113.38329634758242,-35.568791413294186 760+T6T,-0.4475609717683396,273,AB,53.45183086904762,-113.38329634758242,-35.69072389305068
761−S7L,-0.4480549732182119,87,SK,52.141231839080454,-106.70835494252873,-35.82972068603723 761+T5Z,-0.4477016508443148,187,AB,53.63351592491979,-113.46677246411765,-35.69977022626022
762−T9V,-0.4483030460189671,82,AB,53.26814715106097,-110.03585099459755,-35.845637612591986 762+G0X,-0.4478962610640855,51,QC,46.6990780672549,-72.46975772039215,-35.71228249056105
763−V2N,-0.44879489254313043,164,BC,53.86110115878049,-122.77582285762195,-35.87718395412697 763+T8R,-0.4495203852102663,65,AB,53.78524130584615,-113.70198205138462,-35.81660898235126
764−T4V,-0.45330743241361326,89,AB,53.007390173359546,-112.843284085191,-36.16588883209695 764+K8A,-0.4506450537732539,109,ON,45.81360440587156,-77.12971027954129,-35.88875344758423
765−N7M,-0.45750279868256283,52,ON,42.38559699211539,-82.19635739096154,-36.43313531846609 765+T5W,-0.4529243235073056,78,AB,53.56880679628205,-113.42045126602564,-36.034713866691106
766−J0X,-0.4601202233856359,535,QC,45.8648612691215,-76.07448895816822,-36.59929924473323 766+T9V,-0.45820553882749254,82,AB,53.26814715106097,-110.03585099459755,-36.3716378486291
767−J0W,-0.4616142185771094,78,QC,46.457720865384616,-75.4674183874359,-36.693948866153 767+S7L,-0.4598543011282057,87,SK,52.141231839080454,-106.70835494252873,-36.476459456696816
768−T8R,-0.46163039543902973,65,AB,53.78524130584615,-113.70198205138462,-36.694972951117656 768+V2N,-0.4641462804473629,164,BC,53.86110115878049,-122.77582285762195,-36.74851692883359
769−T9E,-0.46479738891032846,230,AB,53.26132383026087,-113.55408685421739,-36.89514242347006 769+T4V,-0.46472918404599234,89,AB,53.007390173359546,-112.843284085191,-36.78537570233491
770−R5G,-0.4721706934144657,74,MB,49.528114445945945,-96.70379945945946,-37.35872259495545 770+N7M,-0.4684198815148391,52,ON,42.38559699211539,-82.19635739096154,-37.018251754358054
771−T6V,-0.47327434439859434,105,AB,53.61493422590477,-113.5531794907619,-37.42781856647862 771+T6V,-0.4740902155233529,105,AB,53.61493422590477,-113.5531794907619,-37.37436869816633
772−V8C,-0.4744409940688403,50,BC,54.0647002556,-128.63767870060002,-37.50077581526449 772+T0E,-0.4746762215150002,248,AB,53.69145252339113,-114.92236381347985,-37.41105694252449
773−T0J,-0.48341571103066316,181,AB,51.10547730555248,-112.52602027353039,-38.05917915860739 773+T9E,-0.474687742525107,230,AB,53.26132383026087,-113.55408685421739,-37.41177802621621
774−T6K,-0.48370825312876964,78,AB,53.459103021794874,-113.45266045141024,-38.077296806078266 774+V8C,-0.48423303381091615,50,BC,54.0647002556,-128.63767870060002,-38.00635859916177
775−T6L,-0.48604857139246077,139,AB,53.461955785323745,-113.4143033605036,-38.22204619341559 775+T6K,-0.48845807400811253,78,AB,53.459103021794874,-113.45266045141024,-38.26773168134818
776−T5Y,-0.49364923428273016,286,AB,53.6202222893007,-113.40194535482517,-38.68981964824032 776+R5G,-0.4889671285643334,74,MB,49.528114445945945,-96.70379945945946,-38.29914877661545
777−V1R,-0.49528802976967656,65,BC,49.09961684584616,-117.7022121173846,-38.79021221119683 777+T6L,-0.4892399122056302,139,AB,53.461955785323745,-113.4143033605036,-38.31597746408361
778−S7M,-0.49995221391750566,74,SK,52.1211585,-106.70171112162163,-39.075041169375744 778+T5Y,-0.4973638975420358,286,AB,53.6202222893007,-113.40194535482517,-38.815067513577695
779−T5X,-0.5015680409238987,118,AB,53.621857290067794,-113.51862434630509,-39.17340587164478 779+T0J,-0.500591243190281,181,AB,51.10547730555248,-112.52602027353039,-39.01221413790659
780−T5B,-0.5043719964784126,64,AB,53.5715747825,-113.4625019915625,-39.343722047032315 780+T5X,-0.5022052726655206,118,AB,53.621857290067794,-113.51862434630509,-39.11057082526902
781−B0P,-0.5073202183336167,148,NS,45.03814467486487,-64.6585403372973,-39.52228685766934 781+R3L,-0.5069070798135421,56,MB,49.873883178571425,-97.14393655357142,-39.39618919118446
782−E4P,-0.5079804777658609,124,QC,46.21517185483871,-64.49273066129032,-39.56220465870963 782+V1R,-0.507698445522764,65,BC,49.09961684584616,-117.7022121173846,-39.44412999704987
783−G0S,-0.5087340030279566,83,QC,46.53187009807229,-71.45519242759036,-39.6077289102938 783+S7M,-0.5100916852126633,74,SK,52.1211585,-106.70171112162163,-39.58888142707375
784−R3L,-0.50966617642089,56,MB,49.873883178571425,-97.14393655357142,-39.66399874784513 784+T5B,-0.5120336021585195,64,AB,53.5715747825,-113.4625019915625,-39.70608096922981
785−T9K,-0.5139016879523036,174,AB,56.75448963606322,-111.45476833615518,-39.9190121395918 785+T9K,-0.5179620143388276,174,AB,56.75448963606322,-111.45476833615518,-40.062470716742624
786−B4V,-0.5170985380535943,63,NS,44.364046670476185,-64.55827906777778,-40.11077536925297 786+T5H,-0.5244753932383395,123,AB,53.53062432992683,-113.50340605660163,-40.4515979131332
787−V2L,-0.5193289042651899,55,BC,53.88655265818181,-122.6873628150909,-40.244201422516554 787+E4P,-0.5256583685751256,124,NB,46.21517185483871,-64.49273066129032,-40.522000553643004
788−G0X,-0.5200588745526659,51,QC,46.6990780672549,-72.46975772039215,-40.28780546321923 788+V2L,-0.5262931192211286,55,BC,53.88655265818181,-122.6873628150909,-40.559742272657076
789−B6L,-0.5201111574197546,53,QC,45.401810198490566,-63.26173380792453,-40.29092730633961 789+B0P,-0.5324605353890253,148,NS,45.03814467486487,-64.6585403372973,-40.925206934425184
790−T0E,-0.5213636154367327,248,BC,53.69145252339113,-114.92236381347985,-40.36566360131562 790+T5G,-0.5388101190260656,60,AB,53.56732104916667,-113.4959096605,-41.29911892485127
791−T7S,-0.5290117551655052,55,BC,54.12469462552727,-115.66316142669092,-40.82001565000968 791+S4S,-0.54232926002092,86,SK,50.419425686046516,-104.62191862790696,-41.50533254166211
792−T5G,-0.5298817948761049,60,AB,53.56732104916667,-113.4959096605,-40.871482194251655 792+B4V,-0.5429226239483975,63,NS,44.364046670476185,-64.55827906777778,-41.540030871894885
793−T5H,-0.5336886140787133,123,AB,53.53062432992683,-113.50340605660163,-41.096145872936894 793+B6L,-0.5439245132862952,53,NS,45.401810198490566,-63.26173380792453,-41.59857196091482
794−E1G,-0.5339402048865451,93,QC,46.12472595698925,-64.8750412795699,-41.11096367709132 794+T9M,-0.5441614106033,127,AB,54.43979339935433,-110.22535701578741,-41.61240546390197
795−S4S,-0.5343442142853249,86,SK,50.419425686046516,-104.62191862790696,-41.13475059585793 795+T7S,-0.5493231770959542,55,AB,54.12469462552727,-115.66316142669092,-41.913012094904936
796−V2G,-0.535003312300852,73,BC,52.13422734835616,-122.13884477534246,-41.17353578190007 796+V2G,-0.5535999093643214,73,BC,52.13422734835616,-122.13884477534246,-42.16090412868321
797−R0A,-0.5353661780859855,148,MB,49.45332109459459,-96.76132632432432,-41.194878020606915 797+E1G,-0.5547548419832679,93,NB,46.12472595698925,-64.8750412795699,-42.227665827102825
798−T9M,-0.5437661612036789,127,AB,54.43979339935433,-110.22535701578741,-41.686771212895316 798+R0A,-0.5559877509125504,148,MB,49.45332109459459,-96.76132632432432,-42.29884996297467
799−V2M,-0.5541517921824362,87,BC,53.862374266436774,-122.80571560436782,-42.2892568759756 799+T5A,-0.5651487213867288,90,AB,53.59417318144444,-113.41982069088888,-42.82503463374569
800−T9H,-0.5627010177336855,107,AB,56.65121111928973,-111.38734856450468,-42.78053601532233 800+V2M,-0.5675372700629493,87,BC,53.862374266436774,-122.80571560436782,-42.961436855061876
801−T5A,-0.5651329057979977,90,AB,53.59417318144444,-113.41982069088888,-42.91951828367721 801+T9H,-0.5704005573931825,107,AB,56.65121111928973,-111.38734856450468,-43.12452106036078
802−E3B,-0.5691282462533743,104,QC,45.91962835576923,-66.63627050961539,-43.14711926702132 802+G0R,-0.5724699942377149,123,QC,46.85878246804878,-70.38906747642277,-43.242099569418016
803−E3A,-0.582134598520611,73,QC,45.97249969863014,-66.62391587671233,-43.881779877339454 803+E3B,-0.5853128006511867,104,NB,45.91962835576923,-66.63627050961539,-43.96636951282318
804−S0K,-0.5895382765440855,268,SK,52.303773003731344,-106.50638420149254,-44.295726854454884 804+E3A,-0.6006116799387841,73,NB,45.97249969863014,-66.62391587671233,-44.817097079445986
805−S0J,-0.5896880725031357,190,SK,53.64329271052631,-106.10882098947368,-44.30407050453579 805+R7A,-0.603459956738664,64,MB,49.830784140625,-99.954790046875,-44.97404963331688
806−R7A,-0.5915407241450155,64,MB,49.830784140625,-99.954790046875,-44.407160135687995 806+S0K,-0.6086066002885678,268,SK,52.303773003731344,-106.50638420149254,-45.25652107243688
807−A1L,-0.6038056374558386,70,NL,47.53215062857143,-52.88351435714286,-45.084837177125515 807+G0L,-0.6093964536851056,55,QC,47.88740009290909,-69.19724255963636,-45.29974332333819
808−R0C,-0.6042794719711018,163,MB,50.603661042944786,-97.30552206134969,-45.11085171290308 808+S0J,-0.6099371200242206,190,SK,53.64329271052631,-106.10882098947368,-45.3293099173129
809−E1A,-0.6135830058327895,207,QC,46.09167680676328,-64.72582895169081,-45.61914662684449 809+A1L,-0.6174769081557537,70,NL,47.53215062857143,-52.88351435714286,-45.739965264959615
810−B0E,-0.6171868648887566,125,QC,45.937936985840004,-61.050800693999996,-45.81477483776316 810+T9N,-0.6241119473214367,70,AB,54.25744733185714,-110.76997989528572,-46.09879099277568
811−S0M,-0.6320313581062297,180,SK,53.50021531375556,-108.93214574572222,-46.613186376460334 811+R0C,-0.6254138328796295,163,MB,50.603661042944786,-97.30552206134969,-46.16891853942625
812−V1J,-0.6340482269962265,162,BC,56.23051926555556,-120.85154619598765,-46.72075207058004 812+E1A,-0.6299553793701013,207,NB,46.09167680676328,-64.72582895169081,-46.412840587596925
813−R0J,-0.6360837136125689,110,SK,50.51852058181818,-99.99157126363637,-46.82909096807536 813+B0E,-0.6441745619844665,125,NS,45.937936985840004,-61.050800693999996,-47.16941451436231
814−T0H,-0.6365419424410161,238,BC,56.3156674202689,-117.58536711827311,-46.85344983003592 814+V1J,-0.6464310807670989,162,BC,56.23051926555556,-120.85154619598765,-47.288493320498894
815−T7E,-0.6382914095706267,77,BC,53.60010065436364,-116.3755340604156,-46.94634668891633 815+T0G,-0.6497398032083034,171,AB,55.01782717241521,-114.96989101937426,-47.46261285011166
816−G0R,-0.6444731367683891,123,QC,46.85878246804878,-70.38906747642277,-47.27329829653757 816+T7E,-0.6506549094152461,77,AB,53.60010065436364,-116.3755340604156,-47.51066814798486
817−T0G,-0.6495583557060685,171,BC,55.01782717241521,-114.96989101937426,-47.540744530899325 817+S0M,-0.6528918631438797,180,SK,53.50021531375556,-108.93214574572222,-47.627953125143776
818−B0S,-0.6511271497911552,140,NS,44.802568600214286,-65.37236301321428,-47.62297778020429 818+R0J,-0.6582963452667847,110,MB,50.51852058181818,-99.99157126363637,-47.910233439682095
819−P0J,-0.6589321400477482,69,QC,47.54582441884058,-79.72523725507246,-48.03018872238118 819+T0H,-0.660747077277495,238,AB,56.3156674202689,-117.58536711827311,-48.037735197886214
820−T9N,-0.6604760336470782,70,AB,54.25744733185714,-110.76997989528572,-48.11036267541936 820+P0J,-0.669483443907159,69,ON,47.54582441884058,-79.72523725507246,-48.489719369617454
821−E4W,-0.6622581844624673,59,QC,46.66648872881356,-64.8661576440678,-48.20275548147651 821+B0S,-0.6771321184589527,140,NS,44.802568600214286,-65.37236301321428,-48.88220184345311
822−E1B,-0.6654563321413188,98,QC,46.05525647959184,-64.80372075510205,-48.36814610601338 822+J0Z,-0.6799521443203012,131,QC,47.81038557045802,-79.17579452450381,-49.026152288842695
823−B0T,-0.6677376789060362,120,NS,43.915185399722866,-65.03480700982632,-48.485802010863075 823+E1B,-0.6808864381749867,98,NB,46.05525647959184,-64.80372075510205,-49.07375460077246
824−V2J,-0.6695993589413034,105,BC,52.97488610790476,-122.54019541628573,-48.581615749856745 824+S4N,-0.6844717189139204,61,SK,50.45005506557377,-104.57220647540984,-49.25601256928428
825−S0G,-0.6706809258679899,232,SK,50.555656612068965,-103.89381019396552,-48.637198110245706 825+S4P,-0.6858109562377814,58,SK,50.44742644827586,-104.60799389655173,-49.32392532541369
826−S4N,-0.6721839205618949,61,SK,50.45005506557377,-104.57220647540984,-48.714338143897905 826+E4W,-0.6875047448711168,59,NB,46.66648872881356,-64.8661576440678,-49.409687232903856
827−T8S,-0.6726734846496034,54,BC,56.212139288796294,-117.30276917492593,-48.73943961726571 827+S6H,-0.6909990510184356,85,SK,50.420906447058826,-105.5472099882353,-49.58615677493762
828−S6H,-0.6759867682717395,85,SK,50.420906447058826,-105.5472099882353,-48.908999337604456 828+T8S,-0.691982695491422,54,AB,56.212139288796294,-117.30276917492593,-49.635721692063164
829−R0G,-0.6790416642455579,97,MB,49.40360283505155,-97.79856940206186,-49.064838871847236 829+V2J,-0.6923355371124267,105,BC,52.97488610790476,-122.54019541628573,-49.653489170924715
830−G0L,-0.6828610804538352,55,QC,47.88740009290909,-69.19724255963636,-49.259010404834356 830+S0G,-0.6925152228955218,232,SK,50.555656612068965,-103.89381019396552,-49.662534910429414
831−S4P,-0.6840529805164433,58,SK,50.44742644827586,-104.60799389655173,-49.3194525658464 831+B0T,-0.6963074110765075,120,NS,43.915185399722866,-65.03480700982632,-49.853062563918435
832−B0K,-0.6857486446028879,154,QC,45.686596645389606,-62.9450107198052,-49.405316930878165 832+R0G,-0.6967090111216306,97,MB,49.40360283505155,-97.79856940206186,-49.87319753288272
833−S9H,-0.6859522716461659,75,SK,50.30991141333333,-107.79178326666667,-49.41561832774003 833+S4R,-0.7013895557775285,51,SK,50.47977998039215,-104.62368984313726,-50.10727004952555
834−S4R,-0.6896841053060417,51,SK,50.47977998039215,-104.62368984313726,-49.60403902989798 834+E1C,-0.7017650583923594,85,NB,46.099840447058824,-64.80482864705883,-50.12600138303056
835−E1C,-0.6909663705552789,85,QC,46.099840447058824,-64.80482864705883,-49.66861860642996 835+S9H,-0.7027971627320373,75,SK,50.30991141333333,-107.79178326666667,-50.17744999870337
836−V0J,-0.7112635706576239,238,BC,54.46653000138656,-125.16325086268908,-50.6799068474449 836+B0K,-0.7120397492401737,154,NS,45.686596645389606,-62.9450107198052,-50.63581771250662
837−T0B,-0.7267236913533611,266,AB,53.11132985697368,-112.13424825041353,-51.436537568703464 837+T0A,-0.7164712162107645,261,AB,54.22403972777011,-111.9225513865479,-50.85408946660963
838−T0A,-0.7303830086178574,261,AB,54.22403972777011,-111.9225513865479,-51.6139219344258 838+T0B,-0.733819150706005,266,AB,53.11132985697368,-112.13424825041353,-51.699316831224216
839−E3L,-0.7503994790586435,55,QC,45.19644936363637,-67.25669143636364,-52.57281162673778 839+V0J,-0.7354593395308181,238,BC,54.46653000138656,-125.16325086268908,-51.778474137777785
840−J0Z,-0.7548252831412421,131,QC,47.81038557045802,-79.17579452450381,-52.78225125940501 840+S3N,-0.7733281404059574,61,SK,51.211713508196716,-102.46195759016393,-53.570421902488555
841−B5A,-0.7568326024586717,71,NS,43.89610895788732,-66.07798222338029,-52.8769372942307 841+E3L,-0.7745029733504184,55,NB,45.19644936363637,-67.25669143636364,-53.624936871174064
842−S3N,-0.7595006801816446,61,SK,51.211713508196716,-102.46195759016393,-53.00249771111369 842+B5A,-0.781169975316502,71,NS,43.89610895788732,-66.07798222338029,-53.933091134266206
843−S6V,-0.7741585136176422,96,SK,53.19113611458334,-105.74260737499999,-53.68635509379614 843+S6V,-0.7879354306621625,96,SK,53.19113611458334,-105.74260737499999,-54.24370284950547
844−V1G,-0.7744636118265333,77,BC,55.81719828558441,-120.4292089657143,-53.700483148572545 844+V1G,-0.7900871989197576,77,BC,55.81719828558441,-120.4292089657143,-54.34205394496834
845−S4T,-0.7849995035634568,89,SK,50.4543451011236,-104.6345960449438,-54.18572910742731 845+NL_other,-0.7925036075315316,214,NL,49.004086058224296,-57.080185150327104,-54.452249007243545
846−R0K,-0.7914760267790879,87,MB,49.605713919540236,-99.7390541954023,-54.48148751955224 846+S4T,-0.7948062314931481,89,SK,50.4543451011236,-104.6345960449438,-54.55700769385966
847−NL_other,-0.7982419441485402,149,NL,48.14870160402684,-53.876689624161074,-54.788422494540434 847+R0K,-0.8133415434454075,87,MB,49.605713919540236,-99.7390541954023,-55.39154959244039
848−S4A,-0.8189037011690321,57,SK,49.19965112280702,-103.04507957894737,-55.71298865099534 848+J0Y,-0.8237904477450225,60,QC,48.45025051166667,-77.60215428049999,-55.85523231479061
849−B0W,-0.8227960744510459,146,NS,43.93083566219178,-65.83433192308219,-55.88503517883947 849+G0C,-0.8328465559712279,76,QC,48.17086863763158,-65.44174349223685,-56.25320733620932
850−A2H,-0.8374439280306465,53,QC,48.96929237735849,-57.89500337735849,-56.526515102610816 850+S4A,-0.8337224986722729,57,SK,49.19965112280702,-103.04507957894737,-56.29151024191288
851−S0L,-0.8616842354200737,112,SK,51.489580775214286,-108.41836970251786,-57.56765597240524 851+B0W,-0.8527137528248737,146,NS,43.93083566219178,-65.83433192308219,-57.11375681966566
852−B0M,-0.8655721910552834,99,QC,45.514104107777776,-64.03354898656566,-57.73231075083285 852+A2H,-0.8577020338674595,53,NL,48.96929237735849,-57.89500337735849,-57.32715277152606
853−R0L,-0.866537329877873,67,SK,51.60080056716418,-100.7748179402985,-57.77308525897289 853+NB_other,-0.86373121251448,934,NB,46.43193946573876,-66.15229629657388,-57.58366094700952
854−S0E,-0.8743211157978212,113,SK,52.96472642477876,-103.596388,-58.100494628088484 854+S0L,-0.8816970952106651,112,SK,51.489580775214286,-108.41836970251786,-58.3389033068083
855−A0A,-0.8782492808461225,190,NL,47.56765076894737,-53.471708504736846,-58.26475995874192 855+R0L,-0.8886756942870416,67,MB,51.60080056716418,-100.7748179402985,-58.628627288142035
856−J0Y,-0.8981560644500223,60,QC,48.45025051166667,-77.60215428049999,-59.08735953026583 856+B0M,-0.8917994024287731,99,NS,45.514104107777776,-64.03354898656566,-58.75765775024573
857−E2A,-0.8989439080805958,53,QC,47.6233130754717,-65.66400166037737,-59.119579599615065 857+G0J,-0.8927015367252402,60,QC,48.57111022633333,-67.536719657,-58.79484710423781
858−G0C,-0.9046562762998,76,QC,48.17086863763158,-65.44174349223685,-59.35243789453371 858+S0E,-0.8959009847473037,113,SK,52.96472642477876,-103.596388,-58.926470176300604
859−V0C,-0.9090609509460087,149,BC,56.44480097040268,-121.53379307322146,-59.5310834541588 859+A0A,-0.8965890073850253,190,NL,47.56765076894737,-53.471708504736846,-58.95471997526545
860−R8N,-0.9159098733497553,73,MB,55.672305465753425,-97.96253098630137,-59.8073049338617 860+E2A,-0.9218877615876957,53,NB,47.6233130754717,-65.66400166037737,-59.98008945251231
861−R0M,-0.9383446974692723,50,SK,49.79425156,-100.92250111999999,-60.69898127792117 861+V0C,-0.9293959619723049,149,BC,56.44480097040268,-121.53379307322146,-60.279441755456155
862−S0A,-0.9390381630479746,179,SK,51.27565879888269,-102.65004955307262,-60.726225733974815 862+R8N,-0.9336847403371071,73,MB,55.672305465753425,-97.96253098630137,-60.44942964554294
863−E3Y,-0.9444678245761139,53,QC,47.066267415094345,-67.72137916981131,-60.938891162055775 863+R0M,-0.9613877304277532,50,MB,49.79425156,-100.92250111999999,-61.5300612305876
864−S0H,-0.9598498537182533,113,SK,50.123990442477876,-106.19959385840707,-61.53513281707815 864+S0A,-0.961401912938711,179,SK,51.27565879888269,-102.65004955307262,-61.53060682704676
865−R2W,-0.9657385537905898,72,MB,49.92074486111111,-97.13534740277777,-61.76097527137827 865+E3Y,-0.9653696927752121,53,NB,47.066267415094345,-67.72137916981131,-61.68294249255468
866−G0J,-0.9706868926771826,60,QC,48.57111022633333,-67.536719657,-61.94972753419754 866+R2W,-0.9784546091726247,72,MB,49.92074486111111,-97.13534740277777,-62.181052018913405
867−S0C,-0.9762375869499837,97,SK,49.41909219793814,-102.39812673608249,-62.160347878311995 867+S0H,-0.9793099169267054,113,SK,50.123990442477876,-106.19959385840707,-62.21338502906455
868−S0N,-1.0034714073889994,107,SK,49.93292885981308,-108.51628510280375,-63.17696021798551 868+S0C,-0.9954949401050416,97,SK,49.41909219793814,-102.39812673608249,-62.82003966556463
869−A0G,-1.0256430164546346,132,NL,49.21378543409091,-54.43604053181818,-63.984402041810085 869+S0N,-1.0241739520253468,107,SK,49.93292885981308,-108.51628510280375,-63.871179323181025
870−A0B,-1.1558331686174537,86,NL,47.51593593023256,-53.65787445348837,-68.38088100658041 870+A0G,-1.0411235575962943,132,NL,49.21378543409091,-54.43604053181818,-64.47838807203071
871+A0B,-1.1741410569675255,86,NL,47.51593593023256,-53.65787445348837,-68.90261293111047
modified results/reproduced/gradient_bins.csv +8 −8
@@ -1,9 +1,9 @@
1 x,prem,n 1 x,prem,n
2−2.0282523534641763,0.1878214496540589,12980 2+2.0280826468246667,0.18782746627135222,12979
3−7.563491017989508,0.11142969127236768,11358 3+7.563491017989508,0.11142405939551038,11358
4−14.394147475605937,0.016118590333607075,20383 4+14.39527495241125,0.016171041024382427,20373
5−27.88055702929087,0.10401369998492674,21602 5+27.883023461967795,0.10402971269590482,21594
6−59.65406819554855,0.06257146330258871,20927 6+59.65406819554855,0.0625715637174646,20927
7−104.14998635231608,-0.010089293358040565,25567 7+104.15004102924263,-0.010130278110219586,25565
8−217.74684657163596,-0.14115921211123508,19860 8+217.67667179753147,-0.14114525047993776,19856
9−485.2518699511848,-0.4780914690614219,9469 9+485.2518699511848,-0.478098199027526,9469
added results/reproduced/gradient_metro.json +59 −0
@@ -0,0 +1,59 @@
1+{
2+ "pooled": {
3+ "beta": -0.08209966126415225,
4+ "se_fsa": 0.007363835846001421,
5+ "r2": 0.08293509447883551
6+ },
7+ "metro_fe": {
8+ "beta": -0.07931348822676211,
9+ "se_fsa": 0.00446893791075632,
10+ "r2": 0.3361652612063101
11+ },
12+ "quadratic": {
13+ "b1": 0.07328339946519422,
14+ "b2": -0.022874390766348004,
15+ "se1": 0.027491486463321082,
16+ "se2": 0.003740481424748908,
17+ "r2": 0.10630723687513366
18+ },
19+ "metro_slopes": {
20+ "Calgary": {
21+ "beta": -0.016230924929353595,
22+ "n": 11420
23+ },
24+ "Edmonton": {
25+ "beta": -0.0001661291202443068,
26+ "n": 11889
27+ },
28+ "Halifax": {
29+ "beta": -0.13568892852878972,
30+ "n": 6900
31+ },
32+ "Montreal": {
33+ "beta": -0.07221087701325445,
34+ "n": 14166
35+ },
36+ "Ottawa-Gatineau": {
37+ "beta": -0.03771926605089583,
38+ "n": 10431
39+ },
40+ "Quebec City": {
41+ "beta": -0.12588188814955845,
42+ "n": 3150
43+ },
44+ "Toronto": {
45+ "beta": -0.10510592023135047,
46+ "n": 48045
47+ },
48+ "Vancouver": {
49+ "beta": -0.13423988808714496,
50+ "n": 30925
51+ },
52+ "Winnipeg": {
53+ "beta": -0.043914278604935575,
54+ "n": 4525
55+ }
56+ },
57+ "share_within_40km": 0.4665320396000591,
58+ "share_beyond_160km": 0.20633826105923825
59+}
\ No newline at end of file
modified results/reproduced/grand_model.parquet +0 −0

Binary file not shown.

modified results/reproduced/heterogeneity.csv +9 −8
@@ -1,9 +1,10 @@
1 prov,n,elast,se_el,bath,se_bath 1 prov,n,elast,se_el,bath,se_bath
2−NL,1029,0.41886323780274975,0.04345835618416139,0.25835214604184414,0.026510333907419987 2+NL,1274,0.4104812395492729,0.036302390123551395,0.2554383709516481,0.02229956117340222
3−ON,49279,0.4720901632997946,0.013156307134272625,0.11472123286285063,0.005531088049014921 3+ON,55897,0.47154589923348356,0.012098783892438411,0.11803194871790838,0.005200119504443539
4−NS,1934,0.47483207288538104,0.044920571815778486,0.16886581690826713,0.024607381866662878 4+BC,32994,0.4926302709600973,0.02064561645032789,0.08970433780029793,0.006019121726868399
5−BC,30058,0.4958361647154056,0.021890607542201092,0.09149012627659524,0.006093443885784292 5+NS,3044,0.49725615973533593,0.0346707665570277,0.20219257053533937,0.01649436000062242
6−AB,22435,0.5527530702149726,0.021986769802557028,0.12293484818163652,0.0077485150029473265 6+QC,19949,0.5668093622428652,0.02344744245780137,0.20009276578888266,0.01416903561551592
7−QC,30857,0.5877745125683984,0.01585377636869836,0.12950231091820924,0.012583702295353723 7+AB,19463,0.5899055274660874,0.02113982479267957,0.13542181014003202,0.009204127414761312
8−MB,3056,0.666477046579255,0.034615494385032364,0.20513902421662095,0.013229354095124608 8+NB,2980,0.6045093334559823,0.024216806867994142,0.14679268590895897,0.01907698923817812
9−SK,3459,0.7235871144875173,0.034985520991915035,0.16683678850681966,0.012723659060980184 9+MB,3062,0.6635514931252313,0.03467967283701016,0.20873501979116416,0.014418726399851166
10+SK,3458,0.7259189577578324,0.03487319637585102,0.16565314566985492,0.012685036263023038
modified results/reproduced/lopo.csv +9 −8
@@ -1,9 +1,10 @@
1 prov,n,r2_within 1 prov,n,r2_within
2−MB,3056,0.5212014330611053 2+MB,3062,0.5206157025148328
3−ON,49279,0.5158994827387327 3+AB,19463,0.5189557043035248
4−SK,3459,0.47318893331131373 4+NB,2980,0.5146804854254485
5−NS,1934,0.46113025528770357 5+ON,55897,0.48264960507972354
6−NL,1029,0.3966549132902695 6+SK,3458,0.4744768322638858
7−BC,30058,0.2881968210788265 7+NS,3044,0.4635065765463674
8−QC,30857,0.14633577388751784 8+NL,1274,0.403731344586843
9−AB,22435,-0.28652058269090674 9+QC,19949,0.18457226936020632
10+BC,32994,-0.4943032663830935
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
@@ -0,0 +1,13 @@
1+seed,k,model,I,z,p_perm
2+3,5,structure_only,0.5250899655789282,107.20160912306052,0.005
3+3,5,grand_model,0.11087182543253048,21.32592870965132,0.005
4+3,10,structure_only,0.4957259278108799,139.94361320990166,0.005
5+3,10,grand_model,0.06273902171208925,18.858810403882664,0.005
6+3,20,structure_only,0.4689183472389046,199.4498864522558,0.005
7+3,20,grand_model,0.03376306079384431,14.620351975750529,0.005
8+2026,5,structure_only,0.5174082098658124,107.76756749471866,0.005
9+2026,5,grand_model,0.10011806607758783,19.94377576855909,0.005
10+2026,10,structure_only,0.4912923792434925,150.7054290574688,0.005
11+2026,10,grand_model,0.05765550077958535,16.69929820984847,0.005
12+2026,20,structure_only,0.4696702384047955,191.0030961966071,0.005
13+2026,20,grand_model,0.030829522050525287,13.592314626069072,0.005
modified results/reproduced/nonlinear_band.csv +60 −60
@@ -1,61 +1,61 @@
1 ln_area,elasticity,se 1 ln_area,elasticity,se
2−3.9746788410500162,0.6494380150270442,0.018806169225596938 2+3.9746788410500162,0.6485156273688424,0.019044564183953352
3−4.007448185522403,0.6453501028853275,0.018381350505736426 3+4.007447757675561,0.6444087127823429,0.01860803496344336
4−4.0402175299947904,0.6412621907436105,0.01796045289812988 4+4.040216674301107,0.6403017981958434,0.01817428004873902
5−4.072986874467177,0.6371742786018936,0.017543758622809665 5+4.072985590926653,0.6361948836093441,0.017743502901752767
6−4.105756218939565,0.6330863664601766,0.01713157439767673 6+4.105754507552198,0.6320879690228447,0.017315925762265087
7−4.138525563411951,0.6289984543184598,0.016724233689144573 7+4.138523424177743,0.6279810544363453,0.016891791634675565
8−4.171294907884339,0.6249105421767428,0.016322099131342246 8+4.171292340803289,0.623874139849846,0.016471366491568523
9−4.2040642523567255,0.6208226300350259,0.015925565108838927 9+4.204061257428834,0.6197672252633466,0.01605494171322613
10−4.236833596829113,0.616734717893309,0.015535060490279138 10+4.236830174054379,0.6156603106768472,0.015642836781602786
11−4.2696029413015,0.6126468057515921,0.015151051490099803 11+4.269599090679924,0.6115533960903479,0.015235402245490307
12−4.302372285773887,0.6085588936098751,0.014774044622003154 12+4.30236800730547,0.6074464815038484,0.0148330229701557
13−4.335141630246274,0.6044709814681584,0.01440458969038976 13+4.335136923931016,0.603339566917349,0.014436121678958481
14−4.3679109747186615,0.6003830693264414,0.014043282743799144 14+4.367905840556561,0.5992326523308497,0.014045162785510108
15−4.400680319191048,0.5962951571847245,0.0136907688868942 15+4.400674757182106,0.5951257377443503,0.013660656501739237
16−4.433449663663435,0.5922072450430077,0.013347744814187709 16+4.433443673807652,0.5910188231578508,0.013283163188442571
17−4.466219008135822,0.5881193329012907,0.013014960889424805 17+4.466212590433197,0.5869119085713514,0.012913297888933419
18−4.498988352608209,0.5840314207595738,0.012693222549853101 18+4.498981507058742,0.5828049939848521,0.01255173495143686
19−4.531757697080597,0.5799435086178569,0.012383390766070595 19+4.531750423684287,0.5786980793983527,0.012199212599965785
20−4.564527041552983,0.57585559647614,0.01208638123875636 20+4.564519340309833,0.5745911648118532,0.01185653725471546
21−4.597296386025371,0.571767684334423,0.011803161968311033 21+4.597288256935379,0.5704842502253539,0.011524587330182304
22−4.6300657304977575,0.5676797721927063,0.011534748799608328 22+4.630057173560924,0.5663773356388545,0.011204316152036868
23−4.662835074970145,0.5635918600509893,0.011282198531678436 23+4.662826090186469,0.5622704210523551,0.010896753534142227
24−4.695604419442532,0.5595039479092724,0.01104659920358333 24+4.695595006812015,0.5581635064658557,0.010603005450255174
25−4.728373763914919,0.5554160357675555,0.010829057236863613 25+4.72836392343756,0.5540565918793563,0.010324251131084127
26−4.761143108387306,0.5513281236258386,0.010630681244971383 26+4.761132840063105,0.5499496772928569,0.010061736833295518
27−4.7939124528596935,0.5472402114841216,0.010452562520423756 27+4.793901756688651,0.5458427627063575,0.009816765487295138
28−4.82668179733208,0.5431522993424048,0.010295752482106702 28+4.826670673314196,0.5417358481198581,0.009590681467333636
29−4.859451141804467,0.5390643872006879,0.010161237696290076 29+4.859439589939742,0.5376289335333587,0.00938484987777717
30−4.892220486276854,0.534976475058971,0.010049913446715157 30+4.892208506565287,0.5335220189468594,0.009200630048764194
31−4.924989830749241,0.5308885629172542,0.009962557175278108 31+4.924977423190832,0.52941510436036,0.009039343405651067
32−4.957759175221629,0.5268006507755372,0.00989980338558115 32+4.957746339816378,0.5253081897738605,0.008902236514584407
33−4.990528519694015,0.5227127386338203,0.009862121733881722 33+4.990515256441923,0.5212012751873611,0.008790440862844343
34−5.023297864166403,0.5186248264921034,0.009849799974258359 34+5.023284173067468,0.5170943606008618,0.008704931706221587
35−5.0560672086387894,0.5145369143503865,0.009862933153487302 35+5.056053089693014,0.5129874460143623,0.008646488958071338
36−5.088836553111177,0.5104490022086695,0.009901419982289194 36+5.088822006318559,0.5088805314278629,0.008615663435822582
37−5.121605897583564,0.5063610900669527,0.009964966701372051 37+5.121590922944105,0.5047736168413636,0.008612751675390605
38−5.15437524205595,0.5022731779252358,0.010053098103146507 38+5.15435983956965,0.5006667022548642,0.008637781905661116
39−5.187144586528338,0.49818526578351885,0.010165174764940674 39+5.187128756195195,0.49655978766836484,0.008690512696201668
40−5.219913931000725,0.49409735364180196,0.01030041508631286 40+5.219897672820741,0.49245287308186536,0.00877044442666226
41−5.252683275473112,0.4900094415000851,0.010457920458540392 41+5.252666589446286,0.488345958495366,0.008876842332989203
42−5.285452619945499,0.4859215293583682,0.010636701843251661 42+5.285435506071831,0.48423904390886663,0.00900876872905404
43−5.318221964417886,0.4818336172166513,0.010835706174752534 43+5.318204422697377,0.48013212932236715,0.00916512127948484
44−5.350991308890273,0.4777457050749344,0.011053841274740949 44+5.350973339322922,0.4760252147358678,0.009344673989337504
45−5.3837606533626605,0.4736577929332174,0.011289998315634176 45+5.383742255948468,0.4719183001493684,0.009546117834574711
46−5.416529997835047,0.46956988079150064,0.011543071230185503 46+5.416511172574013,0.46781138556286905,0.009768098550968067
47−5.449299342307435,0.46548196864978364,0.011811972794648285 47+5.449280089199558,0.4637044709763697,0.010009249858831316
48−5.482068686779821,0.46139405650806675,0.01209564738226706 48+5.482049005825104,0.4595975563898702,0.010268221171013807
49−5.514838031252209,0.45730614436634986,0.012393080581882697 49+5.514817922450649,0.45549064180337084,0.010543699499817517
50−5.547607375724596,0.453218232224633,0.012703306004351515 50+5.547586839076194,0.4513837272168715,0.010834425786043954
51−5.580376720196982,0.4491303200829161,0.013025409666862931 51+5.58035575570174,0.447276812630372,0.011139206207328802
52−5.61314606466937,0.4450424079411992,0.013358532365394058 52+5.613124672327285,0.44316989804387263,0.011456919201545502
53−5.645915409141757,0.4409544957994822,0.013701870432288165 53+5.6458935889528306,0.43906298345737327,0.011786518998302369
54−5.678684753614144,0.4368665836577653,0.014054675241619932 54+5.678662505578377,0.4349560688708738,0.012127036424831757
55−5.711454098086531,0.43277867151604854,0.014416251779497234 55+5.711431422203922,0.4308491542843744,0.012477577675426397
56−5.744223442558918,0.42869075937433154,0.014785956547026963 56+5.744200338829467,0.42674223969787506,0.01283732163220409
57−5.776992787031305,0.42460284723261466,0.015163195015218367 57+5.776969255455012,0.4226353251113757,0.013205516217712283
58−5.8097621315036925,0.42051493509089777,0.015547418806566344 58+5.809738172080557,0.4185284105248763,0.013581474158173165
59−5.842531475976079,0.4164270229491809,0.015938122738963504 59+5.842507088706103,0.41442149593837685,0.013964568446150951
60−5.875300820448467,0.4123391108074639,0.01633484183443525 60+5.875276005331648,0.4103145813518775,0.014354227715575542
61−5.908070164920853,0.4082511986657471,0.016737148367867986 61+5.9080449219571936,0.4062076667653781,0.014749931680493097
modified results/reproduced/oos.json +9 −9
@@ -1,11 +1,11 @@
1 { 1 {
2− "n_train": 113716, 2+ "n_train": 113696,
3− "n_test": 28430, 3+ "n_test": 28425,
4− "oos_r2": 0.7695758148853212, 4+ "oos_r2": 0.7718894921280807,
5− "rmse_log": 0.2799204872082716, 5+ "rmse_log": 0.2787054506189196,
6− "mae_log": 0.20249408087341147, 6+ "mae_log": 0.20171788608330393,
7− "median_ape": 15.558110855456578, 7+ "median_ape": 15.609115892744654,
8− "mean_ape": 21.995714792380202, 8+ "mean_ape": 21.90886557898956,
9− "within10": 34.22441083362645, 9+ "within10": 34.13896218117854,
10− "within20": 60.024621878297566 10+ "within20": 60.10905892700088
11 } 11 }
\ No newline at end of file
modified results/reproduced/quantile.csv +6 −6
@@ -1,7 +1,7 @@
1 tau,ln_living,se_living,bathrooms,se_bath,ln_lot,se_lot 1 tau,ln_living,se_living,bathrooms,se_bath,ln_lot,se_lot
2−0.1,0.5907624602909891,0.00854157216912479,0.17847844049765627,0.003971299609479059,-0.00584690608894789,0.0017051166161529854 2+0.1,0.5659561840611786,0.008635158502448994,0.18826658638681693,0.004090502014784771,0.006296755633911744,0.001653899405319757
3−0.25,0.5671770180033491,0.005324416376657182,0.14818531795728518,0.0023214169264950154,-0.002352869673359237,0.001153678746676559 3+0.25,0.5685548215915333,0.005257975063849512,0.16014583768867396,0.0023254673650835015,0.011642624121648737,0.0011115928949038177
4−0.5,0.5704083790496952,0.004744860290189453,0.1166730392561135,0.001955524401797616,0.014391215617820308,0.0010851679848038838 4+0.5,0.5698457117341604,0.004731127230802241,0.14158214007218817,0.0019399623811334986,0.023058955672127013,0.0010546254311119645
5−0.75,0.6006108334095188,0.0065587787957749,0.09015714132488029,0.002584740781679338,0.03371462880522813,0.0014853866310596741 5+0.75,0.5876085928098291,0.00636453353824442,0.12209510996217432,0.002439426254396635,0.038803881490920844,0.001417609337432087
6−0.9,0.5846851372612036,0.010215300951522364,0.07378175197334258,0.0038492026465534296,0.04726651517456304,0.002251612109834233 6+0.9,0.5670116910750949,0.010100640655141805,0.10060703506292157,0.0037181429065843504,0.05262055365500373,0.0022109694437838275
7−,0.5813085677006347,0.009653234341615202,0.127356234367056,0.0023632395826616646,0.030608663376169284,0.001678009533164809 7+,0.5474997182700174,0.012357980593754014,0.14835836470725394,0.0023884311056201874,0.03514185511417879,0.0015226565461140182
modified results/reproduced/robustness.csv +8 −6
@@ -1,7 +1,9 @@
1 label,n,r2,ln_living,se_living,bathrooms,se_bath,ln_lot,se_lot 1 label,n,r2,ln_living,se_living,bathrooms,se_bath,ln_lot,se_lot
2−Baseline (all residential),142146,0.7695479150272374,0.5300775244939722,0.010200096739191443,0.11107079513655177,0.0034720178610876534,0.060959009581207396,0.0071746528194990096 2+Baseline (all residential),142121,0.7756471970293983,0.528603988702865,0.009336508213523616,0.11212899662672808,0.0037658828512810677,0.06712720020098861,0.0025251740675062365
3−Houses only,83542,0.7657314371141364,0.4860848549657795,0.010302763477595489,0.10541941278639437,0.003915059865757416,0.0802405166313547,0.004654076544900686 3+Houses only,83524,0.7692004500025985,0.4873341531148157,0.009796769137589896,0.10679536062492406,0.0043719296453405155,0.0844012956243418,0.0026405854221564977
4−Condominiums only,57860,0.8124287804174603,0.6209244425136851,0.017398414434041803,0.1211076396782959,0.004833738823918021,0.0059408796827741675,0.0035982800010453393 4+Condominiums only,57853,0.8122184002227361,0.6204156004854661,0.017365555677846495,0.12096218023376086,0.004794871474561271,0.0054463369039143925,0.0038428065307663842
5−Price trimmed 0.5/99.5\%,140739,0.7669067639239838,0.5203621130199332,0.009478396877136818,0.109248895929146,0.0033868967901083138,0.05809020151404406,0.00700405850967329 5+Price trimmed 0.5/99.5\%,140714,0.7729612024628985,0.5194162046892835,0.009048467332286585,0.11025727650060661,0.003698725293740361,0.06407735139388877,0.002452360552652239
6−FSAs with $\geq$50 listings,131792,0.7621236613992234,0.5260636122563492,0.011260120706112911,0.11153142279402012,0.003719756520921279,0.05972909238033767,0.0074311094274621394 6+FSAs with $\geq$50 listings,131780,0.7687290717428509,0.5249361879391458,0.010165234391855885,0.11257581612569426,0.004064433851039963,0.06624260095563567,0.002629075369365997
7−ON/QC/BC only,110194,0.7626700124075747,0.5226403771521636,0.011797609007361575,0.09752517275570255,0.003695374548145484,0.04703518783585091,0.009191963567514292 7+ON/QC/BC only,108840,0.7525130573410193,0.5208893851070828,0.010793150607346183,0.09554318696859039,0.004032273099340316,0.06326522706107286,0.003029094145271359
8+Storeys/parking capped at P99,142121,0.7786304240216518,0.5133172453029322,0.009575395080681576,0.11003877802012794,0.003780953426766237,0.05926406536791285,0.0026028891416590826
9+Excl. pooled residual FSAs,136736,0.7849649383585839,0.5221981880700657,0.009325788120017896,0.10994701458743739,0.0035095040503933454,0.06850489366880018,0.002401213317972831
added results/reproduced/se_comparison.csv +6 −0
@@ -0,0 +1,6 @@
1+variable,coef,se_hc1,se_fsa,se_prov,se_twoway,p_wild_prov,t_prov,n_fsa_clusters,n_prov_clusters
2+ln_living,0.5286039887028707,0.003713741852059559,0.009380264846772476,0.03734116771463133,0.03749689263851873,0.00390625,14.156064768583782,1155,9
3+bathrooms,0.11212899662672692,0.0015523006126709246,0.0037835320999019323,0.01203083817976454,0.012081010723220148,0.00390625,9.320131727423952,1155,9
4+half_baths,-0.03381853074122639,0.0021362199625633038,0.006631937582371366,0.03149468505976408,0.031626028232298764,0.5234375,-1.0737853284467713,1155,9
5+bedrooms,-0.005701483354909823,0.0011359403229463866,0.0021060008357796393,0.008415295979624033,0.008450390525566778,0.58203125,-0.6775142988095526,1155,9
6+ln_lot,0.0671272002009808,0.0011102525909670643,0.0025370085899037134,0.006034326376636605,0.006059491497955114,0.00390625,11.124224314561513,1155,9
added results/reproduced/shapley.csv +9 −0
@@ -0,0 +1,9 @@
1+sample,block,sequential,shapley,owen,total_r2,n
2+All residential,Structure,0.43618503912267237,0.33001695761673167,0.3396158408033636,0.7756471970293983,142121
3+All residential,Dwelling type and ownership,0.01588305056749051,0.07526729642229558,0.0726329637250609,0.7756471970293983,142121
4+All residential,Province,0.14301894737912835,0.0888442883467605,,0.7756471970293983,142121
5+All residential,Neighbourhood (FSA),0.1805601599601071,0.2815186546436106,0.3633983925009737,0.7756471970293983,142121
6+Houses,Structure,0.4665364059791267,0.318070020277909,0.33759488548612715,0.7692004500025985,83524
7+Houses,Dwelling type and ownership,0.0030990779994976014,0.00864476716904867,0.00980321183262158,0.7692004500025985,83524
8+Houses,Province,0.13495166133030845,0.10790943045617148,,0.7692004500025985,83524
9+Houses,Neighbourhood (FSA),0.16461330469366575,0.33457623209946935,0.4218023526838497,0.7692004500025985,83524
added results/reproduced/spatial_holdout.json +236 −0
@@ -0,0 +1,236 @@
1+{
2+ "fsa_holdout": [
3+ {
4+ "rep": 0,
5+ "n_fsa_held": 229,
6+ "prov_mean": {
7+ "n_test": 27685,
8+ "oos_r2": 0.5327446406573204,
9+ "rmse_log": 0.39348702615358166,
10+ "median_ape": 23.757930232170555,
11+ "mean_ape": 34.04086035432266,
12+ "mean_ape_trim": 31.72219636641972,
13+ "within10": 22.7307206068268,
14+ "within20": 43.142495936427665
15+ },
16+ "nn_idw": {
17+ "n_test": 27685,
18+ "oos_r2": 0.7527072426489583,
19+ "rmse_log": 0.28625888177217096,
20+ "median_ape": 16.847732973370544,
21+ "mean_ape": 23.655576590529634,
22+ "mean_ape_trim": 22.12559154691505,
23+ "within10": 31.789777858045877,
24+ "within20": 57.334296550478605
25+ }
26+ },
27+ {
28+ "rep": 1,
29+ "n_fsa_held": 229,
30+ "prov_mean": {
31+ "n_test": 27892,
32+ "oos_r2": 0.497814436439839,
33+ "rmse_log": 0.41185174128308616,
34+ "median_ape": 25.97653639583541,
35+ "mean_ape": 35.52666078157636,
36+ "mean_ape_trim": 33.43250388136772,
37+ "within10": 20.7944930446006,
38+ "within20": 39.269324537501795
39+ },
40+ "nn_idw": {
41+ "n_test": 27892,
42+ "oos_r2": 0.7294760761160134,
43+ "rmse_log": 0.3022815452616775,
44+ "median_ape": 17.941228706055973,
45+ "mean_ape": 25.06222337233308,
46+ "mean_ape_trim": 23.464527759518038,
47+ "within10": 30.316936756059086,
48+ "within20": 54.155313351498634
49+ }
50+ },
51+ {
52+ "rep": 2,
53+ "n_fsa_held": 229,
54+ "prov_mean": {
55+ "n_test": 26554,
56+ "oos_r2": 0.5574534859600185,
57+ "rmse_log": 0.4003914216259224,
58+ "median_ape": 25.034350369202024,
59+ "mean_ape": 35.37096163854262,
60+ "mean_ape_trim": 32.49803283489113,
61+ "within10": 20.554342095352865,
62+ "within20": 40.35926790690668
63+ },
64+ "nn_idw": {
65+ "n_test": 26554,
66+ "oos_r2": 0.7572072910955763,
67+ "rmse_log": 0.2965672038011161,
68+ "median_ape": 17.776625299672485,
69+ "mean_ape": 24.56816159861885,
70+ "mean_ape_trim": 22.95474306312133,
71+ "within10": 29.713037583791518,
72+ "within20": 55.09151163666491
73+ }
74+ },
75+ {
76+ "rep": 3,
77+ "n_fsa_held": 229,
78+ "prov_mean": {
79+ "n_test": 27301,
80+ "oos_r2": 0.539016914545348,
81+ "rmse_log": 0.38590852332462117,
82+ "median_ape": 24.239379772687123,
83+ "mean_ape": 33.06352722971933,
84+ "mean_ape_trim": 31.033565294218146,
85+ "within10": 21.933262517856488,
86+ "within20": 42.258525328742536
87+ },
88+ "nn_idw": {
89+ "n_test": 27301,
90+ "oos_r2": 0.7506216629067174,
91+ "rmse_log": 0.28383845735523905,
92+ "median_ape": 16.54048635304985,
93+ "mean_ape": 22.48073577753414,
94+ "mean_ape_trim": 21.194748642747328,
95+ "within10": 32.746053258122416,
96+ "within20": 58.15171605435698
97+ }
98+ },
99+ {
100+ "rep": 4,
101+ "n_fsa_held": 229,
102+ "prov_mean": {
103+ "n_test": 27023,
104+ "oos_r2": 0.4719504950440926,
105+ "rmse_log": 0.417680516885898,
106+ "median_ape": 25.86477281892231,
107+ "mean_ape": 35.73299282147236,
108+ "mean_ape_trim": 32.94228030026428,
109+ "within10": 20.234614957628686,
110+ "within20": 39.529289864189764
111+ },
112+ "nn_idw": {
113+ "n_test": 27023,
114+ "oos_r2": 0.7273605404094181,
115+ "rmse_log": 0.3001243647800244,
116+ "median_ape": 17.237029997070664,
117+ "mean_ape": 24.691887548716583,
118+ "mean_ape_trim": 22.95216724341029,
119+ "within10": 31.284461384746326,
120+ "within20": 55.85612256226178
121+ }
122+ }
123+ ],
124+ "fsa_holdout_mean_prov_mean": {
125+ "n_test": 27291.0,
126+ "oos_r2": 0.5197959945293238,
127+ "rmse_log": 0.40186384585462187,
128+ "median_ape": 24.974593917763485,
129+ "mean_ape": 34.74700056512667,
130+ "mean_ape_trim": 32.3257157354322,
131+ "within10": 21.24948664445309,
132+ "within20": 40.91178071475368
133+ },
134+ "fsa_holdout_sd_prov_mean": {
135+ "n_test": 531.8669946518585,
136+ "oos_r2": 0.034378694640343675,
137+ "rmse_log": 0.013008041705526746,
138+ "median_ape": 0.9773290645789051,
139+ "mean_ape": 1.1513138877135416,
140+ "mean_ape_trim": 0.9576942931931354,
141+ "within10": 1.0466390444066898,
142+ "within20": 1.7105572998614222
143+ },
144+ "fsa_holdout_mean_nn_idw": {
145+ "n_test": 27291.0,
146+ "oos_r2": 0.7434745626353367,
147+ "rmse_log": 0.2938140905940456,
148+ "median_ape": 17.268620665843905,
149+ "mean_ape": 24.091716977546458,
150+ "mean_ape_trim": 22.538355651142407,
151+ "within10": 31.17005336815304,
152+ "within20": 56.11779203105218
153+ },
154+ "fsa_holdout_sd_nn_idw": {
155+ "n_test": 531.8669946518585,
156+ "oos_r2": 0.013968988784221693,
157+ "rmse_log": 0.008301978981527422,
158+ "median_ape": 0.5955657564967933,
159+ "mean_ape": 1.0385766362851527,
160+ "mean_ape_trim": 0.8913567304718318,
161+ "within10": 1.197040751241005,
162+ "within20": 1.6270967322860888
163+ },
164+ "random_repeats": [
165+ {
166+ "n_test": 28425,
167+ "oos_r2": 0.7718894921280807,
168+ "rmse_log": 0.2787054506189196,
169+ "median_ape": 15.609115892744654,
170+ "mean_ape": 21.90886557898956,
171+ "mean_ape_trim": 20.515337758195134,
172+ "within10": 34.13896218117854,
173+ "within20": 60.10905892700088
174+ },
175+ {
176+ "n_test": 28425,
177+ "oos_r2": 0.7723778760255584,
178+ "rmse_log": 0.27720757358122217,
179+ "median_ape": 15.59540440935935,
180+ "mean_ape": 21.828612819591143,
181+ "mean_ape_trim": 20.350170313815592,
182+ "within10": 34.05804749340369,
183+ "within20": 60.098504837291124
184+ },
185+ {
186+ "n_test": 28425,
187+ "oos_r2": 0.7511007591224301,
188+ "rmse_log": 0.2887937573161753,
189+ "median_ape": 15.226272314472688,
190+ "mean_ape": 5041.469129768868,
191+ "mean_ape_trim": 20.124270105394736,
192+ "within10": 34.905892700087946,
193+ "within20": 61.122251539138084
194+ },
195+ {
196+ "n_test": 28425,
197+ "oos_r2": 0.773070852946621,
198+ "rmse_log": 0.27789439093894625,
199+ "median_ape": 15.597824886169825,
200+ "mean_ape": 21.84451381354361,
201+ "mean_ape_trim": 20.417219856360283,
202+ "within10": 34.0650835532102,
203+ "within20": 60.08091468777484
204+ },
205+ {
206+ "n_test": 28425,
207+ "oos_r2": 0.775398991879249,
208+ "rmse_log": 0.2753029241593847,
209+ "median_ape": 15.570115506474277,
210+ "mean_ape": 21.870941553372266,
211+ "mean_ape_trim": 20.41647511272861,
212+ "within10": 34.16007036059806,
213+ "within20": 60.32365875109939
214+ }
215+ ],
216+ "random_mean": {
217+ "n_test": 28425.0,
218+ "oos_r2": 0.7687675944203879,
219+ "rmse_log": 0.2795808193229296,
220+ "median_ape": 15.519746601844158,
221+ "mean_ape": 1025.784412706873,
222+ "mean_ape_trim": 20.36469462929887,
223+ "within10": 34.26561125769569,
224+ "within20": 60.34687774846086
225+ },
226+ "random_sd": {
227+ "n_test": 0.0,
228+ "oos_r2": 0.009967333071239318,
229+ "rmse_log": 0.005301443669192108,
230+ "median_ape": 0.16467496499098871,
231+ "mean_ape": 2244.836001094919,
232+ "mean_ape_trim": 0.14675521937951158,
233+ "within10": 0.3607053061461707,
234+ "within20": 0.444614125281872
235+ }
236+}
\ No newline at end of file
added results/reproduced/spline.csv +6 −0
@@ -0,0 +1,6 @@
1+segment,lo_m2,hi_m2,elasticity,se,r2_spline,r2_quadratic,r2_linear
2+1,45.61502929999999,86.86365049999999,0.5706277755544353,0.021296065470088846,0.7767089211414695,0.7764569407005814,0.7756471970293983
3+2,86.86365049999999,113.34080599999999,0.6495179850496777,0.02113976504245838,0.7767089211414695,0.7764569407005814,0.7756471970293983
4+3,113.34080599999999,148.55077770000005,0.584146094046499,0.02204446306274184,0.7767089211414695,0.7764569407005814,0.7756471970293983
5+4,148.55077770000005,209.40178419999998,0.40879164784371097,0.01652240639333227,0.7767089211414695,0.7764569407005814,0.7756471970293983
6+5,209.40178419999998,464.5115000000001,0.4767736084297653,0.013447352613448635,0.7767089211414695,0.7764569407005814,0.7756471970293983
added results/reproduced/summary_stats.csv +10 −0
@@ -0,0 +1,10 @@
1+,mean,sd,p25,median,p75,n
2+price_cad,766861.8670569444,478646.99471334874,449000.0,639900.0,929900.0,142121.0
3+ppm2,5387.879216176007,2689.6211218057156,3580.8227209301244,4784.596290942205,6599.851960430253,142121.0
4+living_m2,152.14619561247036,79.318697015436,94.11002989999999,135.26574879999998,185.8046,142121.0
5+bedrooms,3.1153383384580744,1.3261145840099846,2.0,3.0,4.0,142121.0
6+bathrooms,2.3237452593212824,1.1155237186427498,2.0,2.0,3.0,142121.0
7+half_baths,0.3469226926351489,0.5270075513564978,0.0,0.0,1.0,142121.0
8+parking_n,2.76000731770815,11.49182957520657,0.0,2.0,4.0,142121.0
9+stories_n,1.7976653696498055,6.097586611521823,0.0,1.0,2.0,142121.0
10+lot_m2_f,2530.8240935757135,11820.242600719197,0.0,367.109012588,906.4477410999999,142121.0
added results/tables/gradient.tex +31 −0
@@ -0,0 +1,31 @@
1+\begin{table}[htbp]\centering
2+\caption{The urban price gradient: location premium and distance to the nearest metro}
3+\label{tab:gradient}
4+\begin{threeparttable}
5+\begin{tabular}{lccc}
6+\toprule
7+\multicolumn{4}{l}{\emph{Panel A: mean location premium by distance band}} \\
8+Distance band & Listings & Median km & Premium (\%) \\
9+\midrule
10+\quad 0--5 km & 12,979 & 2 & +20.7 \\
11+\quad 5--10 km & 11,358 & 8 & +11.8 \\
12+\quad 10--20 km & 20,373 & 14 & +1.6 \\
13+\quad 20--40 km & 21,594 & 28 & +11.0 \\
14+\quad 40--80 km & 20,927 & 60 & +6.5 \\
15+\quad 80--160 km & 25,565 & 104 & -1.0 \\
16+\quad 160--320 km & 19,856 & 218 & -13.2 \\
17+\quad $>$320 km & 9,469 & 485 & -38.0 \\
18+\midrule
19+\multicolumn{4}{l}{\emph{Panel B: regressions of the location premium on $\ln(\text{distance})$}} \\
20+ & Slope & SE & $R^2$ \\
21+\midrule
22+\quad Pooled & -0.0821 & (0.0074) & 0.083 \\
23+\quad Nearest-metro intercepts & -0.0793 & (0.0045) & 0.336 \\
24+\quad Quadratic: $\ln d$ & 0.0733 & (0.0275) & \multirow{2}{*}{0.106} \\
25+\quad \phantom{Quadratic:} $(\ln d)^2$ & -0.0229 & (0.0037) & \\
26+\bottomrule
27+\end{tabular}
28+\begin{tablenotes}\footnotesize\item Notes: The location premium is the residual of the model with structural, type and ownership controls but no location effects; the premium in Panel~A is $100\,(e^{\bar{u}}-1)$ for the band mean $\bar{u}$. Distance is the great-circle distance to the nearest of nine metropolitan centres (Toronto, Montreal, Vancouver, Calgary, Ottawa--Gatineau, Edmonton, Winnipeg, Quebec City, Halifax); listings within 0.5~km of a centre are excluded from Panel~B. FSA-clustered standard errors.
29+\end{tablenotes}
30+\end{threeparttable}
31+\end{table}
modified results/tables/lopo.tex +11 −10
@@ -1,16 +1,17 @@
1−\begin{table}[t]\centering\caption{Leave-one-province-out spatial cross-validation} 1+\begin{table}[htbp]\centering\caption{Leave-one-province-out spatial cross-validation}
2 \label{tab:lopo}\begin{threeparttable}\begin{tabular}{lcc} 2 \label{tab:lopo}\begin{threeparttable}\begin{tabular}{lcc}
3 \toprule 3 \toprule
4 Held-out province & $N$ & Within-province $R^2$ \\ 4 Held-out province & $N$ & Within-province $R^2$ \\
5 \midrule 5 \midrule
6−ON & 48,781 & 0.549 \\ 6+MB & 3,062 & 0.521 \\
7−MB & 3,015 & 0.527 \\ 7+AB & 19,463 & 0.519 \\
8−SK & 3,400 & 0.475 \\ 8+NB & 2,980 & 0.515 \\
9−NS & 1,913 & 0.450 \\ 9+ON & 55,897 & 0.483 \\
10−NL & 1,016 & 0.378 \\ 10+SK & 3,458 & 0.474 \\
11−BC & 29,976 & 0.317 \\ 11+NS & 3,044 & 0.464 \\
12−QC & 30,556 & 0.303 \\ 12+NL & 1,274 & 0.404 \\
13−AB & 22,236 & -0.101 \\ 13+QC & 19,949 & 0.185 \\
14+BC & 32,994 & -0.494 \\
14 \midrule 15 \midrule
15−Mean & --- & 0.362 \\ 16+Mean & --- & 0.341 \\
16 \bottomrule\end{tabular}\begin{tablenotes}\footnotesize\item Notes: The structural hedonic model is estimated on all provinces except one and used to predict the held-out province; a province-specific intercept is allowed (the price \emph{level} is not identified out of sample), so the metric captures whether the \emph{structural} implicit prices transfer across space.\end{tablenotes}\end{threeparttable}\end{table} 17 \bottomrule\end{tabular}\begin{tablenotes}\footnotesize\item Notes: The structural hedonic model is estimated on all provinces except one and used to predict the held-out province; a province-specific intercept is allowed (the price \emph{level} is not identified out of sample), so the metric captures whether the \emph{structural} implicit prices transfer across space.\end{tablenotes}\end{threeparttable}\end{table}
added results/tables/moran_sensitivity.tex +19 −0
@@ -0,0 +1,19 @@
1+\begin{table}[htbp]\centering
2+\caption{Moran's $I$ of residuals: sensitivity to the weight matrix and subsample}
3+\label{tab:moran_sensitivity}
4+\begin{threeparttable}
5+\begin{tabular}{lcccc}
6+\toprule
7+ & \multicolumn{2}{c}{Subsample A} & \multicolumn{2}{c}{Subsample B} \\
8+\cmidrule(lr){2-3}\cmidrule(lr){4-5}
9+Neighbours & Structure only & Grand model & Structure only & Grand model \\
10+\midrule
11+$k=5$ & 0.525 \scriptsize($z=107$) & 0.111 \scriptsize($z=21$) & 0.517 \scriptsize($z=108$) & 0.100 \scriptsize($z=20$) \\
12+$k=10$ & 0.496 \scriptsize($z=140$) & 0.063 \scriptsize($z=19$) & 0.491 \scriptsize($z=151$) & 0.058 \scriptsize($z=17$) \\
13+$k=20$ & 0.469 \scriptsize($z=199$) & 0.034 \scriptsize($z=15$) & 0.470 \scriptsize($z=191$) & 0.031 \scriptsize($z=14$) \\
14+\bottomrule
15+\end{tabular}
16+\begin{tablenotes}\footnotesize\item Notes: Moran's $I$ with row-standardised $k$-nearest-neighbour weights (great-circle distance) on two independent random subsamples of 15{,}000 listings. $z$-scores from 199 random permutations; every permutation $p$-value equals its minimum attainable value of $1/200=0.005$. ``Structure only'' is the residual of the model with structural, type and ownership controls but no location effects.
17+\end{tablenotes}
18+\end{threeparttable}
19+\end{table}
modified results/tables/oos.tex +10 −10
@@ -1,4 +1,4 @@
1−\begin{table}[t]\centering 1+\begin{table}[htbp]\centering
2 \caption{Out-of-sample valuation performance (80/20 split)} 2 \caption{Out-of-sample valuation performance (80/20 split)}
3 \label{tab:oos} 3 \label{tab:oos}
4 \begin{threeparttable} 4 \begin{threeparttable}
@@ -6,17 +6,17 @@
6 \toprule 6 \toprule
7 Metric & Value \\ 7 Metric & Value \\
8 \midrule 8 \midrule
9−Training listings & 112,732 \\ 9+Training listings & 113,696 \\
10−Test listings & 28,187 \\ 10+Test listings & 28,425 \\
11−Out-of-sample $R^2$ (log price) & 0.764 \\ 11+Out-of-sample $R^2$ (log price) & 0.772 \\
12−RMSE (log points) & 0.282 \\ 12+RMSE (log points) & 0.279 \\
13−Median absolute \% error & 15.8\% \\ 13+Median absolute \% error & 15.6\% \\
14−Mean absolute \% error & 22.5\% \\ 14+Mean absolute \% error & 21.9\% \\
15−Share priced within $\pm$10\% & 33.8\% \\ 15+Share priced within $\pm$10\% & 34.1\% \\
16−Share priced within $\pm$20\% & 59.5\% \\ 16+Share priced within $\pm$20\% & 60.1\% \\
17 \bottomrule 17 \bottomrule
18 \end{tabular} 18 \end{tabular}
19−\begin{tablenotes}\footnotesize\item Notes: Model trained on a random 80\% of listings and scored on the held-out 20\% (restricted to neighbourhoods observed in training). Prices back-transformed with Duan's smearing estimator. 19+\begin{tablenotes}\footnotesize\item Notes: Model trained on a random 80\% of listings and scored on the held-out 20\% (restricted to neighbourhoods observed in training). Prices back-transformed with Duan's smearing estimator. Table~\ref{tab:spatial_holdout} reports repeated splits and spatial (FSA-level) holdouts.
20 \end{tablenotes} 20 \end{tablenotes}
21 \end{threeparttable} 21 \end{threeparttable}
22 \end{table} 22 \end{table}
modified results/tables/quantile.tex +8 −8
@@ -1,13 +1,13 @@
1−\begin{table}[t]\centering\caption{Quantile hedonic estimates across the price distribution} 1+\begin{table}[htbp]\centering\caption{Quantile hedonic estimates across the price distribution}
2 \label{tab:quantile}\begin{threeparttable}\begin{tabular}{lccc} 2 \label{tab:quantile}\begin{threeparttable}\begin{tabular}{lccc}
3 \toprule 3 \toprule
4 Quantile & $\ln$ area & Full bath & $\ln$ lot \\ 4 Quantile & $\ln$ area & Full bath & $\ln$ lot \\
5 \midrule 5 \midrule
6−$\tau=0.1$ & \makecell{0.557\\\scriptsize(0.008)} & \makecell{0.181\\\scriptsize(0.004)} & \makecell{-0.014\\\scriptsize(0.001)} \\ 6+$\tau=0.1$ & \makecell{0.566\\\scriptsize(0.009)} & \makecell{0.188\\\scriptsize(0.004)} & \makecell{0.006\\\scriptsize(0.002)} \\
7−$\tau=0.25$ & \makecell{0.534\\\scriptsize(0.005)} & \makecell{0.146\\\scriptsize(0.002)} & \makecell{-0.011\\\scriptsize(0.001)} \\ 7+$\tau=0.25$ & \makecell{0.569\\\scriptsize(0.005)} & \makecell{0.160\\\scriptsize(0.002)} & \makecell{0.012\\\scriptsize(0.001)} \\
8−$\tau=0.5$ & \makecell{0.552\\\scriptsize(0.005)} & \makecell{0.114\\\scriptsize(0.002)} & \makecell{-0.002\\\scriptsize(0.001)} \\ 8+$\tau=0.5$ & \makecell{0.570\\\scriptsize(0.005)} & \makecell{0.142\\\scriptsize(0.002)} & \makecell{0.023\\\scriptsize(0.001)} \\
9−$\tau=0.75$ & \makecell{0.601\\\scriptsize(0.006)} & \makecell{0.087\\\scriptsize(0.003)} & \makecell{0.009\\\scriptsize(0.001)} \\ 9+$\tau=0.75$ & \makecell{0.588\\\scriptsize(0.006)} & \makecell{0.122\\\scriptsize(0.002)} & \makecell{0.039\\\scriptsize(0.001)} \\
10−$\tau=0.9$ & \makecell{0.598\\\scriptsize(0.010)} & \makecell{0.071\\\scriptsize(0.004)} & \makecell{0.023\\\scriptsize(0.002)} \\ 10+$\tau=0.9$ & \makecell{0.567\\\scriptsize(0.010)} & \makecell{0.101\\\scriptsize(0.004)} & \makecell{0.053\\\scriptsize(0.002)} \\
11 \midrule 11 \midrule
12−OLS & 0.584 & 0.126 & 0.007 \\ 12+OLS & 0.547 & 0.148 & 0.035 \\
13−\bottomrule\end{tabular}\begin{tablenotes}\footnotesize\item Notes: House subsample, province fixed effects, structural controls. Analytical standard errors in parentheses. The size elasticity rises and the lot elasticity rises with price.\end{tablenotes}\end{threeparttable}\end{table} 13+\bottomrule\end{tabular}\begin{tablenotes}\footnotesize\item Notes: House subsample, province fixed effects (province derived from the FSA), structural controls and ownership dummies. Kernel-based heteroskedasticity-robust standard errors (Epanechnikov kernel, Hall--Sheather bandwidth) in parentheses; the OLS row reports HC1 standard errors.\end{tablenotes}\end{threeparttable}\end{table}
modified results/tables/regression.tex +11 −11
@@ -1,4 +1,4 @@
1−\begin{table}[t]\centering 1+\begin{table}[htbp]\centering
2 \caption{Hedonic regression estimates} 2 \caption{Hedonic regression estimates}
3 \label{tab:regression} 3 \label{tab:regression}
4 \begin{threeparttable} 4 \begin{threeparttable}
@@ -7,24 +7,24 @@
7 & (1) & (2) & (3) & (4) \\ 7 & (1) & (2) & (3) & (4) \\
8 & Structural & +Type/Own. & +Province & Grand+FSA \\ 8 & Structural & +Type/Own. & +Province & Grand+FSA \\
9 \midrule 9 \midrule
10−$\ln$ living area & \makecell{0.657$^{***}$\\\scriptsize(0.022)} & \makecell{0.650$^{***}$\\\scriptsize(0.022)} & \makecell{0.585$^{***}$\\\scriptsize(0.016)} & \makecell{0.547$^{***}$\\\scriptsize(0.009)} \\ 10+$\ln$ living area & \makecell{0.680$^{***}$\\\scriptsize(0.022)} & \makecell{0.677$^{***}$\\\scriptsize(0.022)} & \makecell{0.545$^{***}$\\\scriptsize(0.016)} & \makecell{0.529$^{***}$\\\scriptsize(0.009)} \\
11−Full bathrooms & \makecell{0.136$^{***}$\\\scriptsize(0.010)} & \makecell{0.141$^{***}$\\\scriptsize(0.010)} & \makecell{0.138$^{***}$\\\scriptsize(0.006)} & \makecell{0.109$^{***}$\\\scriptsize(0.004)} \\ 11+Full bathrooms & \makecell{0.130$^{***}$\\\scriptsize(0.008)} & \makecell{0.136$^{***}$\\\scriptsize(0.009)} & \makecell{0.148$^{***}$\\\scriptsize(0.005)} & \makecell{0.112$^{***}$\\\scriptsize(0.004)} \\
12−Half bathrooms & \makecell{-0.035$^{***}$\\\scriptsize(0.009)} & \makecell{-0.039$^{***}$\\\scriptsize(0.009)} & \makecell{-0.026$^{***}$\\\scriptsize(0.009)} & \makecell{-0.036$^{***}$\\\scriptsize(0.009)} \\ 12+Half bathrooms & \makecell{-0.011\\\scriptsize(0.013)} & \makecell{-0.017\\\scriptsize(0.013)} & \makecell{-0.016\\\scriptsize(0.011)} & \makecell{-0.034$^{***}$\\\scriptsize(0.007)} \\
13−Bedrooms & \makecell{0.005\\\scriptsize(0.004)} & \makecell{0.003\\\scriptsize(0.004)} & \makecell{-0.003\\\scriptsize(0.003)} & \makecell{-0.002\\\scriptsize(0.003)} \\ 13+Bedrooms & \makecell{0.001\\\scriptsize(0.004)} & \makecell{-0.001\\\scriptsize(0.004)} & \makecell{-0.001\\\scriptsize(0.003)} & \makecell{-0.006$^{***}$\\\scriptsize(0.002)} \\
14 Parking spaces & \makecell{0.002\\\scriptsize(0.002)} & \makecell{0.002\\\scriptsize(0.002)} & \makecell{0.001\\\scriptsize(0.001)} & \makecell{0.001\\\scriptsize(0.001)} \\ 14 Parking spaces & \makecell{0.002\\\scriptsize(0.002)} & \makecell{0.002\\\scriptsize(0.002)} & \makecell{0.001\\\scriptsize(0.001)} & \makecell{0.001\\\scriptsize(0.001)} \\
15−Storeys & \makecell{0.001\\\scriptsize(0.004)} & \makecell{0.000\\\scriptsize(0.004)} & \makecell{-0.010\\\scriptsize(0.007)} & \makecell{0.001$^{***}$\\\scriptsize(0.000)} \\ 15+Storeys & \makecell{-0.036$^{*}$\\\scriptsize(0.021)} & \makecell{-0.037$^{*}$\\\scriptsize(0.022)} & \makecell{-0.034$^{*}$\\\scriptsize(0.020)} & \makecell{0.001$^{***}$\\\scriptsize(0.000)} \\
16−Has lot info & \makecell{-0.212$^{***}$\\\scriptsize(0.038)} & \makecell{-0.221$^{***}$\\\scriptsize(0.038)} & \makecell{-0.034\\\scriptsize(0.039)} & \makecell{-0.196$^{***}$\\\scriptsize(0.028)} \\ 16+Has lot info & \makecell{0.049\\\scriptsize(0.050)} & \makecell{0.047\\\scriptsize(0.051)} & \makecell{-0.228$^{***}$\\\scriptsize(0.030)} & \makecell{-0.459$^{***}$\\\scriptsize(0.018)} \\
17−$\ln(1+$lot m$^2)$ & \makecell{0.026$^{***}$\\\scriptsize(0.004)} & \makecell{0.027$^{***}$\\\scriptsize(0.004)} & \makecell{0.008$^{*}$\\\scriptsize(0.005)} & \makecell{0.030$^{***}$\\\scriptsize(0.004)} \\ 17+$\ln(1+$lot m$^2)$ & \makecell{0.015$^{**}$\\\scriptsize(0.007)} & \makecell{0.014$^{**}$\\\scriptsize(0.007)} & \makecell{0.034$^{***}$\\\scriptsize(0.004)} & \makecell{0.067$^{***}$\\\scriptsize(0.003)} \\
18 \midrule 18 \midrule
19 Dwelling-type FE & No & Yes & Yes & Yes \\ 19 Dwelling-type FE & No & Yes & Yes & Yes \\
20 Ownership FE & No & Yes & Yes & Yes \\ 20 Ownership FE & No & Yes & Yes & Yes \\
21 Province FE & No & No & Yes & --- \\ 21 Province FE & No & No & Yes & --- \\
22 FSA fixed effects & No & No & No & Yes \\ 22 FSA fixed effects & No & No & No & Yes \\
23−$R^2$ & 0.464 & 0.469 & 0.567 & 0.767 \\ 23+$R^2$ & 0.467 & 0.470 & 0.605 & 0.776 \\
24−Observations & 82,334 & 82,334 & 82,334 & 140,931 \\ 24+Observations & 83,524 & 83,524 & 83,524 & 142,121 \\
25 \bottomrule 25 \bottomrule
26 \end{tabular} 26 \end{tabular}
27−\begin{tablenotes}\footnotesize\item Notes: Dependent variable is $\ln(\text{price})$. Columns (1)--(3) use the house subsample; column (4) is the grand model over all residential dwellings with 1{,}153 absorbed FSA fixed effects. Cluster-robust standard errors (by FSA) in parentheses. $^{*}p<0.1$, $^{**}p<0.05$, $^{***}p<0.01$. 27+\begin{tablenotes}\footnotesize\item Notes: Dependent variable is $\ln(\text{list price})$. Columns (1)--(3) use the house subsample; column (4) is the grand model over all residential dwellings with 1,155 absorbed FSA fixed effects (incl. nine province-level residual categories pooling FSAs with fewer than 25 listings). Columns (2)--(4) also include dwelling-type, ownership and listing-category dummies (Table~\ref{tab:type_effects}). Cluster-robust standard errors (by FSA) in parentheses. $^{*}p<0.1$, $^{**}p<0.05$, $^{***}p<0.01$.
28 \end{tablenotes} 28 \end{tablenotes}
29 \end{threeparttable} 29 \end{threeparttable}
30 \end{table} 30 \end{table}
modified results/tables/robustness.tex +10 −8
@@ -1,4 +1,4 @@
1−\begin{table}[t]\centering 1+\begin{table}[htbp]\centering
2 \caption{Robustness of key implicit prices across samples} 2 \caption{Robustness of key implicit prices across samples}
3 \label{tab:robustness} 3 \label{tab:robustness}
4 \begin{threeparttable} 4 \begin{threeparttable}
@@ -6,15 +6,17 @@
6 \toprule 6 \toprule
7 Sample / specification & $N$ & $R^2$ & $\ln$ area & Full bath & $\ln$ lot \\ 7 Sample / specification & $N$ & $R^2$ & $\ln$ area & Full bath & $\ln$ lot \\
8 \midrule 8 \midrule
9−Baseline (all residential) & 140,931 & 0.767 & \makecell{0.547\\\scriptsize(0.009)} & \makecell{0.109\\\scriptsize(0.004)} & \makecell{0.030\\\scriptsize(0.004)} \\ 9+Baseline (all residential) & 142,121 & 0.776 & \makecell{0.529\\\scriptsize(0.009)} & \makecell{0.112\\\scriptsize(0.004)} & \makecell{0.067\\\scriptsize(0.003)} \\
10−Houses only & 82,334 & 0.762 & \makecell{0.513\\\scriptsize(0.010)} & \makecell{0.103\\\scriptsize(0.004)} & \makecell{0.055\\\scriptsize(0.003)} \\ 10+Houses only & 83,524 & 0.769 & \makecell{0.487\\\scriptsize(0.010)} & \makecell{0.107\\\scriptsize(0.004)} & \makecell{0.084\\\scriptsize(0.003)} \\
11−Condominiums only & 57,857 & 0.813 & \makecell{0.619\\\scriptsize(0.017)} & \makecell{0.121\\\scriptsize(0.005)} & \makecell{0.005\\\scriptsize(0.003)} \\ 11+Condominiums only & 57,853 & 0.812 & \makecell{0.620\\\scriptsize(0.017)} & \makecell{0.121\\\scriptsize(0.005)} & \makecell{0.005\\\scriptsize(0.004)} \\
12−Price trimmed 0.5/99.5\% & 139,552 & 0.765 & \makecell{0.536\\\scriptsize(0.009)} & \makecell{0.107\\\scriptsize(0.003)} & \makecell{0.028\\\scriptsize(0.003)} \\ 12+Price trimmed 0.5/99.5\% & 140,714 & 0.773 & \makecell{0.519\\\scriptsize(0.009)} & \makecell{0.110\\\scriptsize(0.004)} & \makecell{0.064\\\scriptsize(0.002)} \\
13−FSAs with $\geq$50 listings & 130,590 & 0.760 & \makecell{0.542\\\scriptsize(0.010)} & \makecell{0.109\\\scriptsize(0.004)} & \makecell{0.030\\\scriptsize(0.004)} \\ 13+FSAs with $\geq$50 listings & 131,780 & 0.769 & \makecell{0.525\\\scriptsize(0.010)} & \makecell{0.113\\\scriptsize(0.004)} & \makecell{0.066\\\scriptsize(0.003)} \\
14−ON/QC/BC only & 109,313 & 0.762 & \makecell{0.532\\\scriptsize(0.010)} & \makecell{0.096\\\scriptsize(0.004)} & \makecell{0.030\\\scriptsize(0.003)} \\ 14+ON/QC/BC only & 108,840 & 0.753 & \makecell{0.521\\\scriptsize(0.011)} & \makecell{0.096\\\scriptsize(0.004)} & \makecell{0.063\\\scriptsize(0.003)} \\
15+Storeys/parking capped at P99 & 142,121 & 0.779 & \makecell{0.513\\\scriptsize(0.010)} & \makecell{0.110\\\scriptsize(0.004)} & \makecell{0.059\\\scriptsize(0.003)} \\
16+Excl. pooled residual FSAs & 136,736 & 0.785 & \makecell{0.522\\\scriptsize(0.009)} & \makecell{0.110\\\scriptsize(0.004)} & \makecell{0.069\\\scriptsize(0.002)} \\
15 \bottomrule 17 \bottomrule
16 \end{tabular} 18 \end{tabular}
17−\begin{tablenotes}\footnotesize\item Notes: Each row re-estimates the grand FSA-fixed-effects model on a different sample. Cluster-robust (FSA) standard errors in parentheses. The size elasticity and bathroom premium are stable across all cuts. 19+\begin{tablenotes}\footnotesize\item Notes: Each row re-estimates the grand FSA-fixed-effects model on a different sample. Cluster-robust (FSA) standard errors in parentheses. The last two rows cap storeys and parking counts at their 99th percentiles and drop the province-level categories that pool FSAs with fewer than 25 listings.
18 \end{tablenotes} 20 \end{tablenotes}
19 \end{threeparttable} 21 \end{threeparttable}
20 \end{table} 22 \end{table}
added results/tables/se_comparison.tex +21 −0
@@ -0,0 +1,21 @@
1+\begin{table}[htbp]\centering
2+\caption{Grand-model coefficients under alternative variance estimators}
3+\label{tab:se_comparison}
4+\begin{threeparttable}\small
5+\begin{tabular}{lcccccc}
6+\toprule
7+ & & \multicolumn{4}{c}{Standard error} & Wild-cluster \\
8+\cmidrule(lr){3-6}
9+ & Coef. & HC1 & \makecell{FSA\\($G=1,155$)} & \makecell{Province\\($G=9$)} & Two-way & $p$-value \\
10+\midrule
11+$\ln$ living area & 0.529 & 0.0037 & 0.0094 & 0.0373 & 0.0375 & 0.004 \\
12+Full bathrooms & 0.112 & 0.0016 & 0.0038 & 0.0120 & 0.0121 & 0.004 \\
13+Half bathrooms & -0.034 & 0.0021 & 0.0066 & 0.0315 & 0.0316 & 0.523 \\
14+Bedrooms & -0.006 & 0.0011 & 0.0021 & 0.0084 & 0.0085 & 0.582 \\
15+$\ln(1+$lot m$^2)$ & 0.067 & 0.0011 & 0.0025 & 0.0060 & 0.0061 & 0.004 \\
16+\bottomrule
17+\end{tabular}
18+\begin{tablenotes}\footnotesize\item Notes: Grand model (M5) estimated on the FSA-demeaned data. HC1 is the heteroskedasticity-robust estimator; FSA and province cluster by neighbourhood and by province; two-way clusters by both. The last column is the $p$-value of a restricted wild-cluster bootstrap-$t$ test at the province level with Rademacher weights and full enumeration of the $2^{9}=512$ sign vectors \citep{cameron2015practitioner,mackinnon2017wild}; its smallest attainable value is $2/512=0.004$.
19+\end{tablenotes}
20+\end{threeparttable}
21+\end{table}
added results/tables/shapley.tex +27 −0
@@ -0,0 +1,27 @@
1+\begin{table}[htbp]\centering
2+\caption{Decomposition of the explained variance of log list prices (percentage points of $R^2$)}
3+\label{tab:shapley}
4+\begin{threeparttable}
5+\begin{tabular}{lccc}
6+\toprule
7+Block & Sequential & Shapley & Owen (grouped) \\
8+\midrule
9+\multicolumn{4}{l}{\emph{All residential} ($N=142,121$, $R^2=0.776$)} \\
10+\quad Structure & 43.6 & 33.0 & 34.0 \\
11+\quad Dwelling type and ownership & 1.6 & 7.5 & 7.3 \\
12+\quad Province & 14.3 & 8.9 & --- \\
13+\quad Neighbourhood (FSA) & 18.1 & 28.2 & 36.3\tnote{a} \\
14+\addlinespace
15+\multicolumn{4}{l}{\emph{Houses} ($N=83,524$, $R^2=0.769$)} \\
16+\quad Structure & 46.7 & 31.8 & 33.8 \\
17+\quad Dwelling type and ownership & 0.3 & 0.9 & 1.0 \\
18+\quad Province & 13.5 & 10.8 & --- \\
19+\quad Neighbourhood (FSA) & 16.5 & 33.5 & 42.2\tnote{a} \\
20+\addlinespace\bottomrule
21+\end{tabular}
22+\begin{tablenotes}\footnotesize
23+\item Notes: \emph{Sequential} is the increment in $R^2$ when the block is added in the order structure $\to$ type/ownership $\to$ province $\to$ FSA. \emph{Shapley} averages the increment over all $4!$ orderings of the four blocks \citep{israeli2007shapley,gromping2007estimators}. \emph{Owen} treats province and FSA as a single location group and averages over the $3!$ orderings of the three groups \citep{huettner2012axiomatic}. Province dummies are nested in the FSA effects, so the province block adds nothing once FSA effects are present.
24+\item[a] Location group (province $+$ FSA).
25+\end{tablenotes}
26+\end{threeparttable}
27+\end{table}
added results/tables/spatial_holdout.tex +22 −0
@@ -0,0 +1,22 @@
1+\begin{table}[htbp]\centering
2+\caption{Random versus spatial holdouts: valuation accuracy}
3+\label{tab:spatial_holdout}
4+\begin{threeparttable}\small
5+\begin{tabular}{lccc}
6+\toprule
7+ & Random 80/20 & \multicolumn{2}{c}{Held-out FSAs (20\%)} \\
8+\cmidrule(lr){3-4}
9+Metric & \makecell{(within\\support)} & \makecell{Province-mean\\effect} & \makecell{IDW of 5\\nearest FSAs} \\
10+\midrule
11+Out-of-sample $R^2$ (log price) & 0.769 \scriptsize(0.010) & 0.520 \scriptsize(0.034) & 0.743 \scriptsize(0.014) \\
12+RMSE (log points) & 0.280 \scriptsize(0.005) & 0.402 \scriptsize(0.013) & 0.294 \scriptsize(0.008) \\
13+Median absolute \% error & 15.5 \scriptsize(0.2) & 25.0 \scriptsize(1.0) & 17.3 \scriptsize(0.6) \\
14+Mean absolute \% error (top 1\% trimmed) & 20.4 \scriptsize(0.1) & 32.3 \scriptsize(1.0) & 22.5 \scriptsize(0.9) \\
15+Share within $\pm$10\% & 34.3 \scriptsize(0.4) & 21.2 \scriptsize(1.0) & 31.2 \scriptsize(1.2) \\
16+Share within $\pm$20\% & 60.3 \scriptsize(0.4) & 40.9 \scriptsize(1.7) & 56.1 \scriptsize(1.6) \\
17+\bottomrule
18+\end{tabular}
19+\begin{tablenotes}\footnotesize\item Notes: Means over five replications, standard deviations across replications in parentheses. Column~1: random 80/20 splits of listings, evaluation restricted to FSAs observed in training. Columns~2--3: 20\% of the FSAs (229 of the non-pooled neighbourhoods) are held out entirely; their listings are valued with the structural coefficients from the training FSAs and a neighbourhood effect imputed either as the mean effect of the training FSAs in the same province or as the inverse-distance-weighted mean of the five nearest training FSAs (centroid distance). Prices back-transformed with Duan's smearing estimator. The trimmed mean excludes the largest 1\% of errors in each replication: a few listings with implausible parking or storey counts (up to 3{,}620 spaces) otherwise dominate the untrimmed mean.
20+\end{tablenotes}
21+\end{threeparttable}
22+\end{table}
added results/tables/spline.tex +21 −0
@@ -0,0 +1,21 @@
1+\begin{table}[htbp]\centering
2+\caption{Living-area elasticity by size segment (piecewise-linear spline, grand model)}
3+\label{tab:spline}
4+\begin{threeparttable}
5+\begin{tabular}{lcc}
6+\toprule
7+Segment & Living area (m$^2$) & Elasticity \\
8+\midrule
9+1 & 46--87 & \makecell{0.571\\\scriptsize(0.021)} \\
10+2 & 87--113 & \makecell{0.650\\\scriptsize(0.021)} \\
11+3 & 113--149 & \makecell{0.584\\\scriptsize(0.022)} \\
12+4 & 149--209 & \makecell{0.409\\\scriptsize(0.017)} \\
13+5 & 209--465 & \makecell{0.477\\\scriptsize(0.013)} \\
14+\midrule
15+$R^2$: linear / quadratic / spline & \multicolumn{2}{c}{0.7756 / 0.7765 / 0.7767} \\
16+\bottomrule
17+\end{tabular}
18+\begin{tablenotes}\footnotesize\item Notes: Linear spline in $\ln(\text{area})$ with knots at the quintiles of living area, all other grand-model controls and FSA fixed effects included. Each entry is the elasticity of price with respect to area within the segment; FSA-clustered standard errors in parentheses.
19+\end{tablenotes}
20+\end{threeparttable}
21+\end{table}
modified results/tables/summary_stats.tex +11 −11
@@ -1,4 +1,4 @@
1−\begin{table}[t]\centering 1+\begin{table}[htbp]\centering
2 \caption{Descriptive statistics} 2 \caption{Descriptive statistics}
3 \label{tab:summary_stats} 3 \label{tab:summary_stats}
4 \begin{threeparttable} 4 \begin{threeparttable}
@@ -6,18 +6,18 @@
6 \toprule 6 \toprule
7 Variable & Mean & SD & P25 & Median & P75 \\ 7 Variable & Mean & SD & P25 & Median & P75 \\
8 \midrule 8 \midrule
9−List price (CAD) & 763,592 & 475,478 & 449,000 & 639,888 & 928,000 \\ 9+List price (CAD) & 766,862 & 478,647 & 449,000 & 639,900 & 929,900 \\
10−Price per m$^2$ (CAD) & 5,382 & 2,682 & 3,580 & 4,781 & 6,593 \\ 10+Price per m$^2$ (CAD) & 5,388 & 2,690 & 3,581 & 4,785 & 6,600 \\
11−Living area (m$^2$) & 151.7 & 79.1 & 93.8 & 134.6 & 185.8 \\ 11+Living area (m$^2$) & 152.1 & 79.3 & 94.1 & 135.3 & 185.8 \\
12−Bedrooms & 3.11 & 1.32 & 2.00 & 3.00 & 4.00 \\ 12+Bedrooms & 3.12 & 1.33 & 2.00 & 3.00 & 4.00 \\
13−Full bathrooms & 2.32 & 1.11 & 2.00 & 2.00 & 3.00 \\ 13+Full bathrooms & 2.32 & 1.12 & 2.00 & 2.00 & 3.00 \\
14−Half bathrooms & 0.35 & 0.52 & 0.00 & 0.00 & 1.00 \\ 14+Half bathrooms & 0.35 & 0.53 & 0.00 & 0.00 & 1.00 \\
15−Parking spaces & 2.72 & 11.20 & 0.00 & 2.00 & 4.00 \\ 15+Parking spaces & 2.76 & 11.49 & 0.00 & 2.00 & 4.00 \\
16−Storeys & 2.44 & 6.01 & 1.50 & 2.00 & 2.00 \\ 16+Storeys & 1.80 & 6.10 & 0.00 & 1.00 & 2.00 \\
17−Lot area (m$^2$) & 2,621 & 10,818 & 0 & 0 & 656 \\ 17+Lot area (m$^2$) & 2,531 & 11,820 & 0 & 367 & 906 \\
18 \bottomrule 18 \bottomrule
19 \end{tabular} 19 \end{tabular}
20−\begin{tablenotes}\footnotesize\item Notes: Estimation sample of 140,931 residential dwellings (houses, condominiums, plexes, townhouses and apartments) from the Canadian MLS, after parsing and trimming the extreme 1\% tails of price and living area. 20+\begin{tablenotes}\footnotesize\item Notes: Estimation sample of 142,121 residential dwellings (houses, condominiums, plexes, townhouses and apartments) from the Canadian MLS, after parsing and trimming the extreme 1\% tails of price and living area.
21 \end{tablenotes} 21 \end{tablenotes}
22 \end{threeparttable} 22 \end{threeparttable}
23 \end{table} 23 \end{table}
added results/tables/type_effects.tex +29 −0
@@ -0,0 +1,29 @@
1+\begin{table}[htbp]\centering
2+\caption{Dwelling-type and ownership effects in the grand model}
3+\label{tab:type_effects}
4+\begin{threeparttable}
5+\begin{tabular}{lccc}
6+\toprule
7+ & Coefficient & SE & \% effect \\
8+\midrule
9+\multicolumn{4}{l}{\emph{Dwelling type (ref.: apartment)}} \\
10+\quad House & 0.377$^{***}$ & (0.041) & +45.7 \\
11+\quad Row / townhouse & 0.002 & (0.008) & +0.1 \\
12+\quad Duplex & 0.146$^{***}$ & (0.016) & +15.8 \\
13+\quad Triplex & 0.359$^{***}$ & (0.056) & +43.0 \\
14+\quad Fourplex & 0.328$^{***}$ & (0.048) & +38.7 \\
15+\quad Manufactured home & -0.040 & (0.050) & -4.0 \\
16+\quad Other & 0.100$^{**}$ & (0.040) & +10.4 \\
17+\addlinespace
18+\multicolumn{4}{l}{\emph{Ownership (ref.: co-op / co-ownership)}} \\
19+\quad Freehold & 0.102$^{***}$ & (0.032) & +10.7 \\
20+\quad Condominium / strata & 0.097$^{***}$ & (0.031) & +10.2 \\
21+\quad Leasehold & -0.129$^{***}$ & (0.049) & -12.2 \\
22+\quad Not reported & 0.101 & (0.062) & +10.4 \\
23+\quad Other & -0.142$^{**}$ & (0.055) & -13.3 \\
24+\addlinespace\bottomrule
25+\end{tabular}
26+\begin{tablenotes}\footnotesize\item Notes: Grand model (M5), all residential dwellings, FSA fixed effects absorbed, FSA-clustered standard errors. The percentage effect is the \citet{kennedy1981estimation} estimator $100\,[\exp(\hat\gamma-\tfrac{1}{2}\widehat{V}(\hat\gamma))-1]$, which corrects the \citet{halvorsen1980interpretation} transformation for estimation error. Effects are relative to the omitted category and conditional on living area, the other structural attributes and the neighbourhood. $^{*}p<0.1$, $^{**}p<0.05$, $^{***}p<0.01$.
27+\end{tablenotes}
28+\end{threeparttable}
29+\end{table}
modified scripts/02_estimate_core.py +2 −0
@@ -32,6 +32,8 @@ def main() -> None:
32 for name, (res, cols, data) in ladder.items(): 32 for name, (res, cols, data) in ladder.items():
33 r2 = float(res.rsquared) 33 r2 = float(res.rsquared)
34 fit[name] = {"r2": r2, "n": int(res.nobs)} 34 fit[name] = {"r2": r2, "n": int(res.nobs)}
35+ if name in ("M4", "M5"):
36+ fit[name]["n_fe"] = int(data["fsa_c"].nunique())
35 print(f"{name}: N={int(res.nobs):,} R2={r2:.4f}") 37 print(f"{name}: N={int(res.nobs):,} R2={r2:.4f}")
36 if name != "M4": 38 if name != "M4":
37 models.coef_table(res, cols).to_csv(REPRODUCED / f"coef_{name}.csv") 39 models.coef_table(res, cols).to_csv(REPRODUCED / f"coef_{name}.csv")
modified scripts/03_estimate_extended.py +13 −1
@@ -86,6 +86,15 @@ def robustness(s: pd.DataFrame) -> pd.DataFrame:
86 rows.append(key_coefs(s[s["fsa_c"].isin(counts[counts >= 50].index)], 86 rows.append(key_coefs(s[s["fsa_c"].isin(counts[counts >= 50].index)],
87 "FSAs with $\\geq$50 listings")) 87 "FSAs with $\\geq$50 listings"))
88 rows.append(key_coefs(s[s["prov"].isin(["ON", "QC", "BC"])], "ON/QC/BC only")) 88 rows.append(key_coefs(s[s["prov"].isin(["ON", "QC", "BC"])], "ON/QC/BC only"))
89+ # Revision 2026-10: two further cuts. (i) Storeys and parking counts are
90+ # noisy (max 593 storeys, 3,620 parking spaces); cap both at their 99th
91+ # percentile. (ii) Drop the province-level residual categories that pool
92+ # FSAs with fewer than 25 listings, so every absorbed effect is a true FSA.
93+ capped = s.copy()
94+ for col in ("stories_n", "parking_n"):
95+ capped[col] = capped[col].clip(upper=capped[col].quantile(0.99))
96+ rows.append(key_coefs(capped, "Storeys/parking capped at P99"))
97+ rows.append(key_coefs(s[~s["fsa_c"].str.endswith("_other")], "Excl. pooled residual FSAs"))
89 return pd.DataFrame(rows) 98 return pd.DataFrame(rows)
90 99
91 100
@@ -113,7 +122,10 @@ def quantile_regressions(s: pd.DataFrame) -> pd.DataFrame:
113 y = houses["ln_price"] 122 y = houses["ln_price"]
114 rows = [] 123 rows = []
115 for tau in (0.1, 0.25, 0.5, 0.75, 0.9): 124 for tau in (0.1, 0.25, 0.5, 0.75, 0.9):
116− fit = QuantReg(y, X).fit(q=tau, max_iter=2000) 125+ # statsmodels default: Koenker--Bassett kernel (Epanechnikov) sandwich
126+ # variance with Hall--Sheather bandwidth, robust to heteroskedasticity.
127+ fit = QuantReg(y, X).fit(q=tau, vcov="robust", kernel="epa", bandwidth="hsheather",
128+ max_iter=2000)
117 rows.append({"tau": tau, 129 rows.append({"tau": tau,
118 "ln_living": fit.params["ln_living"], "se_living": fit.bse["ln_living"], 130 "ln_living": fit.params["ln_living"], "se_living": fit.bse["ln_living"],
119 "bathrooms": fit.params["bathrooms"], "se_bath": fit.bse["bathrooms"], 131 "bathrooms": fit.params["bathrooms"], "se_bath": fit.bse["bathrooms"],
modified scripts/04_make_figures.py +49 −26
@@ -2,6 +2,8 @@
2 # Author: Simon-Pierre Boucher — contact@spboucher.ai 2 # Author: Simon-Pierre Boucher — contact@spboucher.ai
3 """Step 04 — Generate every figure used in the paper (17 PNG files). 3 """Step 04 — Generate every figure used in the paper (17 PNG files).
4 4
5+Since the October 2026 revision the default tier is ``reproduced``.
6+
5 Number-bearing summary figures (R^2 ladder, variance decomposition, OOS 7 Number-bearing summary figures (R^2 ladder, variance decomposition, OOS
6 accuracy, FSA premia, heterogeneity, quantile) are drawn from the results 8 accuracy, FSA premia, heterogeneity, quantile) are drawn from the results
7 tier selected with ``--results`` so the paper's published numbers are used by 9 tier selected with ``--results`` so the paper's published numbers are used by
@@ -190,7 +192,7 @@ def fig_gradient(res_dir):
190 ax.set_xscale("symlog") 192 ax.set_xscale("symlog")
191 ax.set_xlabel("Distance to nearest major metro (km, symlog)") 193 ax.set_xlabel("Distance to nearest major metro (km, symlog)")
192 ax.set_ylabel("Location premium vs structure-only (%)") 194 ax.set_ylabel("Location premium vs structure-only (%)")
193− ax.set_title("The urban price gradient: value falls with distance to metro") 195+ ax.set_title("Urban price gradient: mean location premium by distance to the nearest metro")
194 save(fig, "fig_gradient.png") 196 save(fig, "fig_gradient.png")
195 197
196 198
@@ -199,16 +201,24 @@ def fig_nonlinear(res_dir):
199 baseline = pd.read_csv(res_dir / "robustness.csv").iloc[0]["ln_living"] 201 baseline = pd.read_csv(res_dir / "robustness.csv").iloc[0]["ln_living"]
200 fig, ax = plt.subplots(figsize=(7, 4.2)) 202 fig, ax = plt.subplots(figsize=(7, 4.2))
201 area = np.exp(band["ln_area"]) 203 area = np.exp(band["ln_area"])
202− ax.plot(area, band["elasticity"], color=ACCENT, lw=2) 204+ ax.plot(area, band["elasticity"], color=ACCENT, lw=2, label="quadratic in ln(area)")
203 ax.fill_between(area, band["elasticity"] - 1.96 * band["se"], 205 ax.fill_between(area, band["elasticity"] - 1.96 * band["se"],
204 band["elasticity"] + 1.96 * band["se"], color=ACCENT, alpha=0.18) 206 band["elasticity"] + 1.96 * band["se"], color=ACCENT, alpha=0.18)
207+ spline_file = res_dir / "spline.csv"
208+ if spline_file.exists():
209+ sp = pd.read_csv(spline_file)
210+ for j, r in sp.iterrows():
211+ ax.hlines(r["elasticity"], r["lo_m2"], r["hi_m2"], color=ACCENT3, lw=2.2,
212+ label="linear spline (quintile knots)" if j == 0 else None)
213+ ax.fill_between([r["lo_m2"], r["hi_m2"]], r["elasticity"] - 1.96 * r["se"],
214+ r["elasticity"] + 1.96 * r["se"], color=ACCENT3, alpha=0.15, lw=0)
205 ax.axhline(baseline, color=ACCENT2, ls="--", lw=1, 215 ax.axhline(baseline, color=ACCENT2, ls="--", lw=1,
206− label=f"linear-model elasticity ({baseline:.2f})") 216+ label=f"constant elasticity ({baseline:.2f})")
207 ax.set_xscale("log") 217 ax.set_xscale("log")
208− ax.set_xlabel("Living area (m$^2$)") 218+ ax.set_xlabel("Living area (m$^2$, log scale)")
209 ax.set_ylabel("Marginal elasticity of price w.r.t. area") 219 ax.set_ylabel("Marginal elasticity of price w.r.t. area")
210− ax.set_title("Diminishing returns to floor space (quadratic spec., grand model)") 220+ ax.set_title("Floor-space elasticity across the size distribution (grand model)")
211− ax.legend() 221+ ax.legend(fontsize=8)
212 save(fig, "fig_nonlinear.png") 222 save(fig, "fig_nonlinear.png")
213 223
214 224
@@ -231,27 +241,40 @@ def fig_r2(res_dir):
231 241
232 242
233 def fig_decomp(res_dir): 243 def fig_decomp(res_dir):
244+ """Sequential vs. Shapley/Owen decomposition of R^2 (all residential)."""
234 fit = json.load(open(res_dir / "fit.json")) 245 fit = json.load(open(res_dir / "fit.json"))
235− blocks = [("Structure", fit["M1"]["r2"]), 246+ shap_file = res_dir / "shapley.csv"
236− ("Dwelling type & ownership", fit["M2"]["r2"] - fit["M1"]["r2"]), 247+ labels = ["Structure", "Dwelling type\n& ownership", "Province", "Neighbourhood\n(FSA)", "Unexplained"]
237− ("Province", fit["M3"]["r2"] - fit["M2"]["r2"]),
238− ("Neighbourhood (FSA)", fit["M5"]["r2"] - fit["M3"]["r2"]),
239− ("Unexplained", 1 - fit["M5"]["r2"])]
240 colours = [ACCENT, ACCENT3, GREEN, ACCENT2, NEUTRAL] 248 colours = [ACCENT, ACCENT3, GREEN, ACCENT2, NEUTRAL]
241− fig, ax = plt.subplots(figsize=(8, 2.4)) 249+ if shap_file.exists():
242− left = 0.0 250+ sh = pd.read_csv(shap_file)
243− for (label, share), colour in zip(blocks, colours): 251+ sh = sh[sh["sample"] == "All residential"].set_index("block")
244− ax.barh(0, share, left=left, color=colour, edgecolor="white") 252+ order = ["Structure", "Dwelling type and ownership", "Province", "Neighbourhood (FSA)"]
245− if share > 0.03: 253+ total = float(sh["total_r2"].iloc[0])
246− ax.text(left + share / 2, 0, f"{label}\n{share * 100:.1f}%", 254+ rows = [("Sequential\n(ladder order)", [sh.loc[b, "sequential"] for b in order] + [1 - total]),
247− ha="center", va="center", fontsize=8, 255+ ("Shapley\n(all orderings)", [sh.loc[b, "shapley"] for b in order] + [1 - total])]
248− color="black" if colour == NEUTRAL else "white") 256+ else:
249− left += share 257+ rows = [("Sequential", [fit["M1"]["r2"], fit["M2"]["r2"] - fit["M1"]["r2"],
258+ fit["M3"]["r2"] - fit["M2"]["r2"], fit["M5"]["r2"] - fit["M3"]["r2"],
259+ 1 - fit["M5"]["r2"]])]
260+ fig, ax = plt.subplots(figsize=(8.5, 1.4 + 1.1 * len(rows)))
261+ for i, (name, shares) in enumerate(rows):
262+ left = 0.0
263+ for share, colour, lab in zip(shares, colours, labels):
264+ ax.barh(i, share, left=left, color=colour, edgecolor="white", height=0.6)
265+ if share > 0.04:
266+ ax.text(left + share / 2, i, f"{share * 100:.1f}%", ha="center", va="center",
267+ fontsize=8, color="black" if colour == NEUTRAL else "white")
268+ left += share
269+ ax.set_yticks(range(len(rows)))
270+ ax.set_yticklabels([r[0] for r in rows], fontsize=9)
271+ ax.invert_yaxis()
250 ax.set_xlim(0, 1) 272 ax.set_xlim(0, 1)
251− ax.set_ylim(-0.5, 0.5) 273+ ax.set_xlabel("Share of log list-price variance")
252− ax.set_yticks([]) 274+ handles = [plt.Rectangle((0, 0), 1, 1, color=c) for c in colours]
253− ax.set_xlabel("Share of log-price variance") 275+ ax.legend(handles, [l.replace("\n", " ") for l in labels], ncol=5, fontsize=7.5,
254− ax.set_title("Variance decomposition of Canadian house prices") 276+ loc="upper center", bbox_to_anchor=(0.5, -0.35), frameon=False)
277+ ax.set_title("Variance decomposition of Canadian log list prices (all residential)")
255 save(fig, "fig_decomp.png") 278 save(fig, "fig_decomp.png")
256 279
257 280
@@ -350,8 +373,8 @@ def fig_oos(res_dir):
350 def main() -> None: 373 def main() -> None:
351 parser = argparse.ArgumentParser() 374 parser = argparse.ArgumentParser()
352 parser.add_argument("--results", choices=["reference", "reproduced"], 375 parser.add_argument("--results", choices=["reference", "reproduced"],
353− default="reference", 376+ default="reproduced",
354− help="results tier for number-bearing figures (default: reference)") 377+ help="results tier for number-bearing figures (default: reproduced)")
355 args = parser.parse_args() 378 args = parser.parse_args()
356 res_dir = REFERENCE if args.results == "reference" else REPRODUCED 379 res_dir = REFERENCE if args.results == "reference" else REPRODUCED
357 ensure_dirs() 380 ensure_dirs()
modified scripts/05_make_tables.py +270 −23
@@ -1,19 +1,20 @@
1 #!/usr/bin/env python3 1 #!/usr/bin/env python3
2 # Author: Simon-Pierre Boucher — contact@spboucher.ai 2 # Author: Simon-Pierre Boucher — contact@spboucher.ai
3−"""Step 05 — Generate every LaTeX table used in the paper (6 files). 3+"""Step 05 — Generate every LaTeX table used in the paper (13 files).
4 4
5−Tables are built from the results tier selected with ``--results``; the 5+Tables are built from the results tier selected with ``--results``. Since the
6−default ``reference`` tier reproduces the published numbers exactly. 6+October 2026 revision the default is ``reproduced`` (the fully reproducible
7−The summary-statistics table additionally needs the micro sample when the 7+pipeline with FSA-derived provinces); ``reference`` re-creates the six tables
8−``reproduced`` tier is selected. 8+of the May 2026 version from the archived original outputs.
9 9
10−Usage: python scripts/05_make_tables.py [--results reference|reproduced] 10+Usage: python scripts/05_make_tables.py [--results reproduced|reference]
11 """ 11 """
12 import argparse 12 import argparse
13 import json 13 import json
14 import sys 14 import sys
15 from pathlib import Path 15 from pathlib import Path
16 16
17+import numpy as np
17 import pandas as pd 18 import pandas as pd
18 19
19 sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src")) 20 sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))
@@ -76,7 +77,7 @@ def table_summary_stats(res_dir: Path) -> None:
76 f"{fmt.format(r['p25'])} & {fmt.format(r['median'])} & " 77 f"{fmt.format(r['p25'])} & {fmt.format(r['median'])} & "
77 f"{fmt.format(r['p75'])} \\\\") 78 f"{fmt.format(r['p75'])} \\\\")
78 write("summary_stats.tex", 79 write("summary_stats.tex",
79− "\\begin{table}[t]\\centering\n\\caption{Descriptive statistics}\n" 80+ "\\begin{table}[htbp]\\centering\n\\caption{Descriptive statistics}\n"
80 "\\label{tab:summary_stats}\n\\begin{threeparttable}\n" 81 "\\label{tab:summary_stats}\n\\begin{threeparttable}\n"
81 "\\begin{tabular}{lccccc}\n\\toprule\n" 82 "\\begin{tabular}{lccccc}\n\\toprule\n"
82 "Variable & Mean & SD & P25 & Median & P75 \\\\\n\\midrule\n" 83 "Variable & Mean & SD & P25 & Median & P75 \\\\\n\\midrule\n"
@@ -91,6 +92,7 @@ def table_summary_stats(res_dir: Path) -> None:
91 # -------------------------------------------------------------------------- 92 # --------------------------------------------------------------------------
92 def table_regression(res_dir: Path) -> None: 93 def table_regression(res_dir: Path) -> None:
93 fit = json.load(open(res_dir / "fit.json")) 94 fit = json.load(open(res_dir / "fit.json"))
95+ n_fe = int(fit["M5"].get("n_fe", 1153))
94 coefs = {m: pd.read_csv(res_dir / f"coef_{m}.csv", index_col=0) 96 coefs = {m: pd.read_csv(res_dir / f"coef_{m}.csv", index_col=0)
95 for m in ("M1", "M2", "M3", "M5")} 97 for m in ("M1", "M2", "M3", "M5")}
96 lines = [label + " & " + " & ".join(cell(coefs[m], key) for m in ("M1", "M2", "M3", "M5")) 98 lines = [label + " & " + " & ".join(cell(coefs[m], key) for m in ("M1", "M2", "M3", "M5"))
@@ -105,17 +107,20 @@ def table_regression(res_dir: Path) -> None:
105 f"Observations & {fit['M1']['n']:,} & {fit['M2']['n']:,} & " 107 f"Observations & {fit['M1']['n']:,} & {fit['M2']['n']:,} & "
106 f"{fit['M3']['n']:,} & {fit['M5']['n']:,} \\\\"] 108 f"{fit['M3']['n']:,} & {fit['M5']['n']:,} \\\\"]
107 write("regression.tex", 109 write("regression.tex",
108− "\\begin{table}[t]\\centering\n\\caption{Hedonic regression estimates}\n" 110+ "\\begin{table}[htbp]\\centering\n\\caption{Hedonic regression estimates}\n"
109 "\\label{tab:regression}\n\\begin{threeparttable}\n" 111 "\\label{tab:regression}\n\\begin{threeparttable}\n"
110 "\\begin{tabular}{lcccc}\n\\toprule\n" 112 "\\begin{tabular}{lcccc}\n\\toprule\n"
111 " & (1) & (2) & (3) & (4) \\\\\n" 113 " & (1) & (2) & (3) & (4) \\\\\n"
112 " & Structural & +Type/Own. & +Province & Grand+FSA \\\\\n\\midrule\n" 114 " & Structural & +Type/Own. & +Province & Grand+FSA \\\\\n\\midrule\n"
113 + "\n".join(lines + footer) + 115 + "\n".join(lines + footer) +
114 "\n\\bottomrule\n\\end{tabular}\n\\begin{tablenotes}\\footnotesize\\item " 116 "\n\\bottomrule\n\\end{tabular}\n\\begin{tablenotes}\\footnotesize\\item "
115− "Notes: Dependent variable is $\\ln(\\text{price})$. Columns (1)--(3) use the " 117+ "Notes: Dependent variable is $\\ln(\\text{list price})$. Columns (1)--(3) use the "
116 "house subsample; column (4) is the grand model over all residential dwellings " 118 "house subsample; column (4) is the grand model over all residential dwellings "
117− "with 1{,}153 absorbed FSA fixed effects. Cluster-robust standard errors " 119+ f"with {n_fe:,} absorbed FSA fixed effects (incl. nine province-level residual "
118− "(by FSA) in parentheses. $^{*}p<0.1$, $^{**}p<0.05$, $^{***}p<0.01$.\n" 120+ "categories pooling FSAs with fewer than 25 listings). Columns (2)--(4) also include "
121+ "dwelling-type, ownership and listing-category dummies (Table~\\ref{tab:type_effects}). "
122+ "Cluster-robust standard errors (by FSA) in parentheses. "
123+ "$^{*}p<0.1$, $^{**}p<0.05$, $^{***}p<0.01$.\n"
119 "\\end{tablenotes}\n\\end{threeparttable}\n\\end{table}") 124 "\\end{tablenotes}\n\\end{threeparttable}\n\\end{table}")
120 125
121 126
@@ -130,7 +135,7 @@ def table_robustness(res_dir: Path) -> None:
130 f"\\makecell{{{r['bathrooms']:.3f}\\\\\\scriptsize({r['se_bath']:.3f})}} & " 135 f"\\makecell{{{r['bathrooms']:.3f}\\\\\\scriptsize({r['se_bath']:.3f})}} & "
131 f"\\makecell{{{r['ln_lot']:.3f}\\\\\\scriptsize({r['se_lot']:.3f})}} \\\\") 136 f"\\makecell{{{r['ln_lot']:.3f}\\\\\\scriptsize({r['se_lot']:.3f})}} \\\\")
132 write("robustness.tex", 137 write("robustness.tex",
133− "\\begin{table}[t]\\centering\n" 138+ "\\begin{table}[htbp]\\centering\n"
134 "\\caption{Robustness of key implicit prices across samples}\n" 139 "\\caption{Robustness of key implicit prices across samples}\n"
135 "\\label{tab:robustness}\n\\begin{threeparttable}\n" 140 "\\label{tab:robustness}\n\\begin{threeparttable}\n"
136 "\\begin{tabular}{lccccc}\n\\toprule\n" 141 "\\begin{tabular}{lccccc}\n\\toprule\n"
@@ -138,8 +143,9 @@ def table_robustness(res_dir: Path) -> None:
138 "\\midrule\n" + "\n".join(lines) + 143 "\\midrule\n" + "\n".join(lines) +
139 "\n\\bottomrule\n\\end{tabular}\n\\begin{tablenotes}\\footnotesize\\item " 144 "\n\\bottomrule\n\\end{tabular}\n\\begin{tablenotes}\\footnotesize\\item "
140 "Notes: Each row re-estimates the grand FSA-fixed-effects model on a different " 145 "Notes: Each row re-estimates the grand FSA-fixed-effects model on a different "
141− "sample. Cluster-robust (FSA) standard errors in parentheses. The size elasticity " 146+ "sample. Cluster-robust (FSA) standard errors in parentheses. The last two rows "
142− "and bathroom premium are stable across all cuts.\n" 147+ "cap storeys and parking counts at their 99th percentiles and drop the "
148+ "province-level categories that pool FSAs with fewer than 25 listings.\n"
143 "\\end{tablenotes}\n\\end{threeparttable}\n\\end{table}") 149 "\\end{tablenotes}\n\\end{threeparttable}\n\\end{table}")
144 150
145 151
@@ -157,16 +163,17 @@ def table_quantile(res_dir: Path) -> None:
157 f"\\makecell{{{r['bathrooms']:.3f}\\\\\\scriptsize({r['se_bath']:.3f})}} & " 163 f"\\makecell{{{r['bathrooms']:.3f}\\\\\\scriptsize({r['se_bath']:.3f})}} & "
158 f"\\makecell{{{r['ln_lot']:.3f}\\\\\\scriptsize({r['se_lot']:.3f})}} \\\\") 164 f"\\makecell{{{r['ln_lot']:.3f}\\\\\\scriptsize({r['se_lot']:.3f})}} \\\\")
159 write("quantile.tex", 165 write("quantile.tex",
160− "\\begin{table}[t]\\centering" 166+ "\\begin{table}[htbp]\\centering"
161 "\\caption{Quantile hedonic estimates across the price distribution}\n" 167 "\\caption{Quantile hedonic estimates across the price distribution}\n"
162 "\\label{tab:quantile}\\begin{threeparttable}\\begin{tabular}{lccc}\n\\toprule\n" 168 "\\label{tab:quantile}\\begin{threeparttable}\\begin{tabular}{lccc}\n\\toprule\n"
163 "Quantile & $\\ln$ area & Full bath & $\\ln$ lot \\\\\n\\midrule\n" 169 "Quantile & $\\ln$ area & Full bath & $\\ln$ lot \\\\\n\\midrule\n"
164 + "\n".join(lines) + "\n\\midrule\nOLS & " 170 + "\n".join(lines) + "\n\\midrule\nOLS & "
165 f"{ols['ln_living']:.3f} & {ols['bathrooms']:.3f} & {ols['ln_lot']:.3f} \\\\\n" 171 f"{ols['ln_living']:.3f} & {ols['bathrooms']:.3f} & {ols['ln_lot']:.3f} \\\\\n"
166 "\\bottomrule\\end{tabular}\\begin{tablenotes}\\footnotesize\\item Notes: House " 172 "\\bottomrule\\end{tabular}\\begin{tablenotes}\\footnotesize\\item Notes: House "
167− "subsample, province fixed effects, structural controls. Analytical standard " 173+ "subsample, province fixed effects (province derived from the FSA), structural "
168− "errors in parentheses. The size elasticity rises and the lot elasticity rises " 174+ "controls and ownership dummies. Kernel-based heteroskedasticity-robust standard "
169− "with price.\\end{tablenotes}\\end{threeparttable}\\end{table}") 175+ "errors (Epanechnikov kernel, Hall--Sheather bandwidth) in parentheses; the OLS row "
176+ "reports HC1 standard errors.\\end{tablenotes}\\end{threeparttable}\\end{table}")
170 177
171 178
172 # -------------------------------------------------------------------------- 179 # --------------------------------------------------------------------------
@@ -175,7 +182,7 @@ def table_lopo(res_dir: Path) -> None:
175 lines = [f"{r['prov']} & {r['n']:,.0f} & {r['r2_within']:.3f} \\\\" 182 lines = [f"{r['prov']} & {r['n']:,.0f} & {r['r2_within']:.3f} \\\\"
176 for _, r in lopo.iterrows()] 183 for _, r in lopo.iterrows()]
177 write("lopo.tex", 184 write("lopo.tex",
178− "\\begin{table}[t]\\centering" 185+ "\\begin{table}[htbp]\\centering"
179 "\\caption{Leave-one-province-out spatial cross-validation}\n" 186 "\\caption{Leave-one-province-out spatial cross-validation}\n"
180 "\\label{tab:lopo}\\begin{threeparttable}\\begin{tabular}{lcc}\n\\toprule\n" 187 "\\label{tab:lopo}\\begin{threeparttable}\\begin{tabular}{lcc}\n\\toprule\n"
181 "Held-out province & $N$ & Within-province $R^2$ \\\\\n\\midrule\n" 188 "Held-out province & $N$ & Within-province $R^2$ \\\\\n\\midrule\n"
@@ -193,7 +200,7 @@ def table_lopo(res_dir: Path) -> None:
193 def table_oos(res_dir: Path) -> None: 200 def table_oos(res_dir: Path) -> None:
194 oos = json.load(open(res_dir / "oos.json")) 201 oos = json.load(open(res_dir / "oos.json"))
195 write("oos.tex", 202 write("oos.tex",
196− "\\begin{table}[t]\\centering\n" 203+ "\\begin{table}[htbp]\\centering\n"
197 "\\caption{Out-of-sample valuation performance (80/20 split)}\n" 204 "\\caption{Out-of-sample valuation performance (80/20 split)}\n"
198 "\\label{tab:oos}\n\\begin{threeparttable}\n\\begin{tabular}{lc}\n\\toprule\n" 205 "\\label{tab:oos}\n\\begin{threeparttable}\n\\begin{tabular}{lc}\n\\toprule\n"
199 "Metric & Value \\\\\n\\midrule\n" 206 "Metric & Value \\\\\n\\midrule\n"
@@ -208,15 +215,247 @@ def table_oos(res_dir: Path) -> None:
208 "\\bottomrule\n\\end{tabular}\n\\begin{tablenotes}\\footnotesize\\item Notes: " 215 "\\bottomrule\n\\end{tabular}\n\\begin{tablenotes}\\footnotesize\\item Notes: "
209 "Model trained on a random 80\\% of listings and scored on the held-out 20\\% " 216 "Model trained on a random 80\\% of listings and scored on the held-out 20\\% "
210 "(restricted to neighbourhoods observed in training). Prices back-transformed " 217 "(restricted to neighbourhoods observed in training). Prices back-transformed "
211− "with Duan's smearing estimator.\n" 218+ "with Duan's smearing estimator. Table~\\ref{tab:spatial_holdout} reports "
219+ "repeated splits and spatial (FSA-level) holdouts.\n"
220+ "\\end{tablenotes}\n\\end{threeparttable}\n\\end{table}")
221+
222+
223+# ==========================================================================
224+# Tables added in the October 2026 revision (reproduced tier only)
225+# ==========================================================================
226+def _pct(b):
227+ return f"{(np.exp(b) - 1) * 100:+.1f}"
228+
229+
230+def table_shapley(res_dir: Path) -> None:
231+ sh = pd.read_csv(res_dir / "shapley.csv")
232+ lines = []
233+ for sample_label, g in sh.groupby("sample", sort=False):
234+ lines.append(f"\\multicolumn{{4}}{{l}}{{\\emph{{{sample_label}}} "
235+ f"($N={int(g['n'].iloc[0]):,}$, $R^2={g['total_r2'].iloc[0]:.3f}$)}} \\\\")
236+ for _, r in g.iterrows():
237+ owen = "---" if pd.isna(r["owen"]) else f"{r['owen'] * 100:.1f}"
238+ if r["block"] == "Neighbourhood (FSA)":
239+ owen = f"{r['owen'] * 100:.1f}\\tnote{{a}}"
240+ lines.append(f"\\quad {r['block']} & {r['sequential'] * 100:.1f} & "
241+ f"{r['shapley'] * 100:.1f} & {owen} \\\\")
242+ lines.append("\\addlinespace")
243+ write("shapley.tex",
244+ "\\begin{table}[htbp]\\centering\n"
245+ "\\caption{Decomposition of the explained variance of log list prices "
246+ "(percentage points of $R^2$)}\n\\label{tab:shapley}\n\\begin{threeparttable}\n"
247+ "\\begin{tabular}{lccc}\n\\toprule\n"
248+ "Block & Sequential & Shapley & Owen (grouped) \\\\\n\\midrule\n"
249+ + "\n".join(lines) +
250+ "\\bottomrule\n\\end{tabular}\n\\begin{tablenotes}\\footnotesize\n"
251+ "\\item Notes: \\emph{Sequential} is the increment in $R^2$ when the block is "
252+ "added in the order structure $\\to$ type/ownership $\\to$ province $\\to$ FSA. "
253+ "\\emph{Shapley} averages the increment over all $4!$ orderings of the four blocks "
254+ "\\citep{israeli2007shapley,gromping2007estimators}. \\emph{Owen} treats province and "
255+ "FSA as a single location group and averages over the $3!$ orderings of the three "
256+ "groups \\citep{huettner2012axiomatic}. Province dummies are nested in the FSA effects, "
257+ "so the province block adds nothing once FSA effects are present.\n"
258+ "\\item[a] Location group (province $+$ FSA).\n"
259+ "\\end{tablenotes}\n\\end{threeparttable}\n\\end{table}")
260+
261+
262+def table_se_comparison(res_dir: Path) -> None:
263+ se = pd.read_csv(res_dir / "se_comparison.csv")
264+ labels = {"ln_living": "$\\ln$ living area", "bathrooms": "Full bathrooms",
265+ "half_baths": "Half bathrooms", "bedrooms": "Bedrooms", "ln_lot": "$\\ln(1+$lot m$^2)$"}
266+ lines = []
267+ for _, r in se.iterrows():
268+ lines.append(f"{labels[r['variable']]} & {r['coef']:.3f} & {r['se_hc1']:.4f} & "
269+ f"{r['se_fsa']:.4f} & {r['se_prov']:.4f} & {r['se_twoway']:.4f} & "
270+ f"{r['p_wild_prov']:.3f} \\\\")
271+ g_fsa, g_prov = int(se["n_fsa_clusters"].iloc[0]), int(se["n_prov_clusters"].iloc[0])
272+ write("se_comparison.tex",
273+ "\\begin{table}[htbp]\\centering\n"
274+ "\\caption{Grand-model coefficients under alternative variance estimators}\n"
275+ "\\label{tab:se_comparison}\n\\begin{threeparttable}\\small\n"
276+ "\\begin{tabular}{lcccccc}\n\\toprule\n"
277+ " & & \\multicolumn{4}{c}{Standard error} & Wild-cluster \\\\\n"
278+ "\\cmidrule(lr){3-6}\n"
279+ f" & Coef. & HC1 & \\makecell{{FSA\\\\($G={g_fsa:,}$)}} & \\makecell{{Province\\\\($G={g_prov}$)}} & Two-way & "
280+ "$p$-value \\\\\n\\midrule\n"
281+ + "\n".join(lines) +
282+ "\n\\bottomrule\n\\end{tabular}\n\\begin{tablenotes}\\footnotesize\\item Notes: "
283+ "Grand model (M5) estimated on the FSA-demeaned data. HC1 is the "
284+ "heteroskedasticity-robust estimator; FSA and province cluster by neighbourhood "
285+ "and by province; two-way clusters by both. The last column is the $p$-value of a "
286+ "restricted wild-cluster bootstrap-$t$ test at the province level with Rademacher "
287+ "weights and full enumeration of the $2^{9}=512$ sign vectors "
288+ "\\citep{cameron2015practitioner,mackinnon2017wild}; its smallest attainable value "
289+ "is $2/512=0.004$.\n\\end{tablenotes}\n\\end{threeparttable}\n\\end{table}")
290+
291+
292+def table_spline(res_dir: Path) -> None:
293+ sp = pd.read_csv(res_dir / "spline.csv")
294+ lines = [f"{int(r['segment'])} & {r['lo_m2']:.0f}--{r['hi_m2']:.0f} & "
295+ f"\\makecell{{{r['elasticity']:.3f}\\\\\\scriptsize({r['se']:.3f})}} \\\\"
296+ for _, r in sp.iterrows()]
297+ r0 = sp.iloc[0]
298+ write("spline.tex",
299+ "\\begin{table}[htbp]\\centering\n"
300+ "\\caption{Living-area elasticity by size segment (piecewise-linear spline, grand model)}\n"
301+ "\\label{tab:spline}\n\\begin{threeparttable}\n"
302+ "\\begin{tabular}{lcc}\n\\toprule\n"
303+ "Segment & Living area (m$^2$) & Elasticity \\\\\n\\midrule\n"
304+ + "\n".join(lines) +
305+ f"\n\\midrule\n$R^2$: linear / quadratic / spline & \\multicolumn{{2}}{{c}}{{{r0['r2_linear']:.4f} / "
306+ f"{r0['r2_quadratic']:.4f} / {r0['r2_spline']:.4f}}} \\\\\n"
307+ "\\bottomrule\n\\end{tabular}\n\\begin{tablenotes}\\footnotesize\\item Notes: "
308+ "Linear spline in $\\ln(\\text{area})$ with knots at the quintiles of living area, "
309+ "all other grand-model controls and FSA fixed effects included. Each entry is the "
310+ "elasticity of price with respect to area within the segment; FSA-clustered standard "
311+ "errors in parentheses.\n\\end{tablenotes}\n\\end{threeparttable}\n\\end{table}")
312+
313+
314+def table_spatial_holdout(res_dir: Path) -> None:
315+ sh = json.load(open(res_dir / "spatial_holdout.json"))
316+ rm, rs = sh["random_mean"], sh["random_sd"]
317+ pm, ps = sh["fsa_holdout_mean_prov_mean"], sh["fsa_holdout_sd_prov_mean"]
318+ nm, ns = sh["fsa_holdout_mean_nn_idw"], sh["fsa_holdout_sd_nn_idw"]
319+ def c(m, s_, key, fmt):
320+ return f"{fmt.format(m[key])} \\scriptsize({fmt.format(s_[key])})"
321+ rows = [("Out-of-sample $R^2$ (log price)", "oos_r2", "{:.3f}"),
322+ ("RMSE (log points)", "rmse_log", "{:.3f}"),
323+ ("Median absolute \\% error", "median_ape", "{:.1f}"),
324+ ("Mean absolute \\% error (top 1\\% trimmed)", "mean_ape_trim", "{:.1f}"),
325+ ("Share within $\\pm$10\\%", "within10", "{:.1f}"),
326+ ("Share within $\\pm$20\\%", "within20", "{:.1f}")]
327+ lines = [f"{lab} & {c(rm, rs, k, f)} & {c(pm, ps, k, f)} & {c(nm, ns, k, f)} \\\\"
328+ for lab, k, f in rows]
329+ n_held = sh["fsa_holdout"][0]["n_fsa_held"]
330+ write("spatial_holdout.tex",
331+ "\\begin{table}[htbp]\\centering\n"
332+ "\\caption{Random versus spatial holdouts: valuation accuracy}\n"
333+ "\\label{tab:spatial_holdout}\n\\begin{threeparttable}\\small\n"
334+ "\\begin{tabular}{lccc}\n\\toprule\n"
335+ " & Random 80/20 & \\multicolumn{2}{c}{Held-out FSAs (20\\%)} \\\\\n"
336+ "\\cmidrule(lr){3-4}\n"
337+ "Metric & \\makecell{(within\\\\support)} & \\makecell{Province-mean\\\\effect} & \\makecell{IDW of 5\\\\nearest FSAs} \\\\\n\\midrule\n"
338+ + "\n".join(lines) +
339+ "\n\\bottomrule\n\\end{tabular}\n\\begin{tablenotes}\\footnotesize\\item Notes: "
340+ "Means over five replications, standard deviations across replications in "
341+ "parentheses. Column~1: random 80/20 splits of listings, evaluation restricted to "
342+ "FSAs observed in training. Columns~2--3: 20\\% of the FSAs (" f"{n_held}" " of the "
343+ "non-pooled neighbourhoods) are held out entirely; their listings are valued with the "
344+ "structural coefficients from the training FSAs and a neighbourhood effect imputed "
345+ "either as the mean effect of the training FSAs in the same province or as the "
346+ "inverse-distance-weighted mean of the five nearest training FSAs (centroid "
347+ "distance). Prices back-transformed with Duan's smearing estimator. The trimmed mean "
348+ "excludes the largest 1\\% of errors in each replication: a few listings with "
349+ "implausible parking or storey counts (up to 3{,}620 spaces) otherwise dominate "
350+ "the untrimmed mean.\n"
351+ "\\end{tablenotes}\n\\end{threeparttable}\n\\end{table}")
352+
353+
354+def table_moran_sensitivity(res_dir: Path) -> None:
355+ ms = pd.read_csv(res_dir / "moran_sensitivity.csv")
356+ seeds = sorted(ms["seed"].unique())
357+ lines = []
358+ for k in sorted(ms["k"].unique()):
359+ cells = []
360+ for seed in seeds:
361+ for model in ("structure_only", "grand_model"):
362+ r = ms[(ms["k"] == k) & (ms["seed"] == seed) & (ms["model"] == model)].iloc[0]
363+ cells.append(f"{r['I']:.3f} \\scriptsize($z={r['z']:.0f}$)")
364+ lines.append(f"$k={k}$ & " + " & ".join(cells) + " \\\\")
365+ write("moran_sensitivity.tex",
366+ "\\begin{table}[htbp]\\centering\n"
367+ "\\caption{Moran's $I$ of residuals: sensitivity to the weight matrix and subsample}\n"
368+ "\\label{tab:moran_sensitivity}\n\\begin{threeparttable}\n"
369+ "\\begin{tabular}{lcccc}\n\\toprule\n"
370+ " & \\multicolumn{2}{c}{Subsample A} & \\multicolumn{2}{c}{Subsample B} \\\\\n"
371+ "\\cmidrule(lr){2-3}\\cmidrule(lr){4-5}\n"
372+ "Neighbours & Structure only & Grand model & Structure only & Grand model \\\\\n\\midrule\n"
373+ + "\n".join(lines) +
374+ "\n\\bottomrule\n\\end{tabular}\n\\begin{tablenotes}\\footnotesize\\item Notes: "
375+ "Moran's $I$ with row-standardised $k$-nearest-neighbour weights (great-circle "
376+ "distance) on two independent random subsamples of 15{,}000 listings. $z$-scores "
377+ "from 199 random permutations; every permutation $p$-value equals its minimum "
378+ "attainable value of $1/200=0.005$. ``Structure only'' is the residual of the "
379+ "model with structural, type and ownership controls but no location effects.\n"
380+ "\\end{tablenotes}\n\\end{threeparttable}\n\\end{table}")
381+
382+
383+def table_type_effects(res_dir: Path) -> None:
384+ coefs = pd.read_csv(res_dir / "coef_M5.csv", index_col=0)
385+ groups = [("Dwelling type (ref.: apartment)", "bt_",
386+ {"House": "House", "Row/Townhouse": "Row / townhouse", "Duplex": "Duplex",
387+ "Triplex": "Triplex", "Fourplex": "Fourplex", "Manufactured": "Manufactured home",
388+ "Other": "Other"}),
389+ ("Ownership (ref.: co-op / co-ownership)", "ow_",
390+ {"Freehold": "Freehold", "Condo/Strata": "Condominium / strata",
391+ "Leasehold": "Leasehold", "Unknown": "Not reported", "Other": "Other"})]
392+ lines = []
393+ for title, pfx, labels in groups:
394+ lines.append(f"\\multicolumn{{4}}{{l}}{{\\emph{{{title}}}}} \\\\")
395+ for key, lab in labels.items():
396+ name = pfx + key
397+ if name not in coefs.index:
398+ continue
399+ b, se, p = coefs.loc[name, ["coef", "se", "p"]]
400+ kennedy = (np.exp(b - 0.5 * se ** 2) - 1) * 100
401+ lines.append(f"\\quad {lab} & {b:.3f}{stars(p)} & ({se:.3f}) & {kennedy:+.1f} \\\\")
402+ lines.append("\\addlinespace")
403+ write("type_effects.tex",
404+ "\\begin{table}[htbp]\\centering\n"
405+ "\\caption{Dwelling-type and ownership effects in the grand model}\n"
406+ "\\label{tab:type_effects}\n\\begin{threeparttable}\n"
407+ "\\begin{tabular}{lccc}\n\\toprule\n"
408+ " & Coefficient & SE & \\% effect \\\\\n\\midrule\n"
409+ + "\n".join(lines) +
410+ "\\bottomrule\n\\end{tabular}\n\\begin{tablenotes}\\footnotesize\\item Notes: "
411+ "Grand model (M5), all residential dwellings, FSA fixed effects absorbed, "
412+ "FSA-clustered standard errors. The percentage effect is the \\citet{kennedy1981estimation} "
413+ "estimator $100\\,[\\exp(\\hat\\gamma-\\tfrac{1}{2}\\widehat{V}(\\hat\\gamma))-1]$, "
414+ "which corrects the \\citet{halvorsen1980interpretation} transformation for "
415+ "estimation error. Effects are relative to the omitted category and conditional "
416+ "on living area, the other structural attributes and the neighbourhood. "
417+ "$^{*}p<0.1$, $^{**}p<0.05$, $^{***}p<0.01$.\n"
418+ "\\end{tablenotes}\n\\end{threeparttable}\n\\end{table}")
419+
420+
421+def table_gradient(res_dir: Path) -> None:
422+ g = json.load(open(res_dir / "gradient_metro.json"))
423+ bins = pd.read_csv(res_dir / "gradient_bins.csv")
424+ edges = [0, 5, 10, 20, 40, 80, 160, 320]
425+ blines = []
426+ for i, r in bins.iterrows():
427+ lab = f"{edges[i]}--{edges[i + 1]}" if i + 1 < len(edges) else f"$>${edges[-1]}"
428+ blines.append(f"\\quad {lab} km & {int(r['n']):,} & {r['x']:.0f} & {(np.exp(r['prem']) - 1) * 100:+.1f} \\\\")
429+ p, m, q = g["pooled"], g["metro_fe"], g["quadratic"]
430+ write("gradient.tex",
431+ "\\begin{table}[htbp]\\centering\n"
432+ "\\caption{The urban price gradient: location premium and distance to the nearest metro}\n"
433+ "\\label{tab:gradient}\n\\begin{threeparttable}\n"
434+ "\\begin{tabular}{lccc}\n\\toprule\n"
435+ "\\multicolumn{4}{l}{\\emph{Panel A: mean location premium by distance band}} \\\\\n"
436+ "Distance band & Listings & Median km & Premium (\\%) \\\\\n\\midrule\n"
437+ + "\n".join(blines) +
438+ "\n\\midrule\n\\multicolumn{4}{l}{\\emph{Panel B: regressions of the location premium on $\\ln(\\text{distance})$}} \\\\\n"
439+ " & Slope & SE & $R^2$ \\\\\n\\midrule\n"
440+ f"\\quad Pooled & {p['beta']:.4f} & ({p['se_fsa']:.4f}) & {p['r2']:.3f} \\\\\n"
441+ f"\\quad Nearest-metro intercepts & {m['beta']:.4f} & ({m['se_fsa']:.4f}) & {m['r2']:.3f} \\\\\n"
442+ f"\\quad Quadratic: $\\ln d$ & {q['b1']:.4f} & ({q['se1']:.4f}) & \\multirow{{2}}{{*}}{{{q['r2']:.3f}}} \\\\\n"
443+ f"\\quad \\phantom{{Quadratic:}} $(\\ln d)^2$ & {q['b2']:.4f} & ({q['se2']:.4f}) & \\\\\n"
444+ "\\bottomrule\n\\end{tabular}\n\\begin{tablenotes}\\footnotesize\\item Notes: "
445+ "The location premium is the residual of the model with structural, type and "
446+ "ownership controls but no location effects; the premium in Panel~A is "
447+ "$100\\,(e^{\\bar{u}}-1)$ for the band mean $\\bar{u}$. Distance is the great-circle "
448+ "distance to the nearest of nine metropolitan centres (Toronto, Montreal, Vancouver, "
449+ "Calgary, Ottawa--Gatineau, Edmonton, Winnipeg, Quebec City, Halifax); listings within "
450+ "0.5~km of a centre are excluded from Panel~B. FSA-clustered standard errors.\n"
212 "\\end{tablenotes}\n\\end{threeparttable}\n\\end{table}") 451 "\\end{tablenotes}\n\\end{threeparttable}\n\\end{table}")
213 452
214 453
215 def main() -> None: 454 def main() -> None:
216 parser = argparse.ArgumentParser() 455 parser = argparse.ArgumentParser()
217 parser.add_argument("--results", choices=["reference", "reproduced"], 456 parser.add_argument("--results", choices=["reference", "reproduced"],
218− default="reference", 457+ default="reproduced",
219− help="results tier (default: reference — published numbers)") 458+ help="results tier (default: reproduced — current pipeline)")
220 args = parser.parse_args() 459 args = parser.parse_args()
221 res_dir = REFERENCE if args.results == "reference" else REPRODUCED 460 res_dir = REFERENCE if args.results == "reference" else REPRODUCED
222 ensure_dirs() 461 ensure_dirs()
@@ -226,6 +465,14 @@ def main() -> None:
226 table_quantile(res_dir) 465 table_quantile(res_dir)
227 table_lopo(res_dir) 466 table_lopo(res_dir)
228 table_oos(res_dir) 467 table_oos(res_dir)
468+ if args.results == "reproduced":
469+ table_shapley(res_dir)
470+ table_se_comparison(res_dir)
471+ table_spline(res_dir)
472+ table_spatial_holdout(res_dir)
473+ table_moran_sensitivity(res_dir)
474+ table_type_effects(res_dir)
475+ table_gradient(res_dir)
229 print("all tables written to", TABLES) 476 print("all tables written to", TABLES)
230 477
231 478
added scripts/06_revision_analyses.py +393 −0
@@ -0,0 +1,393 @@
1+#!/usr/bin/env python3
2+# Author: Simon-Pierre Boucher — contact@spboucher.ai
3+"""Step 06 — Additional analyses added in the October 2026 revision.
4+
5+All results are written to ``results/reproduced/`` and consumed by scripts 04
6+and 05. Each block is a self-contained function.
7+
8+ shapley.csv Shapley / Owen decomposition of R^2 across regressor blocks
9+ se_comparison.csv M5 key coefficients under alternative variance estimators,
10+ incl. a wild-cluster (Rademacher) bootstrap at the province level
11+ spline.csv piecewise-linear (spline) living-area elasticities vs. quadratic
12+ spatial_holdout.json FSA-level spatial holdout + repeated random holdouts
13+ moran_sensitivity.csv Moran's I for k in {5, 10, 20} and two subsamples
14+ gradient_metro.json urban gradient with metro-specific intercepts
15+
16+Usage: python scripts/06_revision_analyses.py
17+"""
18+import itertools
19+import json
20+import math
21+import sys
22+import warnings
23+from pathlib import Path
24+
25+import numpy as np
26+import pandas as pd
27+import statsmodels.api as sm
28+from sklearn.neighbors import NearestNeighbors
29+
30+sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))
31+
32+from wp9 import models, sample # noqa: E402
33+from wp9.config import METROS, REPRODUCED, SEED_MORAN, SEED_OOS, STRUCT, ensure_dirs # noqa: E402
34+
35+warnings.filterwarnings("ignore")
36+SEED_REV = 2026
37+
38+
39+# --------------------------------------------------------------------------
40+def _r2(y, X):
41+ """OLS R^2 with an intercept-only baseline (X may already contain a constant)."""
42+ if "const" not in X.columns:
43+ X = sm.add_constant(X)
44+ return float(sm.OLS(y, X).fit().rsquared)
45+
46+
47+def _r2_absorb(y, X, fsa):
48+ """R^2 of a model that absorbs FSA fixed effects (full-dummy equivalent)."""
49+ from linearmodels.iv.absorbing import AbsorbingLS
50+ X = X.copy()
51+ if "const" not in X.columns:
52+ X = sm.add_constant(X)
53+ res = AbsorbingLS(y, X, absorb=fsa.to_frame().astype("category"),
54+ drop_absorbed=True).fit(cov_type="unadjusted")
55+ return float(res.rsquared)
56+
57+
58+def shapley_decomposition(s: pd.DataFrame, label: str) -> list[dict]:
59+ """Shapley values of R^2 for the blocks {structure, type/ownership, province, FSA}.
60+
61+ Province dummies are nested in the FSA effects, so any coalition that
62+ contains FSA has the same R^2 with or without the province block; the
63+ Shapley value of the province block then measures what provinces add when
64+ FSAs are *not* present, averaged over orderings. The Owen value groups
65+ province and FSA into a single 'location' block.
66+ """
67+ y = s["ln_price"]
68+ blocks = {
69+ "S": s[STRUCT].astype(float),
70+ "T": pd.concat([pd.get_dummies(s[c], prefix=p, drop_first=True).astype(float)
71+ for c, p in (("btype_c", "bt"), ("own_c", "ow"), ("cat", "cat"))], axis=1),
72+ "P": pd.get_dummies(s["prov"], prefix="pv", drop_first=True).astype(float),
73+ }
74+ names = ["S", "T", "P", "F"]
75+ cache = {}
76+
77+ def value(coal):
78+ key = tuple(sorted(coal))
79+ if key in cache:
80+ return cache[key]
81+ cols = [blocks[b] for b in key if b in blocks]
82+ X = pd.concat(cols, axis=1) if cols else pd.DataFrame(index=s.index)
83+ if "F" in key:
84+ X = X.drop(columns=[c for c in X.columns if c.startswith("pv_")], errors="ignore")
85+ v = _r2_absorb(y, X, s["fsa_c"]) if len(X.columns) else _r2_absorb(
86+ y, pd.DataFrame({"const": np.ones(len(s))}, index=s.index), s["fsa_c"])
87+ else:
88+ v = _r2(y, X) if len(X.columns) else 0.0
89+ cache[key] = v
90+ return v
91+
92+ n = len(names)
93+ shap = {b: 0.0 for b in names}
94+ for b in names:
95+ others = [o for o in names if o != b]
96+ for k in range(len(others) + 1):
97+ for coal in itertools.combinations(others, k):
98+ w = math.factorial(k) * math.factorial(n - k - 1) / math.factorial(n)
99+ shap[b] += w * (value(coal + (b,)) - value(coal))
100+ total = value(tuple(names))
101+
102+ # Owen value: groups {S}, {T}, {L = P, F}; Shapley over the 3 groups.
103+ groups = {"S": ("S",), "T": ("T",), "L": ("P", "F")}
104+ gnames = list(groups)
105+ owen = {g: 0.0 for g in gnames}
106+ for g in gnames:
107+ others = [o for o in gnames if o != g]
108+ for k in range(len(others) + 1):
109+ for coal in itertools.combinations(others, k):
110+ w = math.factorial(k) * math.factorial(3 - k - 1) / math.factorial(3)
111+ with_g = sum((groups[x] for x in coal + (g,)), ())
112+ without = sum((groups[x] for x in coal), ())
113+ owen[g] += w * (value(with_g) - value(without))
114+
115+ seq = {"S": value(("S",)),
116+ "T": value(("S", "T")) - value(("S",)),
117+ "P": value(("S", "T", "P")) - value(("S", "T")),
118+ "F": value(("S", "T", "P", "F")) - value(("S", "T", "P"))}
119+ rows = []
120+ for b, lab in (("S", "Structure"), ("T", "Dwelling type and ownership"),
121+ ("P", "Province"), ("F", "Neighbourhood (FSA)")):
122+ rows.append({"sample": label, "block": lab, "sequential": seq[b], "shapley": shap[b],
123+ "owen": owen["L"] if b == "F" else (np.nan if b == "P" else owen[b]),
124+ "total_r2": total, "n": len(s)})
125+ return rows
126+
127+
128+# --------------------------------------------------------------------------
129+def _within(df, cols, by):
130+ """Demean columns by group (one-way fixed-effect transformation)."""
131+ return df[cols] - df.groupby(by)[cols].transform("mean")
132+
133+
134+def se_comparison(s: pd.DataFrame) -> pd.DataFrame:
135+ """M5 key coefficients under HC1, FSA-cluster, province-cluster and a
136+ province-level wild-cluster bootstrap (Rademacher, full enumeration)."""
137+ X = models.design(s).drop(columns="const")
138+ cols = X.columns.tolist()
139+ data = pd.concat([s[["ln_price", "fsa_c", "prov"]], X], axis=1)
140+ dd = _within(data, ["ln_price"] + cols, "fsa_c")
141+ y, Xd = dd["ln_price"].values, dd[cols].values
142+ keep = Xd.std(axis=0) > 1e-12 # drop columns absorbed by the FSA effects
143+ Xd, cols = Xd[:, keep], [c for c, k in zip(cols, keep) if k]
144+ n_fe = s["fsa_c"].nunique()
145+ ols = sm.OLS(y, Xd)
146+ base = ols.fit()
147+ dof_corr = (len(y) - 1) / (len(y) - Xd.shape[1] - n_fe) # absorbed-FE dof adjustment
148+ hc1 = ols.fit(cov_type="HC1")
149+ cl_fsa = ols.fit(cov_type="cluster", cov_kwds={"groups": pd.factorize(s["fsa_c"])[0]})
150+ cl_prov = ols.fit(cov_type="cluster", cov_kwds={"groups": pd.factorize(s["prov"])[0]})
151+ cl_2way = ols.fit(cov_type="cluster",
152+ cov_kwds={"groups": np.column_stack([pd.factorize(s["fsa_c"])[0],
153+ pd.factorize(s["prov"])[0]])})
154+ rows = []
155+ for key in ("ln_living", "bathrooms", "half_baths", "bedrooms", "ln_lot"):
156+ j = cols.index(key)
157+ rows.append({"variable": key, "coef": base.params[j],
158+ "se_hc1": hc1.bse[j] * math.sqrt(dof_corr),
159+ "se_fsa": cl_fsa.bse[j] * math.sqrt(dof_corr),
160+ "se_prov": cl_prov.bse[j],
161+ "se_twoway": cl_2way.bse[j] * math.sqrt(dof_corr)})
162+ # Wild-cluster restricted bootstrap-t at the province level (G = 9 -> 512 draws)
163+ groups = pd.factorize(s["prov"])[0]
164+ G = groups.max() + 1
165+ signs = np.array(list(itertools.product([-1.0, 1.0], repeat=G)))
166+ XtX_inv = np.linalg.inv(Xd.T @ Xd)
167+ for r in rows:
168+ j = cols.index(r["variable"])
169+ t_obs = r["coef"] / r["se_prov"]
170+ mask = np.ones(Xd.shape[1], bool); mask[j] = False
171+ Xr = Xd[:, mask]
172+ br = np.linalg.lstsq(Xr, y, rcond=None)[0]
173+ yhat_r, e_r = Xr @ br, y - Xr @ br
174+ t_boot = np.empty(len(signs))
175+ for b, w in enumerate(signs):
176+ yb = yhat_r + e_r * w[groups]
177+ bb = XtX_inv @ (Xd.T @ yb)
178+ ub = yb - Xd @ bb
179+ # cluster-robust variance of bb[j] by province
180+ meat = np.zeros((Xd.shape[1], Xd.shape[1]))
181+ for g in range(G):
182+ sg = Xd[groups == g].T @ ub[groups == g]
183+ meat += np.outer(sg, sg)
184+ V = XtX_inv @ meat @ XtX_inv * (G / (G - 1))
185+ t_boot[b] = bb[j] / math.sqrt(V[j, j])
186+ r["p_wild_prov"] = float(np.mean(np.abs(t_boot) >= abs(t_obs)))
187+ r["t_prov"] = float(t_obs)
188+ out = pd.DataFrame(rows)
189+ out.attrs["n_fsa_clusters"] = int(n_fe)
190+ out["n_fsa_clusters"] = n_fe
191+ out["n_prov_clusters"] = G
192+ return out
193+
194+
195+# --------------------------------------------------------------------------
196+def spline_elasticity(s: pd.DataFrame) -> pd.DataFrame:
197+ """Piecewise-linear spline in ln(area) with knots at the size quintiles."""
198+ knots = s["ln_living"].quantile([0.2, 0.4, 0.6, 0.8]).values
199+ extra = pd.DataFrame({f"hinge{k}": np.maximum(s["ln_living"] - kn, 0.0)
200+ for k, kn in enumerate(knots)}, index=s.index)
201+ res, cols = models.fit_absorbing(s, extra=extra)
202+ params = pd.Series(np.asarray(res.params).ravel(), index=res.params.index)
203+ cov = pd.DataFrame(np.asarray(res.cov), index=res.params.index, columns=res.params.index)
204+ names = ["ln_living"] + [f"hinge{k}" for k in range(len(knots))]
205+ edges = np.concatenate([[s["ln_living"].min()], knots, [s["ln_living"].max()]])
206+ rows = []
207+ for seg in range(len(knots) + 1):
208+ active = names[: seg + 1]
209+ g = np.array([1.0 if nm in active else 0.0 for nm in names])
210+ el = float(g @ params[names].values)
211+ se = float(np.sqrt(g @ cov.loc[names, names].values @ g))
212+ rows.append({"segment": seg + 1, "lo_m2": math.exp(edges[seg]), "hi_m2": math.exp(edges[seg + 1]),
213+ "elasticity": el, "se": se, "r2_spline": float(res.rsquared)})
214+ # quadratic and linear fits for comparison
215+ res_q, _ = models.fit_absorbing(s, extra=(s["ln_living"] ** 2).to_frame("ln_living2"))
216+ res_l, _ = models.fit_absorbing(s)
217+ out = pd.DataFrame(rows)
218+ out["r2_quadratic"] = float(res_q.rsquared)
219+ out["r2_linear"] = float(res_l.rsquared)
220+ return out
221+
222+
223+# --------------------------------------------------------------------------
224+def _score(test, pred_log, smear):
225+ err = test["ln_price"].values - pred_log
226+ ss_tot = np.sum((test["ln_price"].values - test["ln_price"].mean()) ** 2)
227+ ape = np.abs(np.exp(pred_log) * smear - test["price_cad"].values) / test["price_cad"].values
228+ return {"n_test": int(len(test)), "oos_r2": float(1 - np.sum(err ** 2) / ss_tot),
229+ "rmse_log": float(np.sqrt(np.mean(err ** 2))),
230+ "median_ape": float(np.median(ape) * 100), "mean_ape": float(np.mean(ape) * 100),
231+ # mean APE excluding the top 1% of errors: a handful of listings with
232+ # implausible parking/storey counts (e.g. 3,620 parking spaces) produce
233+ # astronomically large predictions in some splits
234+ "mean_ape_trim": float(np.mean(np.sort(ape)[: int(0.99 * len(ape))]) * 100),
235+ "within10": float(np.mean(ape <= 0.10) * 100), "within20": float(np.mean(ape <= 0.20) * 100)}
236+
237+
238+def spatial_holdout(s: pd.DataFrame) -> dict:
239+ """Hold out 20% of FSAs entirely; predict their listings with (a) the
240+ province-mean fixed effect and (b) an inverse-distance average of the five
241+ nearest training FSAs' effects. Also: five repeated random 80/20 splits."""
242+ out = {}
243+ rng = np.random.default_rng(SEED_REV)
244+ real = s[~s["fsa_c"].str.endswith("_other")]
245+ fsas = real["fsa_c"].unique()
246+ reps = []
247+ for rep in range(5):
248+ held = rng.choice(fsas, size=int(0.2 * len(fsas)), replace=False)
249+ train = real[~real["fsa_c"].isin(held)]
250+ test = real[real["fsa_c"].isin(held)]
251+ res, cols = models.fit_absorbing(train)
252+ fe = models.fsa_fixed_effects(train, res, cols)
253+ beta = pd.Series(np.asarray(res.params).ravel(), index=res.params.index)
254+ xb_test = models.design(test).reindex(columns=beta.index, fill_value=0.0).values @ beta.values
255+ pred_train = models.predict_with_fe(train, res, cols, fe)
256+ smear = models.duan_smearing(train["ln_price"].values - pred_train)
257+ # (a) province mean of the training FSA effects
258+ fe_prov = (fe.to_frame("fe").join(train.groupby("fsa_c")["prov"].first())
259+ .groupby("prov")["fe"].mean())
260+ pred_a = xb_test + test["prov"].map(fe_prov).fillna(fe.mean()).values
261+ # (b) inverse-distance weighted mean of the 5 nearest training FSAs
262+ cent = train.groupby("fsa_c")[["lat", "lon"]].mean()
263+ test_cent = test.groupby("fsa_c")[["lat", "lon"]].mean()
264+ nn = NearestNeighbors(n_neighbors=5).fit(np.radians(cent.values))
265+ dist, idx = nn.kneighbors(np.radians(test_cent.values))
266+ dist_km = 6371.0 * dist
267+ w = 1.0 / np.maximum(dist_km, 1.0)
268+ fe_train = fe.reindex(cent.index).values
269+ fe_nn = pd.Series((fe_train[idx] * w).sum(1) / w.sum(1), index=test_cent.index)
270+ pred_b = xb_test + test["fsa_c"].map(fe_nn).values
271+ reps.append({"rep": rep, "n_fsa_held": int(len(held)),
272+ "prov_mean": _score(test, pred_a, smear), "nn_idw": _score(test, pred_b, smear)})
273+ out["fsa_holdout"] = reps
274+ for key in ("prov_mean", "nn_idw"):
275+ out[f"fsa_holdout_mean_{key}"] = {m: float(np.mean([r[key][m] for r in reps]))
276+ for m in reps[0][key]}
277+ out[f"fsa_holdout_sd_{key}"] = {m: float(np.std([r[key][m] for r in reps], ddof=1))
278+ for m in reps[0][key]}
279+ # repeated random 80/20 splits on common support (5 seeds)
280+ rand = []
281+ for seed in (SEED_OOS, 1, 2, 3, 4):
282+ rs = np.random.RandomState(seed)
283+ idx = rs.permutation(len(s)); cut = int(0.8 * len(s))
284+ train, test = s.iloc[idx[:cut]], s.iloc[idx[cut:]]
285+ common = set(train["fsa_c"]).intersection(test["fsa_c"])
286+ train, test = train[train["fsa_c"].isin(common)], test[test["fsa_c"].isin(common)]
287+ res, cols = models.fit_absorbing(train)
288+ fe = models.fsa_fixed_effects(train, res, cols)
289+ smear = models.duan_smearing(train["ln_price"].values - models.predict_with_fe(train, res, cols, fe))
290+ rand.append(_score(test, models.predict_with_fe(test, res, cols, fe), smear))
291+ out["random_repeats"] = rand
292+ out["random_mean"] = {m: float(np.mean([r[m] for r in rand])) for m in rand[0]}
293+ out["random_sd"] = {m: float(np.std([r[m] for r in rand], ddof=1)) for m in rand[0]}
294+ return out
295+
296+
297+# --------------------------------------------------------------------------
298+def moran_sensitivity(s: pd.DataFrame) -> pd.DataFrame:
299+ """Moran's I of structure-only and grand-model residuals for several k and subsamples."""
300+ grand = pd.read_parquet(REPRODUCED / "grand_model.parquet")
301+ X = models.design(s)
302+ struct_resid = s["ln_price"] - sm.OLS(s["ln_price"], X).fit().predict(X)
303+ rows = []
304+ for seed in (SEED_MORAN, SEED_REV):
305+ sub = s.sample(15000, random_state=seed)
306+ coords = np.radians(sub[["lat", "lon"]].values)
307+ for k in (5, 10, 20):
308+ nn = NearestNeighbors(n_neighbors=k + 1, metric="haversine").fit(coords)
309+ _, idx = nn.kneighbors(coords); idx = idx[:, 1:]
310+ for label, vals in (("structure_only", struct_resid.loc[sub.index].values),
311+ ("grand_model", grand.loc[sub.index, "resid_grand"].values)):
312+ z = vals - vals.mean(); lag = z[idx].mean(axis=1)
313+ stat = np.sum(z * lag) / np.sum(z ** 2)
314+ rng = np.random.default_rng(seed + k)
315+ perms = np.array([np.sum((zp := rng.permutation(z)) * zp[idx].mean(axis=1)) / np.sum(zp ** 2)
316+ for _ in range(199)])
317+ rows.append({"seed": seed, "k": k, "model": label, "I": float(stat),
318+ "z": float((stat - perms.mean()) / perms.std()),
319+ "p_perm": float((np.sum(np.abs(perms) >= abs(stat)) + 1) / 200)})
320+ return pd.DataFrame(rows)
321+
322+
323+# --------------------------------------------------------------------------
324+def gradient_with_metro_fe(s: pd.DataFrame) -> dict:
325+ """Location premium on ln(distance) with nearest-metro intercepts, and a quadratic form."""
326+ X = models.design(s)
327+ prem = s["ln_price"] - sm.OLS(s["ln_price"], X).fit().predict(X)
328+ lat, lon = s["lat"].values, s["lon"].values
329+ rad = np.pi / 180
330+ dists = {}
331+ for name, (mlat, mlon) in METROS.items():
332+ a = (np.sin((mlat - lat) * rad / 2) ** 2
333+ + np.cos(lat * rad) * np.cos(mlat * rad) * np.sin((mlon - lon) * rad / 2) ** 2)
334+ dists[name] = 2 * 6371.0 * np.arcsin(np.sqrt(a))
335+ D = pd.DataFrame(dists, index=s.index)
336+ dist = D.min(axis=1); metro = D.idxmin(axis=1)
337+ keep = dist > 0.5
338+ ld = np.log(dist[keep])
339+ base = sm.OLS(prem[keep], sm.add_constant(ld)).fit(cov_type="cluster",
340+ cov_kwds={"groups": pd.factorize(s["fsa_c"][keep])[0]})
341+ Xm = pd.concat([ld.rename("ln_dist"), pd.get_dummies(metro[keep], drop_first=True).astype(float)], axis=1)
342+ mfe = sm.OLS(prem[keep], sm.add_constant(Xm)).fit(cov_type="cluster",
343+ cov_kwds={"groups": pd.factorize(s["fsa_c"][keep])[0]})
344+ Xq = pd.DataFrame({"ln_dist": ld, "ln_dist2": ld ** 2})
345+ quad = sm.OLS(prem[keep], sm.add_constant(Xq)).fit(cov_type="cluster",
346+ cov_kwds={"groups": pd.factorize(s["fsa_c"][keep])[0]})
347+ # metro-specific slopes
348+ slopes = {}
349+ for m, g in pd.DataFrame({"prem": prem[keep], "ld": ld, "metro": metro[keep]}).groupby("metro"):
350+ f = sm.OLS(g["prem"], sm.add_constant(g["ld"])).fit()
351+ slopes[m] = {"beta": float(f.params.iloc[1]), "n": int(len(g))}
352+ return {"pooled": {"beta": float(base.params.iloc[1]), "se_fsa": float(base.bse.iloc[1]), "r2": float(base.rsquared)},
353+ "metro_fe": {"beta": float(mfe.params["ln_dist"]), "se_fsa": float(mfe.bse["ln_dist"]), "r2": float(mfe.rsquared)},
354+ "quadratic": {"b1": float(quad.params["ln_dist"]), "b2": float(quad.params["ln_dist2"]),
355+ "se1": float(quad.bse["ln_dist"]), "se2": float(quad.bse["ln_dist2"]), "r2": float(quad.rsquared)},
356+ "metro_slopes": slopes, "share_within_40km": float((dist <= 40).mean()),
357+ "share_beyond_160km": float((dist > 160).mean())}
358+
359+
360+# --------------------------------------------------------------------------
361+def main() -> None:
362+ ensure_dirs()
363+ s = sample.load_sample()
364+
365+ rows = shapley_decomposition(s, "All residential") + \
366+ shapley_decomposition(s[s["cat"] == "house"], "Houses")
367+ pd.DataFrame(rows).to_csv(REPRODUCED / "shapley.csv", index=False)
368+ print(pd.DataFrame(rows).round(3).to_string())
369+
370+ sec = se_comparison(s)
371+ sec.to_csv(REPRODUCED / "se_comparison.csv", index=False)
372+ print(sec.round(4).to_string())
373+
374+ spl = spline_elasticity(s)
375+ spl.to_csv(REPRODUCED / "spline.csv", index=False)
376+ print(spl.round(3).to_string())
377+
378+ sh = spatial_holdout(s)
379+ json.dump(sh, open(REPRODUCED / "spatial_holdout.json", "w"), indent=2)
380+ print("spatial holdout:", {k: {m: round(v, 3) for m, v in d.items()} for k, d in sh.items() if k.startswith(("fsa_holdout_mean", "random_mean"))})
381+
382+ ms = moran_sensitivity(s)
383+ ms.to_csv(REPRODUCED / "moran_sensitivity.csv", index=False)
384+ print(ms.round(3).to_string())
385+
386+ gm = gradient_with_metro_fe(s)
387+ json.dump(gm, open(REPRODUCED / "gradient_metro.json", "w"), indent=2)
388+ print("gradient:", gm["pooled"], gm["metro_fe"], gm["quadratic"])
389+ print("ALL REVISION ANALYSES DONE")
390+
391+
392+if __name__ == "__main__":
393+ main()
modified src/wp9/config.py +9 −0
@@ -26,6 +26,15 @@ HA_TO_M2 = 10_000.0
26 26
27 # Sample construction 27 # Sample construction
28 TRIM_LO, TRIM_HI = 0.01, 0.99 # 1% tails of price and living area 28 TRIM_LO, TRIM_HI = 0.01, 0.99 # 1% tails of price and living area
29+
30+# Province of a listing is derived from the first letter of its FSA (Canada
31+# Post convention), not from the scraper seed stored in ``_province`` -- the
32+# seed mislabels roughly 13% of listings near provincial borders (revision of
33+# 2026-10-17, see docs/CHANGELOG-REVISION.md). Letters O and W are not
34+# assigned; X (NT/NU) and Y (YT) are territories and are excluded.
35+FSA_PROVINCE = {"A": "NL", "B": "NS", "C": "PE", "E": "NB", "G": "QC", "H": "QC",
36+ "J": "QC", "K": "ON", "L": "ON", "M": "ON", "N": "ON", "P": "ON",
37+ "R": "MB", "S": "SK", "T": "AB", "V": "BC"}
29 FSA_MIN_LISTINGS = 25 # FSAs below this are pooled into <PROV>_other 38 FSA_MIN_LISTINGS = 25 # FSAs below this are pooled into <PROV>_other
30 LOT_TAIL_Q = 0.99 # positive lot areas above this quantile set to 0 (unparseable/exotic) 39 LOT_TAIL_Q = 0.99 # positive lot areas above this quantile set to 0 (unparseable/exotic)
31 40
modified src/wp9/sample.py +10 −4
@@ -6,7 +6,7 @@ Steps (documented in the paper's data section):
6 1. read the raw ``listings`` table (172,019 unique for-sale listings); 6 1. read the raw ``listings`` table (172,019 unique for-sale listings);
7 2. parse the semi-structured fields (bedrooms, areas, lot, counts); 7 2. parse the semi-structured fields (bedrooms, areas, lot, counts);
8 3. consolidate dwelling type and ownership form; derive the FSA from the 8 3. consolidate dwelling type and ownership form; derive the FSA from the
9− postal code; 9+ postal code and the province from the first letter of the FSA;
10 4. keep residential listings with a strictly positive price and non-missing 10 4. keep residential listings with a strictly positive price and non-missing
11 core structural fields (living area, bedrooms, bathrooms) and a valid FSA; 11 core structural fields (living area, bedrooms, bathrooms) and a valid FSA;
12 5. trim the extreme 1% tails of price and living area; 12 5. trim the extreme 1% tails of price and living area;
@@ -18,8 +18,8 @@ import numpy as np
18 import pandas as pd 18 import pandas as pd
19 19
20 from . import parsing 20 from . import parsing
21−from .config import (ANALYSIS_PARQUET, FSA_MIN_LISTINGS, LOT_TAIL_Q, RAW_DB, 21+from .config import (ANALYSIS_PARQUET, FSA_MIN_LISTINGS, FSA_PROVINCE, LOT_TAIL_Q,
22− TRIM_HI, TRIM_LO, ensure_dirs) 22+ RAW_DB, TRIM_HI, TRIM_LO, ensure_dirs)
23 23
24 _RAW_QUERY = """ 24 _RAW_QUERY = """
25 select "_category" as cat, 25 select "_category" as cat,
@@ -72,6 +72,12 @@ def parse_variables(raw: pd.DataFrame) -> pd.DataFrame:
72 72
73 fsa = d["postal_code"].astype("string").str.upper().str[:3] 73 fsa = d["postal_code"].astype("string").str.upper().str[:3]
74 d["fsa"] = fsa.where(fsa.str.match(_FSA_PATTERN, na=False)) 74 d["fsa"] = fsa.where(fsa.str.match(_FSA_PATTERN, na=False))
75+ # Province from the FSA letter (the scraper seed is kept as ``prov_seed``);
76+ # listings whose FSA letter maps to no province (O, W, territories) get a
77+ # missing FSA and are dropped by the core filter below.
78+ d["prov_seed"] = d["prov"]
79+ d["prov"] = d["fsa"].str[0].map(FSA_PROVINCE)
80+ d["fsa"] = d["fsa"].where(d["prov"].notna())
75 return d 81 return d
76 82
77 83
@@ -93,7 +99,7 @@ def build_sample(d: pd.DataFrame) -> pd.DataFrame:
93 counts = s.groupby("fsa")["fsa"].transform("size") 99 counts = s.groupby("fsa")["fsa"].transform("size")
94 s["fsa_c"] = np.where(counts >= FSA_MIN_LISTINGS, s["fsa"], s["prov"] + "_other") 100 s["fsa_c"] = np.where(counts >= FSA_MIN_LISTINGS, s["fsa"], s["prov"] + "_other")
95 101
96− keep = ["cat", "prov", "btype_c", "own_c", "fsa", "fsa_c", 102+ keep = ["cat", "prov", "prov_seed", "btype_c", "own_c", "fsa", "fsa_c",
97 "price_cad", "ln_price", "ppm2", 103 "price_cad", "ln_price", "ppm2",
98 "living_m2", "ln_living", "bedrooms", "bathrooms", "half_baths", 104 "living_m2", "ln_living", "bedrooms", "bathrooms", "half_baths",
99 "parking_n", "stories_n", "lot_m2_f", "has_lot", "ln_lot", 105 "parking_n", "stories_n", "lot_m2_f", "has_lot", "ln_lot",
100 106
Menu

Theme