Missouri Election

Polls close in 2 hours, 29 minutes, 7 pm Central, Nov 3

Evaluation

How a seat-by-seat approach would have done on Missouri’s legislative elections of 2018, 2020, 2022, 2024, using only what was known before each one. These are tests of method on past elections. They are not a record of this forecast, which is scored after the 2026 results are certified.

Source: the rolling-origin backtest, model/backtest/run.py, run Nov 1, 2026 (data/backtest/scores.json).

What was tested

Each of the four elections, 2018, 2020, 2022 and 2024, was forecast for both chambers using only information available before that election: earlier results, the district’s earlier statewide lean where one existed on the same map, and who was on the ballot. Only contested seats with one Democrat and one Republican are scored. The 2016 election is used for training only, and the 2016 Senate District 4 special election is never scored.

Three plain baselines were run in every year (A, B and C below). A fourth, P, reproduces this site’s own approach as closely as the rules allow, and only for 2024: it needs an earlier election on the same district map, and 2022 is the first. P changes or drops what could not be reproduced as of 2024, and so is not the 2026 model itself: the education term (its data was published later), the 2026 national shift (set to zero), the asymmetric incumbency adjustment, the primary-turnout and candidate-quality terms, the MO-2 feedback, and the 2024 composite lean (replaced by the 2020 presidential and governor results).

Which backtest this is

The Methodology page also shows a backtest, from data/forecast/backtest.json, which the hourly pipeline rewrites on every run. That one fits the production model on one election and forecasts the other (2022 and 2024), so the model has already seen data from the pair, and it is a retrospective diagnostic. The test on this page is newer in design and stricter: every statistic for a year uses only earlier elections, and a leakage guard in the code rejects any same-year input. Where the two differ, read this page for how well the method forecasts, and the Methodology table for how well the production model fits the two elections it was built from.

Were the intervals the right width?

For baseline A, the share of contested seats whose certified Democratic two-party share landed inside the model’s 50% interval (open dot) and 90% interval (filled dot). These are observed frequencies among seats, not probabilities of any one race. Dots on the dashed lines mean the intervals were the right width; dots to the right mean they were too wide.

50% target90% targetHouse 2018 (n 117)Senate 2018 (n 16)House 2020 (n 80)Senate 2020 (n 10)House 2022 (n 69)Senate 2022 (n 11)House 2024 (n 110)Senate 2024 (n 14)0%25%50%75%100%

Backtest run Nov 1, 2026, model A, contested seats only (n in each label). Seats in a year share one statewide environment, so they are not independent. The exact figures are in the table below.

Did the probabilities match what happened?

Baseline A’s win probabilities for all 427 contested seats of 2018 to 2024, grouped into ten bins. Across: the average predicted chance a Democrat wins in the bin. Up: the observed frequency, the share of seats in the bin that Democrats won. Bars are the Wilson 80% interval for that frequency. On the diagonal, the probabilities were right on average.

0%0%25%25%50%50%75%75%100%100%Average predicted chance a Democrat winsShare of seats Democrats wonn 207n 33n 25n 17n 48n 11n 15n 9n 19n 43

What it shows. At the ends, the baseline’s confident calls held. In the middle, seats went decisively one way more often than predicted: seats given 30% to 50% for a Democrat were won by Democrats 18% and 17% of the time, and seats given 60% to 70% were won 87% of the time. So even this plain baseline was, if anything, not confident enough in the middle.

What it does not show. This is baseline A, not the published forecast. The pattern sits in 2018 and 2020, on the old district map, and mostly in seats the baseline had no lean or past result for; on the current map (2022 and 2024) its middle seats were close to calibrated. The 2026 model is a different, tighter model whose seat-level error is measured out of sample, so this figure is not evidence that the 2026 chances are too cautious. The 2026 forecast will be added to this test after certification. The full analysis is in the decisions log (D-CAL1).

Calibration of baseline A by probability bin
Predicted chance a Democrat winsSeatsAverage predictedDemocrats wonObserved frequency80% interval
0% to 10%2072%00%0% to 1%
10% to 20%3314%26%3% to 14%
20% to 30%2523%416%9% to 27%
30% to 40%1735%318%9% to 32%
40% to 50%4843%817%11% to 25%
50% to 60%1153%655%36% to 72%
60% to 70%1564%1387%72% to 94%
70% to 80% (few seats)975%9100%85% to 100%
80% to 90%1985%1895%84% to 98%
90% to 100%4399%43100%96% to 100%

From data/backtest/calibration.json (model/backtest, Nov 1, 2026), baseline A, House and Senate pooled; download it on Data. Observed values are frequencies among seats. Bins with fewer than 10 seats are drawn open and should not be read alone. 4 election years; seats within a year share a statewide shift, so seats are not independent and the intervals are optimistic. The 2024 reproduction of this site’s approach is not shown here as a calibration claim: it is one election.

Scores by year, chamber and model

Brier score is the mean squared error of the win probabilities (0 is perfect; lower is better, and only scores for the same seats are comparable). Log loss punishes confident misses harder (probabilities clipped at 0.001). CRPS scores the whole distribution of the vote share (lower is better). Coverage is the observed frequency described above. Seat error is expected minus actual Democratic seats among the seats up (positive means the model gave Democrats too many).

