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