2022 Midterm Simulation Model
Background and disclaimer
This project consists of a very basic election simulation model written in python.
I'm an amateur data analyst, amateur political scientist, and amateur computer scientist and I have absolutely no expertise whatsoever, so don't bet all your money on my model.
Current predictions (updated 10/30)
House of Representatives
Republicans win 75 in 100.
Median outcome: 208D—227R
Republicans win 60 in 100.
Median outcome: 49D—51R
Simulates each of 435 seats in the House and each of 35 Class III seats in the Senate.
districtPVI + (baseNEnv ± hAdj ± eAdj ± errorAdj) ± incumbencyAdv + swingAdj = election result
The district PVI (
districtPVI) is sourced from the Cook Political Report.
In the Senate, individual race polls are also taken into account.
The base national environment (
baseNEnv) is from FiveThirtyEight's generic ballot polling average. A fourth-order polynomial line of best fit with a high Pearson correlation coefficient (
r2=0.861) is used to extrapolate the national environment on Election Day.
The historical adjustment (
hAdj) is based on inaccuracies from 2018 polling compared to the final results.
The enthusiasm adjustment (
eAdj) is equivalent to a randomly selected number in a range between half of the margin in each party's best voter enthusiasm poll during the previous five months.
The error adjustment (
errorAdj) assumes that the base national environment could vary by up to 50% in either direction.
The incumbency advantage (
incumbencyAdv) is based on 2018 data from hundreds of races.
The swing adjustment (
swingAdj) assumes that any given election could swing up to 5 points in either direction. (In Senate races, where race polls are taken into account, it assumes a 1.27-point bias in favor of Republicans.)
Results are simulated 100,000 times and the averages are used.
Saturday, September 24, 2022: Model launched with initial simulations
Sunday, September 25, 2022: Incorporated
swingAdj in House races
Monday, September 26, 2022: Website updated to provide more information
Wednesday, September 28, 2022: Added capability to simulate individual races
Thursday, September 29, 2022: Slightly moved swing polling error adjustment to be R+1.27 instead of R+1.1
Friday, October 7, 2022: Updated model with October data as Election Day approaches in a month (House 64R → 59D, Senate 78D → 87D)
2022 Midterm Elections Model © 2022 by Isaac Barsoum is licensed under CC BY-NC-SA 4.0