Backtest scores by chamber, year and model
Chamber and yearModelSeatsBrierLog lossCRPS50% cover90% coverSeat error
House 2018A. District lean and incumbency1170.0690.2380.05948%91%+11.1
House 2018B. Last result, pulled toward lean1170.0720.2520.05854%90%+12.2
House 2018C. Uniform swing from last result1170.0690.2380.05948%91%+11.0
House 2020A. District lean and incumbency800.0480.1770.03848%96%+3.3
House 2020B. Last result, pulled toward lean800.0470.1750.03851%96%+3.1
House 2020C. Uniform swing from last result800.0570.2040.04039%96%+4.7
House 2022A. District lean and incumbency690.0740.2480.02293%100%+1.3
House 2022B. Last result, pulled toward lean690.0750.2490.02293%100%+1.3
House 2022C. Uniform swing from last result690.0750.2480.02293%100%+1.2
House 2024A. District lean and incumbency1100.0360.1200.01588%100%−0.1
House 2024B. Last result, pulled toward lean1100.0450.1500.01896%100%+0.7
House 2024C. Uniform swing from last result1100.0330.1120.01694%100%+0.7
House 2024P. This site's approach, reproduced (2024 only)1100.0260.0920.01280%100%−0.7
Senate 2018A. District lean and incumbency160.1020.3370.08650%75%+2.8
Senate 2018B. Last result, pulled toward lean160.1020.3380.08650%75%+2.8
Senate 2018C. Uniform swing from last result160.1020.3370.08650%75%+2.8
Senate 2020A. District lean and incumbency100.2330.6500.11930%60%−1.6
Senate 2020B. Last result, pulled toward lean100.2260.6270.11930%70%−1.6
Senate 2020C. Uniform swing from last result100.2530.7230.11930%60%−1.5
Senate 2022A. District lean and incumbency110.0370.1450.02291%100%+0.8
Senate 2022B. Last result, pulled toward lean110.0370.1460.02291%100%+0.8
Senate 2022C. Uniform swing from last result110.0370.1460.02291%100%+0.8
Senate 2024A. District lean and incumbency140.0170.0890.01393%100%−0.2
Senate 2024B. Last result, pulled toward lean140.0170.0910.01393%100%−0.2
Senate 2024C. Uniform swing from last result140.0230.1050.01486%100%−0.4
Senate 2024P. This site's approach, reproduced (2024 only)140.0250.1140.01393%100%−0.2

From data/backtest/scores.json (Nov 1, 2026). Frequencies are shares of contested seats.

All four elections together

ChamberModelYearsSeatsBrierLog lossCRPS
HouseA. District lean and incumbency2018, 2020, 2022, 20243760.0560.1920.035
HouseB. Last result, pulled toward lean2018, 2020, 2022, 20243760.0590.2050.035
HouseC. Uniform swing from last result2018, 2020, 2022, 20243760.0570.1960.035
HouseP. This site's approach, reproduced (2024 only)20241100.0260.0920.012
SenateA. District lean and incumbency2018, 2020, 2022, 2024510.0900.2890.058
SenateB. Last result, pulled toward lean2018, 2020, 2022, 2024510.0890.2850.058
SenateC. Uniform swing from last result2018, 2020, 2022, 2024510.0960.3080.059
SenateP. This site's approach, reproduced (2024 only)2024140.0250.1140.013

Pooled over contested seats. Model P covers 2024 only, so its row is not comparable with the four-election rows.

What these results do not show

  • Few elections. Four test years are four observations of the statewide environment. No significance is claimed, and the House and Senate share each year’s environment, so they are not independent evidence.
  • Differences among A, B and C are small and inconsistent from year to year.
  • 2022 is entirely declared priors: there was no earlier election on the 2022 map to fit, so its scores say nothing about fitting, and its wide intervals cover nearly everything.
  • Model P is one election, 2024. It had the best Brier score in the 2024 House (0.026, against 0.033 to 0.045 for A, B and C), but in the 2024 Senate it scored 0.025 against 0.017 for A and for B. Its carry-forward weights and error structure were tuned by the author on the 2022 and 2024 data, so that is not evidence of skill in 2026.
  • The Senate has 10 to 16 contested races a year, 51 in all. Its scores are very noisy.
  • Thin inputs on the old map. There is no statewide lean before 2022, so 2018 and 2020 rest on earlier legislative results, which exist only for seats that were contested before. The 2020 lean on the 2022 map was computed in 2026 from 2020 precinct results; the 2022 map was adopted before the 2022 election, so it was knowable, but split-precinct uncertainty is not carried.
  • Uncontested seats are treated as certain, and third-party or write-in outcomes are absent from this data.
  • Calibration rests on 427 seats in four elections. Seats in a year share one statewide shift, so they are not independent and the intervals in the calibration figure are optimistic.

From docs/planning/2026-11-01-accuracy-impl/E-backtest.md, “Honest limits”.

The rule for 2026, written before the vote

Scored after certification: Brier score and log loss over contested seats, seats called correctly, calibration by probability bin, and whether the chamber seat counts fall inside the 10th-90th percentile range. Compared against State Navigate (Nov 2), On Point Politics (Nov 1) and a lean-only baseline.

From the forecast file’s scoring field. The forecast is re-run every hour. The version published before polls close is saved under the git tag preclose-2026 and is the one scored. The scorecard fills in after certification. Every decision behind the model is on Decisions.