A daily archive of who is forecasting the 2026 midterms, what they say, and where they disagree — plus the models we build in class from public data.
Snapshot 2026-08-20 · 2 snapshots collected
Built in PLSC 2219 from public-domain inputs, and published in full because every input is redistributable. These are teaching models: the point is that you can see, and argue with, every choice inside them.
Fit on 20 midterms, 1946–2022: presidential approval, real income growth, and seats held before the election.
Generic ballot D+6.5, shrunk by λ=0.88 to an election-day tide of D+5.7, then carried to states by PVI.
| Holdover D seats | P(D reach 50+) |
|---|---|
| 33 | 23% |
| 34 (used) | 39% |
| 35 | 59% |
No modelling choice in the model matters this much. That is the lesson, not a footnote.
Expected margin is the election-day national tide plus twice the state's partisan lean. Lean is our own reconstruction from official returns, not a licensed index. Nothing here knows who the candidates are — which is exactly why it disagrees with the professionals in states with unusually strong recruits.
| State | Expected margin | P(D) | State lean | |
|---|---|---|---|---|
| MA | D+33.6 | >99% | D+14.0 | |
| DE | D+21.7 | >99% | D+8.0 | |
| RI | D+21.6 | >99% | D+8.0 | |
| OR | D+21.0 | >99% | D+7.7 | |
| IL | D+18.4 | >99% | D+6.3 | |
| CO | D+17.6 | >99% | D+6.0 | |
| NJ | D+14.2 | 98% | D+4.3 | |
| ME | D+13.3 | 98% | D+3.8 | |
| NM | D+13.0 | 98% | D+3.7 | |
| VA | D+12.7 | 97% | D+3.5 | |
| MN | D+10.7 | 95% | D+2.5 | |
| NH | D+9.7 | 93% | D+2.0 | |
| MI | D+5.3 | 79% | R+0.2 | |
| GA | D+4.1 | 73% | R+0.8 | |
| NC | D+2.9 | 67% | R+1.4 | |
| OH | R+4.9 | 23% | R+5.3 | |
| FL | R+5.1 | 22% | R+5.4 | |
| TX | R+6.2 | 17% | R+5.9 | |
| IA | R+6.5 | 16% | R+6.1 | |
| AK | R+7.2 | 14% | R+6.5 | |
| KS | R+10.4 | 6% | R+8.0 | |
| SC | R+10.9 | 5% | R+8.3 | |
| MT | R+14.0 | 2% | R+9.8 | |
| NE | R+14.9 | 1% | R+10.3 | |
| LA | R+15.8 | 1% | R+10.8 | |
| MS | R+15.9 | 1% | R+10.8 | |
| TN | R+22.9 | <1% | R+14.3 | |
| SD | R+23.5 | <1% | R+14.6 | |
| AL | R+23.9 | <1% | R+14.8 | |
| KY | R+24.2 | <1% | R+14.9 | |
| AR | R+24.9 | <1% | R+15.3 | |
| OK | R+29.0 | <1% | R+17.3 | |
| ID | R+30.4 | <1% | R+18.0 | |
| WV | R+36.2 | <1% | R+21.0 | |
| WY | R+40.8 | <1% | R+23.2 |
Every forecaster we are permitted to collect, captured daily and stored as raw bytes before anything is parsed, so a parser fixed in October can be re-run over the whole history.
139 seats on which the raters do not all say the same thing, sorted by how far apart they are. Ratings are transcribed from Wikipedia (CC BY-SA) and are deliberately never averaged: “Lean R” is not a number, and turning it into one is a modelling choice worth arguing about out loud.
| Seat | Spread | Ratings |
|---|---|---|
| OH-07 | 5 | cook: Toss-up · ddhq: Toss-up · fox_power_rankings: Likely R · inside_elections: Lean D · sabato: Toss-up |
| CO-04 | 4 | cook: Solid R · ddhq: Likely R · fox_power_rankings: Likely R · inside_elections: Toss-up · sabato: Likely R |
| FL-14 | 4 | cook: Lean R · ddhq: Lean D · fox_power_rankings: Lean R · inside_elections: Tilt D · sabato: Toss-up |
| NC-11 | 4 | cook: Lean R · ddhq: Lean R · fox_power_rankings: Toss-up · inside_elections: Lean D · sabato: Toss-up |
| CO-08 | 3 | cook: Toss-up · ddhq: Lean D · fox_power_rankings: Lean D · inside_elections: Likely D · sabato: Toss-up |
| MI-10 | 3 | cook: Lean R · ddhq: Toss-up · fox_power_rankings: Toss-up · inside_elections: Tilt D · sabato: Toss-up |
| NC-01 | 3 | cook: Lean R · ddhq: Toss-up · fox_power_rankings: Toss-up · inside_elections: Tilt D · sabato: Toss-up |
| TX-34 | 3 | cook: Toss-up · ddhq: Lean D · fox_power_rankings: Toss-up · inside_elections: Likely D · sabato: Toss-up |
| TX-35 | 3 | cook: Likely R · ddhq: Lean R · fox_power_rankings: Lean R · inside_elections: Toss-up · sabato: Lean R |
| VA-01 | 3 | cook: Lean R · ddhq: Likely R · fox_power_rankings: Toss-up · inside_elections: Tilt R · sabato: Lean R |
| WA-03 | 3 | cook: Toss-up · ddhq: Likely D · fox_power_rankings: Lean D · inside_elections: Likely D · sabato: Lean D |
| AL-02 | 2 | cook: Likely R · ddhq: Likely R · fox_power_rankings: Likely R · inside_elections: Tilt R · sabato: Likely R |
| AZ-01 | 2 | cook: Toss-up · ddhq: Lean D · fox_power_rankings: Lean D · inside_elections: Lean D · sabato: Toss-up |
| AZ-06 | 2 | cook: Toss-up · ddhq: Lean D · fox_power_rankings: Lean D · inside_elections: Lean D · sabato: Toss-up |
| CA-13 | 2 | cook: Lean D · ddhq: Likely D · fox_power_rankings: Lean D · inside_elections: Solid D · sabato: Lean D |
| CA-22 | 2 | cook: Toss-up · ddhq: Lean D · fox_power_rankings: Toss-up · inside_elections: Lean D · sabato: Lean D |
| CA-45 | 2 | cook: Likely D · ddhq: Likely D · fox_power_rankings: Lean D · inside_elections: Solid D · sabato: Lean D |
| CO-05 | 2 | cook: Likely R · ddhq: Likely R · fox_power_rankings: Likely R · inside_elections: Tilt R · sabato: Likely R |
| FL-07 | 2 | cook: Likely R · ddhq: Likely R · fox_power_rankings: Likely R · inside_elections: Tilt R · sabato: Likely R |
| FL-09 | 2 | cook: Likely R · ddhq: Lean R · fox_power_rankings: Likely R · inside_elections: Tilt R · sabato: Likely R |
| FL-25 | 2 | cook: Toss-up · ddhq: Toss-up · fox_power_rankings: Toss-up · inside_elections: Lean D · sabato: Toss-up |
| IA-01 | 2 | cook: Toss-up · ddhq: Lean D · fox_power_rankings: Toss-up · inside_elections: Lean D · sabato: Toss-up |
| IA-02 | 2 | cook: Lean R · ddhq: Lean R · fox_power_rankings: Lean R · inside_elections: Toss-up · sabato: Lean R |
| IA-03 | 2 | cook: Toss-up · ddhq: Lean D · fox_power_rankings: Toss-up · inside_elections: Lean D · sabato: Toss-up |
| ME-02 | 2 | cook: Likely R · ddhq: Lean R · fox_power_rankings: Lean R · inside_elections: Tilt R · sabato: Likely R |
Showing the 25 widest of 139.
The judgment calls that move the answer most, stated rather than buried.
| Choice | What we did | Why it is arguable |
|---|---|---|
| Generic-ballot shrinkage | λ decays from 1.0 at Election Day toward 0.5 far out; λ=0.88 today | A stylised reading of Bafumi–Erikson–Wlezien, not a re-estimation. We hold no historical generic-ballot series to fit. |
| Race-level uncertainty | σ=6.5 points, regressed from official Senate returns against prior-cycle lean | One cycle, n≈30. Cannot yet separate a national polling miss from state-level noise. |
| Seat baseline | 34 Democratic holdovers | Worth ~20 points of headline probability per seat. See the box above. |
| No bias correction | None applied | Generic-ballot bias is conditional on presidential approval rather than constant, so a fixed adjustment fits the last cycle and calls it a law. |