BN 48 · PH 8 · PN 0. PN’s collapse released nearly a quarter-million 2022 votes — the flow patterns are most consistent with BN inheriting the bulk of them — while a +15pp turnout surge, disproportionately non-Malay, lifted every seat and changed almost none. Eight analyses on the official SPR per-candidate returns, the July roll, and 163 scored predictions.
Every one of 56 seats rose, from +9.0pp (Paloh) to +20.0pp (Puteri Wangsa). Ecological estimates put the surge at Malay +10.8pp, Chinese +17.0pp, Indian & other +30.5pp — the wave was disproportionately non-Malay and urban-south. BN’s landslide happened despite the turnout composition, not because of it.
Two specifications, one estimator. The unpenalised WLS shown below ("Model A": Malay 77.3 / Chinese 61.7 / Indian+other 57.1) and the repo build’s ridge-penalised fit ("Model B", λ = 2.7×10&sup5;: 73.8 / 59.4 / 50–53, conditional bootstrap CIs of ±1–2pp) are the same estimator at different penalty choices — two specifications of one family, not independent methods, so their agreement is weaker evidence than cross-method agreement would be. Model B’s unpenalised (λ = 0) run plateaus at Model A’s estimates but reports converged:false — a near-equivalent solution that stops short of the convergence threshold, not an independent validation. The level is specification-dependent; the ordering and direction (Malay highest; surge non-Malay-tilted) hold across the whole λ path, and no single headline specification is selected. Bootstrap intervals here are conditional-on-specification — they do not include this model-choice uncertainty, which is the larger of the two.
The strongest relationship in the dataset: PH’s 2026 share is almost a pure function of Chinese composition (slope 0.915, R² 0.95). The election-in-one-number is the Malay swing: +22.4pp to BN, absorbing PN’s −20.1pp Malay collapse. The Chinese drift to BN (+6.9pp) is weak and lives in BN-incumbent small towns, not the metro.
Age composition predicts nothing about 2026 vote levels (R² ≤ 0.01). The celebrated “young seats swung PH” slope (+0.84) is an artifact of two ex-MUDA seats (N41, N50) where PH had no 2022 baseline; corrected, it is −0.05. What survives: young seats abandoned PN hardest.
| Swing 2022→2026 | to BN | to PH | to PN |
|---|---|---|---|
| Malay | +22.4 [18.5, 26.3] | +5.0 (n.s.) | −20.1 [−25.4, −14.8] |
| Chinese | +6.9 [0.5, 13.4] | +7.4 (n.s.) | — |
| Indian | unidentified — 7% of roll, max 18.7% in any seat; refuse headline claims | ||
PN: 334,457 votes (24.0%) → 102,090 (5.45%). It retained 47.7% of its own base where it stood and forfeited deposits in 21 of 33 seats. The regressions are consistent with the released vote flowing to BN at slope 0.66 where PN contested and 0.86 where it was absent; the model finds no net flow to PH (slope ≈ 0, CI includes 0). Raw accounting agrees: in the 23 PN-absent seats, BN’s vote gain equals 0.889 of the prior PN reservoir. Model-consistent range: 187,000–232,000 of BN’s added votes came from reservoirs that previously backed PN — 36–45% of BN’s +518,806 gain (central ~220,000 ≈ 42%), ~11.7pp of the 2026 valid vote. Aggregate data cannot directly separate individual PN→BN transfer from turnout, new-voter and candidate effects; this is a model-consistent attribution, not a measured transition.
Simulator lever, measured: pnToBn ≈ 0.85–1.0 where PN is absent (near-total inheritance, ~zero abstention); net ≈ 0.35–0.47 of the full 2022 PN base where PN stands. Nomination day — counting the seats PN skips — is the single highest-value NS input.
28,816 votes across 15 seats (3.39% there), zero deposits saved, best 5.45% (Larkin). Central estimate: ~4.3% of PH’s 2022 vote leaked to BERSAMA (upper bound 14.4%); the regression drag on PH (−1.5pp) is indistinguishable from zero. But the two closest PH losses are exactly where it mattered: at 100% vote-return PH takes N46 Perling and N51 Bukit Batu (BN 46 / PH 10 ceiling); at the central ~45% transfer, only N51 flips. Counterfactual rule: add BERSAMA’s recorded votes to PH seat-by-seat, hold everything else fixed, recount winners. An alternative accounting diagnostic (BERSAMA votes as a share of PH’s prior-vote at current turnout) reads 11.1% — a ceiling-style ratio, not a transfer estimate.
Winner and winning margin, official 2026. Median margin doubled (18.3pp → 35.5pp); BN won 33 seats by ≥30pp. PH’s eight survivals are the Chinese-majority urban core plus Simpang Jeram by 170 votes.
Inverse-fitting the engine’s 13 knobs to the official result (~28,500 evaluations): gw = 0 (no GE15 reversion — the pre-election fear pointed the wrong way), statewide swing railed at the UI clamp (BN +15 / PN −15; reality was +16.9 / −18.0), pnToBn railed at 0.75 (wants ~0.80), mb = 1, bp ≈ 0, turnout ~70%. Best expressible fit: 55/56 winners, share MAE 3.18pp — against the published base case’s 8 wrong winners and 9.96pp. The one irreducible miss is N41 Puteri Wangsa: MUDA won it in 2022, so PH’s baseline there is zero — a bloc discontinuity no knob reaches.
Recalibrations adopted for NS: SWING_MAX ±15 → ±25pp · turnout anchor 49% → ~70% · pnToBn ceiling to 1.0 · proportional (not additive) collapse mode · per-seat pins for baseline-discontinuity seats · drop age-tilt turnout priors (unidentified even ex-post).
163 scored entries. 62% called BN two-thirds; mean prediction BN 36.6 vs actual 48; only 2 of 163 reached BN ≥48. The consensus map scored 48/56 with all 8 misses in BN’s favour. Humans and the model failed on the same seats — PN-inertia holds and PH-incumbency flips. The field is well-calibrated up to 65 confidence and systematically overconfident above it: the 86–100 bucket (71% of all picks) stated 98.0, realized 84.1.
Sources: SPR dashboard official feeds · pilihanraya.my predictions table (163 scored) · prn engine inverse-fit (~28.5k evaluations). Analysis: jin + 8-agent team, 12 Jul 2026.