WP22: fit wide tables, Monte Carlo figure labels, README headline results, anonymous version
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
39 changed files +51 −17
modified
figures/fig_mc_coverage.pdf
+0 −0
Binary file not shown.
modified
figures/fig_mc_rmse.pdf
+0 −0
Binary file not shown.
modified
paper/figures/fig_mc_coverage.pdf
+0 −0
Binary file not shown.
modified
paper/figures/fig_mc_rmse.pdf
+0 −0
Binary file not shown.
modified
paper/main.pdf
+0 −0
Binary file not shown.
modified
paper/main_anon.pdf
+0 −0
Binary file not shown.
modified
paper/tables/tab_ablation_real.tex
+2 −1
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\scriptsize |
| 3 | 3 | \caption{Real-data ablations at the municipality level: RMSE of monthly changes against the full model (×100) and one-step-ahead standardized innovation diagnostics}\label{tab:ablation_real} |
| 4 | 4 | \begin{threeparttable} |
| 5 | +\resizebox{\textwidth}{!}{% | |
| 5 | 6 | \begin{tabular}{lrrrrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Variant & H: $\Delta$ vs full & H: OOS $z$ & H: \\% in band & C: $\Delta$ vs full & C: OOS $z$ & C: \\% in band & P: $\Delta$ vs full & P: OOS $z$ & P: \\% in band \\ |
@@ -14,7 +15,7 @@ Gaussian innovations & 3.16 & 1.27 & 88 & 1.74 & 1.08 & 92 & 1.92 & 1.24 & 88 \\ | ||
| 14 | 15 | Municipality-level location FE & 3.49 & 1.35 & 87 & 1.55 & 1.11 & 91 & 1.64 & 1.27 & 88 \\ |
| 15 | 16 | No MRC level & 3.66 & 1.34 & 87 & 1.47 & 1.21 & 90 & 1.71 & 1.31 & 87 \\ |
| 16 | 17 | \bottomrule |
| 17 | −\end{tabular} | |
| 18 | +\end{tabular}} | |
| 18 | 19 | \begin{tablenotes}\footnotesize\item OOS $z$ = root mean square of the standardized one-step-ahead prediction error of the cell's monthly mean deviation (1 if calibrated); \% in band = share of innovations inside $\pm 1.96$.\end{tablenotes} |
| 19 | 20 | \end{threeparttable} |
| 20 | 21 | \end{table} |
modified
paper/tables/tab_aggregation.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\footnotesize |
| 3 | 3 | \caption{Provincial aggregation: stock-weighted, transaction-weighted and equal-weighted bottom-up aggregates of municipal indices versus the direct provincial path (log ×100, January 2021 to September 2026)}\label{tab:aggregation} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Class & Weights & Municipalities & Bottom-up total change & Direct total change & RMSE vs direct & Max gap \\ |
modified
paper/tables/tab_benchmarks_province.tex
+2 −1
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\footnotesize |
| 3 | 3 | \caption{Province-level benchmark indices, January 2021 to September 2026: cumulative log change (×100) and standard deviation of monthly log changes (×100)}\label{tab:bench_prov} |
| 4 | 4 | \begin{threeparttable} |
| 5 | +\resizebox{\textwidth}{!}{% | |
| 5 | 6 | \begin{tabular}{lrrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Method & H: total & H: s.d. $\Delta$ & C: total & C: s.d. $\Delta$ & P: total & P: s.d. $\Delta$ & sec. \\ |
@@ -31,7 +32,7 @@ QHPI v2.1 architecture & 55.6 & 1.87 & 37.2 & 1.02 & 50.6 & 1.91 & 18 \\ | ||
| 31 | 32 | SHARP stage 1 without time-varying prices & 56.7 & 1.91 & 41.0 & 1.06 & 51.3 & 1.98 & 21 \\ |
| 32 | 33 | SHARP-HPI & 56.9 & 1.91 & 41.5 & 1.04 & 50.9 & 1.97 & 21 \\ |
| 33 | 34 | \bottomrule |
| 34 | −\end{tabular} | |
| 35 | +\end{tabular}} | |
| 35 | 36 | \begin{tablenotes}\footnotesize\item H = houses, C = condominiums, P = plexes. Rolling TD = rolling time dummy; GEKS on bilateral double-imputation Fisher links with movement splice; HMTS = hedonic multilateral time series (Ishaak et al., 2024); QHPI = re-implementation of the QWHPI v2.1 architecture; last column = wall-clock seconds for the house sample on one Apple M-series core.\end{tablenotes} |
| 36 | 37 | \end{threeparttable} |
| 37 | 38 | \end{table} |
modified
paper/tables/tab_benchmarks_region.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\footnotesize |
| 3 | 3 | \caption{Region-level benchmarks (16 administrative regions): mean standard deviation of monthly log changes (×100) and RMSE of 12-month log changes against the Case–Shiller repeat-sales index (×100)}\label{tab:bench_region} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Method & H: s.d. $\Delta$ & H: RMSE vs RS & C: s.d. $\Delta$ & C: RMSE vs RS & P: s.d. $\Delta$ & P: RMSE vs RS \\ |
modified
paper/tables/tab_bootstrap.tex
+2 −1
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\footnotesize |
| 3 | 3 | \caption{Cluster bootstrap (40 draws, resampling fine-location cells) versus model-based standard errors, condominiums (×100)}\label{tab:bootstrap} |
| 4 | 4 | \begin{threeparttable} |
| 5 | +\resizebox{\textwidth}{!}{% | |
| 5 | 6 | \begin{tabular}{lrrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Cell (condominiums) & Sales & Model s.e. level & Bootstrap s.e. level & Ratio & Model s.e. 12-m & Bootstrap s.e. 12-m & Ratio \\ |
@@ -25,7 +26,7 @@ region 04 & 1{,}187 & 2.07 & 3.44 & 1.67 & 2.89 & 4.33 & 1.50 \\ | ||
| 25 | 26 | region 06 & 46{,}957 & 0.98 & 0.91 & 0.93 & 1.37 & 1.12 & 0.81 \\ |
| 26 | 27 | region 17 & 608 & 2.18 & 3.53 & 1.62 & 3.07 & 4.25 & 1.38 \\ |
| 27 | 28 | \bottomrule |
| 28 | −\end{tabular} | |
| 29 | +\end{tabular}} | |
| 29 | 30 | |
| 30 | 31 | \end{threeparttable} |
| 31 | 32 | \end{table} |
modified
paper/tables/tab_completeness.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\small |
| 3 | 3 | \caption{Completeness of the two main characteristics and share of new constructions in the headline sample, by year and class}\label{tab:completeness} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Headline sample (\% of sales) & 2021 & 2022 & 2023 & 2024 & 2025 & 2026 \\ |
modified
paper/tables/tab_completeness_supp.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\small |
| 3 | 3 | \caption{Completeness of characteristics by year of sale, all raw rows (including land, non-residential and unmatched sales)}\label{tab:completeness_supp} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Variable (\% non-missing) & 2021 & 2022 & 2023 & 2024 & 2025 & 2026 \\ |
modified
paper/tables/tab_composition.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\footnotesize |
| 3 | 3 | \caption{Synthetic composition shock (houses): the smallest 40\% of houses are removed from the sample from January 2024; change in the 2023-to-2024 mean log index (×100)}\label{tab:composition} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Region & Method & 2023$\to$2024 change, original & Same, shocked sample & Shock effect \\ |
modified
paper/tables/tab_exclusions.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\small |
| 3 | 3 | \caption{Population definition: exclusion ledger of the Vrai Prix snapshot (769,995 registered sales, 2021-01-04 to 2026-10-07)}\label{tab:exclusions} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Rule (first match, in priority order) & Rows & \% of raw \\ |
modified
paper/tables/tab_external.tex
+2 −1
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\scriptsize |
| 3 | 3 | \caption{Comparison with external indices: change of the annual mean log index from 2021 to 2026 (January--September), log ×100, and correlations of 12-month and 1-month log changes}\label{tab:external} |
| 4 | 4 | \begin{threeparttable} |
| 5 | +\resizebox{\textwidth}{!}{% | |
| 5 | 6 | \begin{tabular}{lrrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | SHARP series & External series & Geography & SHARP 2026 vs 2021 & External 2026 vs 2021 & Gap & Corr. 12-m & Corr. 1-m \\ |
@@ -29,7 +30,7 @@ house (CMM/CMQ) & CREA MLS HPI, Composite NSA & Québec CMA & 47.9 & 44.3 & +3.6 | ||
| 29 | 30 | house (CMM/CMQ) & CREA MLS HPI, Single Family NSA & Québec CMA & 47.9 & 45.5 & +2.4 & 0.56 & -0.09 \\ |
| 30 | 31 | house (CMM/CMQ) & Teranet-NB, NSA (repeat sales) & Québec CMA & 47.9 & 43.7 & +4.3 & 0.63 & 0.54 \\ |
| 31 | 32 | \bottomrule |
| 32 | −\end{tabular} | |
| 33 | +\end{tabular}} | |
| 33 | 34 | \begin{tablenotes}\footnotesize\item Teranet--National Bank: repeat sales on all registry transfers, CMA, all residential types. CREA MLS HPI: benchmark hedonic on brokered resales, CMA / provincial aggregate. SHARP metropolitan series = stock-weighted aggregates of municipal cells inside the Montréal (CMM) and Québec (CMQ) metropolitan communities; all series rebased to 2021 average = 100 before comparison.\end{tablenotes} |
| 34 | 35 | \end{threeparttable} |
| 35 | 36 | \end{table} |
modified
paper/tables/tab_external_rs.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\footnotesize |
| 3 | 3 | \caption{Repeat-sales and median-price changes computed on the Vrai Prix data for the geographies of the external indices (annual means, log ×100)}\label{tab:external_rs} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Sample (this data) & Pairs & Repeat sales 2026 vs 2021 & Median price 2026 vs 2021 \\ |
modified
paper/tables/tab_grades.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\small |
| 3 | 3 | \caption{Distribution of reliability grades across cell-months (percent of cell-months)}\label{tab:grades} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Level / class & A & B & C & D & E & Cell-months \\ |
modified
paper/tables/tab_mc_bias.tex
+2 −1
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\scriptsize |
| 3 | 3 | \caption{Monte Carlo: mean bias of monthly log changes (×100) at the municipality level}\label{tab:mc_bias} |
| 4 | 4 | \begin{threeparttable} |
| 5 | +\resizebox{\textwidth}{!}{% | |
| 5 | 6 | \begin{tabular}{lrrrrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Method & baseline & turning point & flat quality up & rising quality down & drifting hedonics & heavy tails & sparse & no local dynamics & idiosyncratic towns \\ |
@@ -12,7 +13,7 @@ QHPI v2.1 arch. & -0.001 & -0.000 & +0.046 & -0.045 & +0.001 & -0.005 & -0.005 & | ||
| 12 | 13 | SHARP-HPI (smoothed) & +0.003 & +0.003 & +0.052 & -0.043 & +0.004 & -0.005 & +0.004 & +0.002 & -0.005 \\ |
| 13 | 14 | SHARP-HPI (filtered) & +0.001 & +0.001 & +0.050 & -0.045 & +0.002 & -0.012 & +0.008 & +0.001 & +0.005 \\ |
| 14 | 15 | \bottomrule |
| 15 | −\end{tabular} | |
| 16 | +\end{tabular}} | |
| 16 | 17 | |
| 17 | 18 | \end{threeparttable} |
| 18 | 19 | \end{table} |
modified
paper/tables/tab_mc_coverage.tex
+2 −1
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\scriptsize |
| 3 | 3 | \caption{Monte Carlo: empirical coverage (\%) of nominal 95\% intervals for municipal index levels}\label{tab:mc_coverage} |
| 4 | 4 | \begin{threeparttable} |
| 5 | +\resizebox{\textwidth}{!}{% | |
| 5 | 6 | \begin{tabular}{lrrrrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Method & baseline & turning point & flat quality up & rising quality down & drifting hedonics & heavy tails & sparse & no local dynamics & idiosyncratic towns \\ |
@@ -14,7 +15,7 @@ SHARP: no EB pooling of $\tau^2$ & 97 & 97 & 96 & 96 & 98 & 91 & 98 & 99 & 93 \\ | ||
| 14 | 15 | SHARP: local linear trend & 97 & 97 & 96 & 96 & 97 & 90 & 97 & 98 & 93 \\ |
| 15 | 16 | SHARP: Gaussian & 98 & 98 & 97 & 97 & 98 & 92 & 98 & 98 & 97 \\ |
| 16 | 17 | \bottomrule |
| 17 | −\end{tabular} | |
| 18 | +\end{tabular}} | |
| 18 | 19 | |
| 19 | 20 | \end{threeparttable} |
| 20 | 21 | \end{table} |
modified
paper/tables/tab_mc_design.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\footnotesize |
| 3 | 3 | \caption{Monte Carlo scenarios (60 months, 4 regions × 3 MRCs × 5 municipalities, log-normal municipality sizes)}\label{tab:mc_design} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Scenario & Drift (\\%/m) & $\tau$ prov/reg/MRC/mun (\\%) & Quality trend (\\%/m) & $\beta\_{fa}$ drift & $t$ d.f. / contamination & Sales scale \\ |
modified
paper/tables/tab_mc_lag.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\small |
| 3 | 3 | \caption{Monte Carlo: timing diagnostics at the municipality level}\label{tab:mc_lag} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Scenario & Reps & SHARP lag (months) & SHARP revision RMSE & QHPI lag & sec./rep \\ |
modified
paper/tables/tab_mc_rmse_municipality.tex
+2 −2
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\scriptsize |
| 3 | 3 | \caption{Monte Carlo: RMSE of monthly log changes (×100) at the municipality level, by scenario (Monte Carlo standard error in parentheses)}\label{tab:mc_rmse_municipality} |
| 4 | 4 | \begin{threeparttable} |
| 5 | +\resizebox{\textwidth}{!}{% | |
| 5 | 6 | \begin{tabular}{lrrrrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Method & baseline & turning point & flat quality up & rising quality down & drifting hedonics & heavy tails & sparse & no local dynamics & idiosyncratic towns \\ |
@@ -19,9 +20,8 @@ SHARP: fixed quality prices & 1.58 (0.02) & 1.58 (0.02) & 1.58 (0.02) & 1.58 (0. | ||
| 19 | 20 | SHARP: local linear trend & 1.61 (0.02) & 1.61 (0.02) & 1.61 (0.02) & 1.61 (0.02) & 1.65 (0.02) & 4.95 (0.08) & 2.45 (0.04) & 1.40 (0.02) & 2.51 (0.02) \\ |
| 20 | 21 | SHARP: Gaussian & 2.25 (0.04) & 2.25 (0.04) & 2.24 (0.04) & 2.23 (0.04) & 2.29 (0.04) & 6.77 (0.09) & 3.21 (0.05) & 2.13 (0.04) & 2.84 (0.03) \\ |
| 21 | 22 | SHARP: municipality-level location FE & 2.05 (0.04) & 2.05 (0.04) & 2.05 (0.04) & 2.05 (0.04) & 2.08 (0.04) & 2.84 (0.06) & 3.30 (0.08) & 1.88 (0.04) & 2.81 (0.03) \\ |
| 22 | −SHARP: stock-weighted bottom-up & — & — & — & — & — & — & — & — & — \\ | |
| 23 | 23 | \bottomrule |
| 24 | −\end{tabular} | |
| 24 | +\end{tabular}} | |
| 25 | 25 | \begin{tablenotes}\footnotesize\item Averages over cells and replications; see Table~\ref{tab:mc_design} for the scenarios. Lower is better; the final two scenarios are the deliberate counter-examples.\end{tablenotes} |
| 26 | 26 | \end{threeparttable} |
| 27 | 27 | \end{table} |
modified
paper/tables/tab_mc_rmse_province.tex
+2 −2
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\scriptsize |
| 3 | 3 | \caption{Monte Carlo: RMSE of monthly log changes (×100) at the province level, by scenario (Monte Carlo standard error in parentheses)}\label{tab:mc_rmse_province} |
| 4 | 4 | \begin{threeparttable} |
| 5 | +\resizebox{\textwidth}{!}{% | |
| 5 | 6 | \begin{tabular}{lrrrrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Method & baseline & turning point & flat quality up & rising quality down & drifting hedonics & heavy tails & sparse & no local dynamics & idiosyncratic towns \\ |
@@ -13,7 +14,6 @@ Rolling TD 13 m & 1.39 (0.03) & 1.39 (0.03) & 1.40 (0.03) & 1.39 (0.03) & 1.44 ( | ||
| 13 | 14 | Repeat sales & 5.32 (0.10) & 5.32 (0.10) & 5.33 (0.10) & 5.33 (0.10) & 5.37 (0.10) & 7.42 (0.17) & 9.57 (0.21) & 5.28 (0.10) & 5.66 (0.13) \\ |
| 14 | 15 | QHPI v2.1 arch. & 1.39 (0.03) & 1.39 (0.03) & 1.40 (0.03) & 1.39 (0.03) & 1.44 (0.03) & 1.41 (0.03) & 2.36 (0.05) & 1.39 (0.03) & 1.44 (0.03) \\ |
| 15 | 16 | SHARP-HPI (smoothed) & 1.25 (0.02) & 1.25 (0.02) & 1.25 (0.02) & 1.25 (0.03) & 1.29 (0.03) & 1.26 (0.02) & 2.14 (0.04) & 1.22 (0.02) & 1.37 (0.03) \\ |
| 16 | −SHARP-HPI (filtered) & — & — & — & — & — & — & — & — & — \\ | |
| 17 | 17 | SHARP: no EB pooling of $\tau^2$ & 1.25 (0.02) & 1.25 (0.02) & 1.25 (0.02) & 1.25 (0.03) & 1.29 (0.03) & 1.26 (0.02) & 2.14 (0.04) & 1.22 (0.02) & 1.37 (0.03) \\ |
| 18 | 18 | SHARP: fixed quality prices & 1.25 (0.02) & 1.25 (0.02) & 1.26 (0.02) & 1.25 (0.03) & 1.29 (0.03) & 1.26 (0.02) & 2.13 (0.04) & 1.22 (0.02) & 1.37 (0.03) \\ |
| 19 | 19 | SHARP: local linear trend & 1.25 (0.02) & 1.25 (0.02) & 1.25 (0.02) & 1.25 (0.03) & 1.29 (0.03) & 1.26 (0.02) & 2.14 (0.04) & 1.22 (0.02) & 1.37 (0.03) \\ |
@@ -21,7 +21,7 @@ SHARP: Gaussian & 1.59 (0.03) & 1.59 (0.03) & 1.59 (0.03) & 1.59 (0.03) & 1.63 ( | ||
| 21 | 21 | SHARP: municipality-level location FE & 1.88 (0.04) & 1.88 (0.04) & 1.88 (0.04) & 1.88 (0.04) & 1.92 (0.05) & 1.96 (0.05) & 3.18 (0.09) & 1.87 (0.04) & 1.96 (0.05) \\ |
| 22 | 22 | SHARP: stock-weighted bottom-up & 1.26 (0.02) & 1.26 (0.02) & 1.27 (0.02) & 1.26 (0.03) & 1.31 (0.03) & 1.75 (0.04) & 2.15 (0.04) & 1.23 (0.02) & 1.40 (0.03) \\ |
| 23 | 23 | \bottomrule |
| 24 | −\end{tabular} | |
| 24 | +\end{tabular}} | |
| 25 | 25 | \begin{tablenotes}\footnotesize\item Averages over cells and replications; see Table~\ref{tab:mc_design} for the scenarios. Lower is better; the final two scenarios are the deliberate counter-examples.\end{tablenotes} |
| 26 | 26 | \end{threeparttable} |
| 27 | 27 | \end{table} |
modified
paper/tables/tab_mc_rmse_region.tex
+2 −2
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\scriptsize |
| 3 | 3 | \caption{Monte Carlo: RMSE of monthly log changes (×100) at the region level, by scenario (Monte Carlo standard error in parentheses)}\label{tab:mc_rmse_region} |
| 4 | 4 | \begin{threeparttable} |
| 5 | +\resizebox{\textwidth}{!}{% | |
| 5 | 6 | \begin{tabular}{lrrrrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Method & baseline & turning point & flat quality up & rising quality down & drifting hedonics & heavy tails & sparse & no local dynamics & idiosyncratic towns \\ |
@@ -19,9 +20,8 @@ SHARP: fixed quality prices & 1.40 (0.02) & 1.40 (0.02) & 1.41 (0.02) & 1.40 (0. | ||
| 19 | 20 | SHARP: local linear trend & 1.39 (0.02) & 1.39 (0.02) & 1.40 (0.02) & 1.39 (0.02) & 1.43 (0.02) & 2.34 (0.06) & 2.23 (0.04) & 1.23 (0.02) & 1.57 (0.03) \\ |
| 20 | 21 | SHARP: Gaussian & 1.70 (0.03) & 1.70 (0.03) & 1.70 (0.03) & 1.70 (0.03) & 1.74 (0.03) & 2.72 (0.07) & 2.70 (0.05) & 1.58 (0.03) & 1.84 (0.03) \\ |
| 21 | 22 | SHARP: municipality-level location FE & 1.97 (0.04) & 1.97 (0.04) & 1.97 (0.04) & 1.97 (0.04) & 2.01 (0.04) & 2.18 (0.06) & 3.24 (0.08) & 1.87 (0.04) & 2.11 (0.04) \\ |
| 22 | −SHARP: stock-weighted bottom-up & — & — & — & — & — & — & — & — & — \\ | |
| 23 | 23 | \bottomrule |
| 24 | −\end{tabular} | |
| 24 | +\end{tabular}} | |
| 25 | 25 | \begin{tablenotes}\footnotesize\item Averages over cells and replications; see Table~\ref{tab:mc_design} for the scenarios. Lower is better; the final two scenarios are the deliberate counter-examples.\end{tablenotes} |
| 26 | 26 | \end{threeparttable} |
| 27 | 27 | \end{table} |
modified
paper/tables/tab_moran.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\footnotesize |
| 3 | 3 | \caption{Residual spatial autocorrelation of stage-1 residuals (June of each year)}\label{tab:moran} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Class / scope & Months tested & Mean Moran's $I$ (10-NN) & Mean $z$ & \% months significant \\ |
modified
paper/tables/tab_mun_bands.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\small |
| 3 | 3 | \caption{Municipalities by number of roll-matched sales, 2021–2026}\label{tab:mun_bands} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Sales 2021–2026 & Municipalities & Sales \\ |
modified
paper/tables/tab_placebo.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\footnotesize |
| 3 | 3 | \caption{Placebo: sale months permuted within municipality (three replications); estimated deviations should be flat}\label{tab:placebo} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Class / level & Cells & s.d. of deviation ($\times$100) & Median max $|$12-m change$|$ ($\times$100) & \% of 12-m changes outside 95\\% band & Median $\tau$ ($\times$100) \\ |
modified
paper/tables/tab_policies.tex
+2 −1
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\small |
| 3 | 3 | \caption{Provincial monthly change (×100): first and third release versus final}\label{tab:policies} |
| 4 | 4 | \begin{threeparttable} |
| 5 | +\resizebox{\textwidth}{!}{% | |
| 5 | 6 | \begin{tabular}{lrrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Class & Months & MAE first release & Bias first release & MAE third release & RMSE first & RMSE third & Mean $|\Delta|$ \\ |
@@ -10,7 +11,7 @@ condo & 52 & 0.16 & +0.013 & 0.15 & 0.21 & 0.20 & 0.77 \\ | ||
| 10 | 11 | house & 52 & 0.16 & -0.013 & 0.16 & 0.20 & 0.20 & 1.50 \\ |
| 11 | 12 | plex & 52 & 0.26 & -0.014 & 0.26 & 0.35 & 0.35 & 1.53 \\ |
| 12 | 13 | \bottomrule |
| 13 | −\end{tabular} | |
| 14 | +\end{tabular}} | |
| 14 | 15 | \begin{tablenotes}\footnotesize\item Full re-estimation policy (smoothed at each vintage). A revision-limited policy freezes the value at the third release; the frozen-first-release (movement-splice) policy is in Table~\ref{tab:revisions_frozen}.\end{tablenotes} |
| 15 | 16 | \end{threeparttable} |
| 16 | 17 | \end{table} |
modified
paper/tables/tab_priors.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\small |
| 3 | 3 | \caption{Empirical-Bayes priors for the innovation standard deviation of cell deviations}\label{tab:priors} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Class / level & Prior median $\tau$ (\\% per month) & Prior variance of $\log\tau^2$ \\ |
modified
paper/tables/tab_repeat_sales.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\footnotesize |
| 3 | 3 | \caption{Agreement between SHARP-HPI and Case–Shiller repeat-sales indices estimated on the same cells (cells with at least 300 pairs)}\label{tab:repeat_sales} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Level / class & Cells & Pairs & Corr. levels (median) & Corr. 12-m changes (median) & RMSE levels (median, $\times$100) & RS $-$ SHARP total change (median, $\times$100) \\ |
modified
paper/tables/tab_revisions.tex
+2 −1
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\footnotesize |
| 3 | 3 | \caption{Real-time vintages: mean absolute revision of the monthly log change (×100) between the $k$-th release and the final retrospective estimate}\label{tab:revisions} |
| 4 | 4 | \begin{threeparttable} |
| 5 | +\resizebox{\textwidth}{!}{% | |
| 5 | 6 | \begin{tabular}{lrrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Class / level & Rel. 1 & Rel. 2 & Rel. 3 & Rel. 6 & Rel. 12 & 12-m change, rel. 1 & \% $|$rev$|>1$ pt \\ |
@@ -16,7 +17,7 @@ plex / province & 0.26 & 0.25 & 0.26 & 0.27 & 0.24 & 0.35 & 0 \\ | ||
| 16 | 17 | plex / region & 0.76 & 0.64 & 0.59 & 0.57 & 0.61 & 1.55 & 26 \\ |
| 17 | 18 | plex / municipality & 1.58 & 1.42 & 1.35 & 1.29 & 1.27 & 3.95 & 48 \\ |
| 18 | 19 | \bottomrule |
| 19 | −\end{tabular} | |
| 20 | +\end{tabular}} | |
| 20 | 21 | \begin{tablenotes}\footnotesize\item Releases simulated monthly from July 2022 to October 2026 with a 10-day publication delay; municipalities with at least 1,500 sales. Final = smoothed full-sample panel.\end{tablenotes} |
| 21 | 22 | \end{threeparttable} |
| 22 | 23 | \end{table} |
modified
paper/tables/tab_revisions_frozen.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\footnotesize |
| 3 | 3 | \caption{Frozen-first-release (one-sided filtered) policy: mean absolute gap of the monthly log change (×100) between the real-time value and the final smoothed estimate}\label{tab:revisions_frozen} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Class / level & Rel. 1 vs final & Rel. 12 vs final & 12-m change, rel. 1 & Rel. 1 vs last real-time \\ |
modified
paper/tables/tab_sample_by_year.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\small |
| 3 | 3 | \caption{Headline estimation sample by year and property class}\label{tab:sample_by_year} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Year & Houses & Condominiums & Plexes & Total \\ |
modified
paper/tables/tab_stage1.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\small |
| 3 | 3 | \caption{Stage-1 robust hedonic regressions (selected coefficients; dependent variable log price)}\label{tab:stage1} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Regressor & Houses & Condominiums & Plexes \\ |
modified
paper/tables/tab_top_municipalities.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\footnotesize |
| 3 | 3 | \caption{SHARP-HPI, September 2026 (2021 average = 100), twelve largest municipalities by sales: index [95\% interval] grade}\label{tab:top_mun} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Municipality & Houses & Condominiums & Plexes \\ |
modified
paper/tables/tab_trimming.tex
+1 −0
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\footnotesize |
| 3 | 3 | \caption{Sensitivity of the provincial time-dummy path to the sample screens (log ×100)}\label{tab:trimming} |
| 4 | 4 | \begin{threeparttable} |
| 5 | + | |
| 5 | 6 | \begin{tabular}{lrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Class & Sample & Sales & Total change (Huber) & Total change (OLS) & RMSE monthly vs headline & Max level gap \\ |
modified
paper/tables/tab_vintages.tex
+2 −1
@@ -2,6 +2,7 @@ | ||
| 2 | 2 | \centering\small |
| 3 | 3 | \caption{Earlier extractions of the transaction table compared with the final snapshot (publication lag audit)}\label{tab:vintages} |
| 4 | 4 | \begin{threeparttable} |
| 5 | +\resizebox{\textwidth}{!}{% | |
| 5 | 6 | \begin{tabular}{lrrrrrrr} |
| 6 | 7 | \toprule |
| 7 | 8 | Extraction & Rows & Last date & Lag (days) & Final rows $\le$ last date & Share present & Deleted & Price revised \\ |
@@ -11,7 +12,7 @@ Extraction & Rows & Last date & Lag (days) & Final rows $\le$ last date & Share | ||
| 11 | 12 | 2026-10-10 & 766{,}596 & 2026-09-29 & 11 & 766{,}682 & 99.99\\% & 0 & 0 \\ |
| 12 | 13 | 2026-10-17 & 769{,}333 & 2026-10-06 & 11 & 769{,}678 & 99.96\\% & 0 & 0 \\ |
| 13 | 14 | \bottomrule |
| 14 | −\end{tabular} | |
| 15 | +\end{tabular}} | |
| 15 | 16 | |
| 16 | 17 | \end{threeparttable} |
| 17 | 18 | \end{table} |
modified
scripts/61_tables.py
+7 −2
@@ -37,9 +37,11 @@ def esc(s) -> str: | ||
| 37 | 37 | return str(s).replace("&", "\\&").replace("%", "\\%").replace("_", "\\_").replace("−", "$-$").replace("→", "$\\to$").replace("#", "\\#").replace("≤", "$\\le$").replace("≥", "$\\ge$").replace("×", "$\\times$") |
| 38 | 38 | |
| 39 | 39 | |
| 40 | −def table(name: str, header: list[str], rows: list[list], caption: str, label: str, align: str | None = None, notes: str = "", size: str = "\\small", longtable: bool = False) -> None: | |
| 40 | +def table(name: str, header: list[str], rows: list[list], caption: str, label: str, align: str | None = None, notes: str = "", size: str = "\\small", longtable: bool = False, fit: bool | None = None) -> None: | |
| 41 | 41 | align = align or "l" + "r" * (len(header) - 1) |
| 42 | 42 | body = "\n".join(" & ".join(esc(c) for c in r) + " \\\\" for r in rows) |
| 43 | + fit = (len(header) > 7) if fit is None else fit | |
| 44 | + open_fit, close_fit = ("\\resizebox{\\textwidth}{!}{%", "}") if fit else ("", "") | |
| 43 | 45 | if longtable: |
| 44 | 46 | tex = f"""{{{size} |
| 45 | 47 | \\begin{{longtable}}{{{align}}} |
@@ -64,13 +66,14 @@ def table(name: str, header: list[str], rows: list[list], caption: str, label: s | ||
| 64 | 66 | \\centering{size} |
| 65 | 67 | \\caption{{{caption}}}\\label{{{label}}} |
| 66 | 68 | \\begin{{threeparttable}} |
| 69 | +{open_fit} | |
| 67 | 70 | \\begin{{tabular}}{{{align}}} |
| 68 | 71 | \\toprule |
| 69 | 72 | {' & '.join(esc(h) for h in header)} \\\\ |
| 70 | 73 | \\midrule |
| 71 | 74 | {body} |
| 72 | 75 | \\bottomrule |
| 73 | −\\end{{tabular}} | |
| 76 | +\\end{{tabular}}{close_fit} | |
| 74 | 77 | {('\\begin{tablenotes}\\footnotesize\\item ' + notes + '\\end{tablenotes}') if notes else ''} |
| 75 | 78 | \\end{{threeparttable}} |
| 76 | 79 | \\end{{table}} |
@@ -283,6 +286,8 @@ def t_simulation(): | ||
| 283 | 286 | if x.height: |
| 284 | 287 | macro(f"MC{lvl}{m}{sc}Rmse", 100 * x["rmse_ret"][0] if x["rmse_ret"][0] is not None else None, "{:.2f}"); macro(f"MC{lvl}{m}{sc}Cov", 100 * x["cov95"][0] if x["cov95"][0] is not None else None, "{:.0f}"); macro(f"MC{lvl}{m}{sc}Bias", 100 * x["bias_ret"][0] if x["bias_ret"][0] is not None else None, "{:.3f}") |
| 285 | 288 | macro(f"MC{lvl}{m}{sc}Share", 100 * x["share_est"][0] if x["share_est"][0] is not None else None, "{:.0f}"); macro(f"MC{lvl}{m}{sc}Lag", x["lag_xcorr"][0], "{:+.2f}"); macro(f"MC{lvl}{m}{sc}Rev", 100 * x["revision_rmse"][0] if x["revision_rmse"][0] is not None else None, "{:.2f}") |
| 289 | + if all(c == "—" for c in r[1:]): | |
| 290 | + continue | |
| 286 | 291 | rows.append(r) |
| 287 | 292 | table(f"tab_mc_rmse_{lvl}", ["Method"] + [s.replace("_", " ") for s in scen], rows, f"Monte Carlo: RMSE of monthly log changes (×100) at the {lvl} level, by scenario (Monte Carlo standard error in parentheses)", f"tab:mc_rmse_{lvl}", size="\\scriptsize", longtable=False, |
| 288 | 293 | notes="Averages over cells and replications; see Table~\\ref{tab:mc_design} for the scenarios. Lower is better; the final two scenarios are the deliberate counter-examples.") |
| 289 | 294 | |