Compare commits

..

2 Commits

Author SHA1 Message Date
3c4d6ba372 factor out nominee names; rerun 2024-04-14 21:46:58 -04:00
cbda7b1e5c move glue code function to the end 2024-04-14 21:42:38 -04:00
3 changed files with 1106 additions and 1906 deletions

568
main.go
View File

@ -34,9 +34,285 @@ type Poll struct {
/* Globals */
var r = rand.New(rand.NewPCG(uint64(100), uint64(2224)))
var dev = false
var dem_nominee_name = "Biden"
var rep_nominee_name = "Trump"
/* Sampling helper functions */
func getNormalCDF(x float64, mean float64, std float64) float64 {
erf_term := (x - mean) / (std * math.Sqrt2)
return (1 + math.Erf(erf_term)) / 2
}
func getProbabilityAboveX(x float64, mean float64, std float64) float64 {
return 1 - getNormalCDF(x, mean, std)
}
func getChanceCandidateWinsFromPollShare(candidate_p float64, poll_sample_size float64) float64 {
std := math.Sqrt(candidate_p * (1 - candidate_p) / poll_sample_size) // https://stats.stackexchange.com/questions/258879/how-to-interpret-margin-of-error-in-a-non-binary-poll
return getProbabilityAboveX(0.5, candidate_p, std)
}
func getChanceRepublicanWinFromPoll(poll Poll, pretty_print bool) float64 {
biden_percentage, biden_exists := poll.PollResults[dem_nominee_name]
trump_percentage, trump_exists := poll.PollResults[rep_nominee_name]
if !biden_exists || !trump_exists {
panic("PollResults of poll filtered to have Biden/Trump doesn't have Biden/Trump")
}
biden_share := biden_percentage / 100.0 // will panic if the item is not found, but we've previously filtered for it
trump_share := trump_percentage / 100.0
normalized_trump_share := trump_share / (trump_share + biden_share)
normalized_biden_share := biden_share / (trump_share + biden_share)
joint_trump_biden_sample_size := (biden_share + trump_share) * float64(poll.SampleSize)
std_error_poll_mean := math.Sqrt((normalized_trump_share * normalized_biden_share) / joint_trump_biden_sample_size)
p_republican_win := getProbabilityAboveX(0.5, normalized_trump_share, std_error_poll_mean)
if pretty_print {
fmt.Printf("\n\t\tSample size: %f", joint_trump_biden_sample_size)
fmt.Printf("\n\t\tMean R: %f", 100.0*normalized_trump_share)
fmt.Printf("\n\t\tStd of mean R: %f", 100*std_error_poll_mean)
fmt.Printf("\n\t\tPoll says chance of R win: %f", p_republican_win)
}
return p_republican_win
}
func getChanceRepublicanWinFromPollPlusUncertainty(poll Poll, state State, pretty_print bool) float64 {
// Uncertainty from the state
n_republican_win := 0
for _, party := range state.PresidentialElectoralHistory {
if party == "R" {
n_republican_win++
}
}
// Get the uncertainty from the poll
biden_percentage, biden_exists := poll.PollResults[dem_nominee_name]
trump_percentage, trump_exists := poll.PollResults[rep_nominee_name]
if !biden_exists || !trump_exists {
panic("PollResults of poll filtered to have Biden/Trump doesn't have Biden/Trump")
}
biden_share := biden_percentage / 100.0 // will panic if the item is not found, but we've previously filtered for it
trump_share := trump_percentage / 100.0
normalized_trump_share := trump_share / (trump_share + biden_share)
normalized_biden_share := biden_share / (trump_share + biden_share)
joint_trump_biden_sample_size := (biden_share + trump_share) * float64(poll.SampleSize)
std_error_poll_mean := math.Sqrt((normalized_trump_share * normalized_biden_share) / joint_trump_biden_sample_size)
/* Inject additional uncertainty */
/*
Possible factors:
- National drift between now and the election (biggest one)
- States more uncertain than the national average
- Idiosyncratic factors
- Polls not being as good as gallup
- Increased polarization
Also note that the polls already have some error already
*/
std_additional_uncertainty := 5.0 / 100.0
if n_republican_win == 0 || n_republican_win == 6 {
// if solid states for the last 6 elections
std_additional_uncertainty = std_additional_uncertainty / 3.0
if pretty_print {
fmt.Printf("\n\t\tN republican wins: %d", n_republican_win)
fmt.Printf("\n\t\t=> Reducing additional uncertainty")
}
}
std_error := std_error_poll_mean + std_additional_uncertainty
// std_error := std_error_poll_mean + 0.065
p_republican_win := getProbabilityAboveX(0.5, normalized_trump_share, std_error)
if pretty_print {
fmt.Printf("\n\t\tStd with std_additional_uncertainty R: %f", 100*std_error)
fmt.Printf("\n\t\tPoll plus uncertainty says chance of R win: %f", p_republican_win)
}
return p_republican_win
}
/* Print state by state data */
func printStates(states []State) {
for _, state := range states {
fmt.Printf("\n\nState: %s", state.Name)
fmt.Printf("\n\tVotes: %d", state.Votes)
fmt.Printf("\n\tHistory: %s", state.PresidentialElectoralHistory)
p_baserate_republican_win := 0.0
for _, party := range state.PresidentialElectoralHistory {
if party == "R" {
p_baserate_republican_win++
}
}
fmt.Printf("\n\tHistorical base rate of R win: %f", p_baserate_republican_win/float64(len(state.PresidentialElectoralHistory)))
// Individual poll
for _, poll := range state.Polls {
fmt.Printf("\n\tPoll: %+v", poll)
_ = getChanceRepublicanWinFromPoll(poll, true)
_ = getChanceRepublicanWinFromPollPlusUncertainty(poll, state, true)
}
// Aggregate poll
num_biden_votes := 0.0
num_trump_votes := 0.0
for _, poll := range state.Polls {
biden_percentage, biden_exists := poll.PollResults[dem_nominee_name]
trump_percentage, trump_exists := poll.PollResults[rep_nominee_name]
if !biden_exists || !trump_exists {
panic("PollResults of poll filtered to have Biden/Trump doesn't have Biden/Trump")
}
num_biden_votes += (biden_percentage / 100.0) * float64(poll.SampleSize)
num_trump_votes += (trump_percentage / 100.0) * float64(poll.SampleSize)
}
aggregate_sample_size := num_biden_votes + num_trump_votes
if aggregate_sample_size != 0.0 {
var aggregate_poll = Poll{SampleSize: int(aggregate_sample_size), PollResults: make(map[string]float64)}
aggregate_poll.PollResults[dem_nominee_name] = 100.0 * num_biden_votes / aggregate_sample_size
aggregate_poll.PollResults[rep_nominee_name] = 100.0 * num_trump_votes / aggregate_sample_size
fmt.Printf("\n\tAggregate poll: %+v", aggregate_poll)
_ = getChanceRepublicanWinFromPoll(aggregate_poll, true)
_ = getChanceRepublicanWinFromPollPlusUncertainty(aggregate_poll, state, true)
}
}
}
/* Sample state by state */
func sampleFromState(state State) VotesForEachParty {
switch state.Name {
case "Nebraska":
/*
2000: R
2004: R
2008: Split, 1 D, 4 R
2012: R
2016: R
2020: Split, 1 D, 4 R
*/
p_split := 2.0 / 6.0
if r.Float64() < p_split {
return VotesForEachParty{Democrats: 1, Republicans: 4}
} else {
return VotesForEachParty{Democrats: 0, Republicans: 5}
}
case "Maine":
/*
2000: D
2004: D
2008: D
2012: D
2016: Split: 3 D, 1 R
2020: Split, 3 D, 1 R
*/
p_split := 2.0 / 6.0
if r.Float64() < p_split {
return VotesForEachParty{Democrats: 3, Republicans: 1}
} else {
return VotesForEachParty{Democrats: 1, Republicans: 0}
}
default:
{
/* Consider the base rate for the state */
p_baserate_republican_win := 0.0
for _, party := range state.PresidentialElectoralHistory {
if party == "R" {
p_baserate_republican_win++
}
}
p_baserate_republican_win = p_baserate_republican_win / float64(len(state.PresidentialElectoralHistory))
p_republican_win := p_baserate_republican_win // if no polls
/* Consider polls */
num_biden_votes := 0.0
num_trump_votes := 0.0
for _, poll := range state.Polls {
biden_percentage, biden_exists := poll.PollResults[dem_nominee_name]
trump_percentage, trump_exists := poll.PollResults[rep_nominee_name]
if !biden_exists || !trump_exists {
panic("PollResults of poll filtered to have Biden/Trump doesn't have Biden/Trump")
}
num_biden_votes += (biden_percentage / 100.0) * float64(poll.SampleSize)
num_trump_votes += (trump_percentage / 100.0) * float64(poll.SampleSize)
}
aggregate_sample_size := num_biden_votes + num_trump_votes
if aggregate_sample_size != 0.0 {
var aggregate_poll = Poll{SampleSize: int(aggregate_sample_size), PollResults: make(map[string]float64)}
aggregate_poll.PollResults[dem_nominee_name] = 100.0 * num_biden_votes / aggregate_sample_size
aggregate_poll.PollResults[rep_nominee_name] = 100.0 * num_trump_votes / aggregate_sample_size
p_republican_win_aggregate_polls := getChanceRepublicanWinFromPollPlusUncertainty(aggregate_poll, state, false)
// p_republican_win_aggregate_polls = getChanceRepublicanWinFromPoll(aggregate_poll, false)
// weight_polls := 0.75
// p_republican = weight_polls*p_republican_win_aggregate_polls + (1.0-weight_polls)*p_baserate_republican_win
p_republican_win = p_republican_win_aggregate_polls
}
if r.Float64() < p_republican_win {
return VotesForEachParty{Democrats: 0, Republicans: state.Votes}
} else {
return VotesForEachParty{Democrats: state.Votes, Republicans: 0}
}
}
}
}
/* Simulate election */
func simulateElection(states []State) int {
republican_seats := 0
for _, state := range states {
election_sample := sampleFromState(state)
republican_seats += election_sample.Republicans
}
return republican_seats
}
/* Histogram */
func barString(n int) string {
str := ""
for i := 0; i < n; i++ {
str += "█"
}
return str
}
func printElectoralCollegeHistogram(samples []int) {
histogram := [538]int{}
for _, sample := range samples {
histogram[sample]++
}
max_count := 0
for _, count := range histogram {
if count > max_count {
max_count = count
}
}
cp := 0.0
for i, count := range histogram {
bar_length := (count * 75) / max_count // Assuming max_count bar length is 50 characters
p := float64(count) / float64(len(samples)) * 100
cp += p
if i > 130 && i < 400 {
fmt.Printf("[ %2d, %4d): %s %.2f%% (%.0f%%)\n", i, i+1, barString(bar_length), p, cp)
} else if p >= 0.01 {
fmt.Printf(">0.01 probability outside of domain, you might want to change histogram parameters\n")
}
}
}
/* Load data from csvs */
// Glue code
func readStates() ([]State, error) {
var states map[string]State = make(map[string]State)
@ -175,9 +451,9 @@ func readStates() ([]State, error) {
has_biden := false
has_trump := false
for candidate_name, _ := range recent_poll.PollResults {
if candidate_name == "Biden" {
if candidate_name == dem_nominee_name {
has_biden = true
} else if candidate_name == "Trump" {
} else if candidate_name == rep_nominee_name {
has_trump = true
}
}
@ -205,294 +481,9 @@ func readStates() ([]State, error) {
for _, state := range states {
states_slice = append(states_slice, state)
}
return states_slice, nil
}
/* Sampling helper functions */
func getNormalCDF(x float64, mean float64, std float64) float64 {
erf_term := (x - mean) / (std * math.Sqrt2)
return (1 + math.Erf(erf_term)) / 2
}
func getProbabilityAboveX(x float64, mean float64, std float64) float64 {
return 1 - getNormalCDF(x, mean, std)
}
func getChanceCandidateWinsFromPollShare(candidate_p float64, poll_sample_size float64) float64 {
std := math.Sqrt(candidate_p * (1 - candidate_p) / poll_sample_size) // https://stats.stackexchange.com/questions/258879/how-to-interpret-margin-of-error-in-a-non-binary-poll
return getProbabilityAboveX(0.5, candidate_p, std)
}
func getChanceRepublicanWinFromPoll(poll Poll, pretty_print bool) float64 {
biden_percentage, biden_exists := poll.PollResults["Biden"]
trump_percentage, trump_exists := poll.PollResults["Trump"]
if !biden_exists || !trump_exists {
panic("PollResults of poll filtered to have Biden/Trump doesn't have Biden/Trump")
}
biden_share := biden_percentage / 100.0 // will panic if the item is not found, but we've previously filtered for it
trump_share := trump_percentage / 100.0
normalized_trump_share := trump_share / (trump_share + biden_share)
normalized_biden_share := biden_share / (trump_share + biden_share)
joint_trump_biden_sample_size := (biden_share + trump_share) * float64(poll.SampleSize)
std_error_poll_mean := math.Sqrt((normalized_trump_share * normalized_biden_share) / joint_trump_biden_sample_size)
p_republican_win := getProbabilityAboveX(0.5, normalized_trump_share, std_error_poll_mean)
if pretty_print {
fmt.Printf("\n\t\tSample size: %f", joint_trump_biden_sample_size)
fmt.Printf("\n\t\tMean R: %f", 100.0*normalized_trump_share)
fmt.Printf("\n\t\tStd of mean R: %f", 100*std_error_poll_mean)
fmt.Printf("\n\t\tPoll says chance of R win: %f", p_republican_win)
}
return p_republican_win
}
func getChanceRepublicanWinFromPollPlusUncertainty(poll Poll, state State, pretty_print bool) float64 {
// Uncertainty from the state
n_republican_win := 0
for _, party := range state.PresidentialElectoralHistory {
if party == "R" {
n_republican_win++
}
}
// Get the uncertainty from the poll
biden_percentage, biden_exists := poll.PollResults["Biden"]
trump_percentage, trump_exists := poll.PollResults["Trump"]
if !biden_exists || !trump_exists {
panic("PollResults of poll filtered to have Biden/Trump doesn't have Biden/Trump")
}
biden_share := biden_percentage / 100.0 // will panic if the item is not found, but we've previously filtered for it
trump_share := trump_percentage / 100.0
normalized_trump_share := trump_share / (trump_share + biden_share)
normalized_biden_share := biden_share / (trump_share + biden_share)
joint_trump_biden_sample_size := (biden_share + trump_share) * float64(poll.SampleSize)
std_error_poll_mean := math.Sqrt((normalized_trump_share * normalized_biden_share) / joint_trump_biden_sample_size)
/* Inject additional uncertainty */
/*
Possible factors:
- National drift between now and the election (biggest one)
- States more uncertain than the national average
- Idiosyncratic factors
- Polls not being as good as gallup
- Increased polarization
Also note that the polls already have some error already
*/
std_additional_uncertainty := 5.0 / 100.0
if n_republican_win == 0 || n_republican_win == 6 {
// if solid states for the last 6 elections
std_additional_uncertainty = std_additional_uncertainty / 3.0
if pretty_print {
fmt.Printf("\n\t\tN republican wins: %d", n_republican_win)
fmt.Printf("\n\t\t=> Reducing additional uncertainty")
}
}
std_error := std_error_poll_mean + std_additional_uncertainty
// std_error := std_error_poll_mean + 0.065
p_republican_win := getProbabilityAboveX(0.5, normalized_trump_share, std_error)
if pretty_print {
fmt.Printf("\n\t\tStd with std_additional_uncertainty R: %f", 100*std_error)
fmt.Printf("\n\t\tPoll plus uncertainty says chance of R win: %f", p_republican_win)
}
return p_republican_win
}
/* Print state by state data */
func printStates(states []State) {
for _, state := range states {
fmt.Printf("\n\nState: %s", state.Name)
fmt.Printf("\n\tVotes: %d", state.Votes)
fmt.Printf("\n\tHistory: %s", state.PresidentialElectoralHistory)
p_baserate_republican_win := 0.0
for _, party := range state.PresidentialElectoralHistory {
if party == "R" {
p_baserate_republican_win++
}
}
fmt.Printf("\n\tHistorical base rate of R win: %f", p_baserate_republican_win/float64(len(state.PresidentialElectoralHistory)))
// Individual poll
for _, poll := range state.Polls {
fmt.Printf("\n\tPoll: %+v", poll)
_ = getChanceRepublicanWinFromPoll(poll, true)
_ = getChanceRepublicanWinFromPollPlusUncertainty(poll, state, true)
}
// Aggregate poll
num_biden_votes := 0.0
num_trump_votes := 0.0
for _, poll := range state.Polls {
biden_percentage, biden_exists := poll.PollResults["Biden"]
trump_percentage, trump_exists := poll.PollResults["Trump"]
if !biden_exists || !trump_exists {
panic("PollResults of poll filtered to have Biden/Trump doesn't have Biden/Trump")
}
num_biden_votes += (biden_percentage / 100.0) * float64(poll.SampleSize)
num_trump_votes += (trump_percentage / 100.0) * float64(poll.SampleSize)
}
aggregate_sample_size := num_biden_votes + num_trump_votes
if aggregate_sample_size != 0.0 {
var aggregate_poll = Poll{SampleSize: int(aggregate_sample_size), PollResults: make(map[string]float64)}
aggregate_poll.PollResults["Biden"] = 100.0 * num_biden_votes / aggregate_sample_size
aggregate_poll.PollResults["Trump"] = 100.0 * num_trump_votes / aggregate_sample_size
fmt.Printf("\n\tAggregate poll: %+v", aggregate_poll)
_ = getChanceRepublicanWinFromPoll(aggregate_poll, true)
_ = getChanceRepublicanWinFromPollPlusUncertainty(aggregate_poll, state, true)
}
}
}
/* Sample state by state */
func sampleFromState(state State) VotesForEachParty {
switch state.Name {
case "Nebraska":
/*
2000: R
2004: R
2008: Split, 1 D, 4 R
2012: R
2016: R
2020: Split, 1 D, 4 R
*/
p_split := 2.0 / 6.0
if r.Float64() < p_split {
return VotesForEachParty{Democrats: 1, Republicans: 4}
} else {
return VotesForEachParty{Democrats: 0, Republicans: 5}
}
case "Maine":
/*
2000: D
2004: D
2008: D
2012: D
2016: Split: 3 D, 1 R
2020: Split, 3 D, 1 R
*/
p_split := 2.0 / 6.0
if r.Float64() < p_split {
return VotesForEachParty{Democrats: 3, Republicans: 1}
} else {
return VotesForEachParty{Democrats: 1, Republicans: 0}
}
default:
{
/* Consider the base rate for the state */
p_baserate_republican_win := 0.0
for _, party := range state.PresidentialElectoralHistory {
if party == "R" {
p_baserate_republican_win++
}
}
p_baserate_republican_win = p_baserate_republican_win / float64(len(state.PresidentialElectoralHistory))
p_republican_win := p_baserate_republican_win // if no polls
/* Consider polls */
num_biden_votes := 0.0
num_trump_votes := 0.0
for _, poll := range state.Polls {
biden_percentage, biden_exists := poll.PollResults["Biden"]
trump_percentage, trump_exists := poll.PollResults["Trump"]
if !biden_exists || !trump_exists {
panic("PollResults of poll filtered to have Biden/Trump doesn't have Biden/Trump")
}
num_biden_votes += (biden_percentage / 100.0) * float64(poll.SampleSize)
num_trump_votes += (trump_percentage / 100.0) * float64(poll.SampleSize)
}
aggregate_sample_size := num_biden_votes + num_trump_votes
if aggregate_sample_size != 0.0 {
var aggregate_poll = Poll{SampleSize: int(aggregate_sample_size), PollResults: make(map[string]float64)}
aggregate_poll.PollResults["Biden"] = 100.0 * num_biden_votes / aggregate_sample_size
aggregate_poll.PollResults["Trump"] = 100.0 * num_trump_votes / aggregate_sample_size
p_republican_win_aggregate_polls := getChanceRepublicanWinFromPollPlusUncertainty(aggregate_poll, state, false)
// p_republican_win_aggregate_polls = getChanceRepublicanWinFromPoll(aggregate_poll, false)
// weight_polls := 0.75
// p_republican = weight_polls*p_republican_win_aggregate_polls + (1.0-weight_polls)*p_baserate_republican_win
p_republican_win = p_republican_win_aggregate_polls
}
if r.Float64() < p_republican_win {
return VotesForEachParty{Democrats: 0, Republicans: state.Votes}
} else {
return VotesForEachParty{Democrats: state.Votes, Republicans: 0}
}
}
}
}
/* Simulate election */
func simulateElection(states []State) int {
republican_seats := 0
for _, state := range states {
election_sample := sampleFromState(state)
republican_seats += election_sample.Republicans
}
return republican_seats
}
/* Histogram */
func barString(n int) string {
str := ""
for i := 0; i < n; i++ {
str += "█"
}
return str
}
func printElectoralCollegeHistogram(samples []int) {
histogram := [538]int{}
for _, sample := range samples {
histogram[sample]++
}
max_count := 0
for _, count := range histogram {
if count > max_count {
max_count = count
}
}
cp := 0.0
for i, count := range histogram {
bar_length := (count * 75) / max_count // Assuming max_count bar length is 50 characters
p := float64(count) / float64(len(samples)) * 100
cp += p
if i > 130 && i < 400 {
fmt.Printf("[ %2d, %4d): %s %.2f%% (%.0f%%)\n", i, i+1, barString(bar_length), p, cp)
} else if p >= 0.01 {
fmt.Printf(">0.01 probability outside of domain, you might want to change histogram parameters\n")
}
}
}
func main() {
states, err := readStates()
if err != nil {
@ -518,5 +509,4 @@ func main() {
p_republicans = p_republicans / float64(n_sims)
fmt.Printf("\n%% republicans: %f\n", p_republicans)
}

915
output
View File

@ -1,915 +0,0 @@
State: Colorado
Votes: 10
History: map[2000:R 2004:R 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.333333
Poll: {PollId:86601 SampleSize:632 PollResults:map[Biden:49 Trump:39] Date:2024-03-19 00:00:00 +0000 UTC Partisan:}
Sample size: 556.160000
Mean R: 44.318182
Std of mean R: 2.106434
Poll says chance of R win: 0.003495
Std with std_additional_uncertainty R: 7.106434
Poll plus uncertainty says chance of R win: 0.211991
Aggregate poll: {PollId: SampleSize:556 PollResults:map[Biden:55.68181818181817 Trump:44.31818181818181] Date:0001-01-01 00:00:00 +0000 UTC Partisan:}
Sample size: 556.000000
Mean R: 44.318182
Std of mean R: 2.106737
Poll says chance of R win: 0.003499
Std with std_additional_uncertainty R: 7.106737
Poll plus uncertainty says chance of R win: 0.212001
State: Florida
Votes: 30
History: map[2000:R 2004:R 2008:D 2012:D 2016:R 2020:R]
Historical base rate of R win: 0.666667
Poll: {PollId:86529 SampleSize:875 PollResults:map[Biden:39 Kennedy:7 Stein:0 Trump:46] Date:2024-03-17 00:00:00 +0000 UTC Partisan:}
Sample size: 743.750000
Mean R: 54.117647
Std of mean R: 1.827169
Poll says chance of R win: 0.987888
Std with std_additional_uncertainty R: 6.827169
Poll plus uncertainty says chance of R win: 0.726788
Poll: {PollId:86634 SampleSize:1000 PollResults:map[Biden:34.6 Kennedy:6.1 Stein:1.1 Trump:49.2 West:0.5] Date:2024-04-10 00:00:00 +0000 UTC Partisan:}
Sample size: 838.000000
Mean R: 58.711217
Std of mean R: 1.700805
Poll says chance of R win: 1.000000
Std with std_additional_uncertainty R: 6.700805
Poll plus uncertainty says chance of R win: 0.903204
Aggregate poll: {PollId: SampleSize:1581 PollResults:map[Biden:43.4487118697645 Trump:56.5512881302355] Date:0001-01-01 00:00:00 +0000 UTC Partisan:}
Sample size: 1581.000000
Mean R: 56.551288
Std of mean R: 1.246648
Poll says chance of R win: 1.000000
Std with std_additional_uncertainty R: 6.246648
Poll plus uncertainty says chance of R win: 0.852858
State: New Hampshire
Votes: 4
History: map[2000:R 2004:D 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.166667
State: Pennsylvania
Votes: 19
History: map[2000:D 2004:D 2008:D 2012:D 2016:R 2020:D]
Historical base rate of R win: 0.166667
Poll: {PollId:86510 SampleSize:1132 PollResults:map[Biden:38 Kennedy:16 Trump:40 West:4] Date:2024-03-18 00:00:00 +0000 UTC Partisan:}
Sample size: 882.960000
Mean R: 51.282051
Std of mean R: 1.682119
Poll says chance of R win: 0.777019
Std with std_additional_uncertainty R: 6.682119
Poll plus uncertainty says chance of R win: 0.576075
Poll: {PollId:86604 SampleSize:431 PollResults:map[Biden:42 Kennedy:9 Stein:3 Trump:40] Date:2024-03-31 00:00:00 +0000 UTC Partisan:}
Sample size: 353.420000
Mean R: 48.780488
Std of mean R: 2.658859
Poll says chance of R win: 0.323239
Std with std_additional_uncertainty R: 7.658859
Poll plus uncertainty says chance of R win: 0.436744
Poll: {PollId:86587 SampleSize:600 PollResults:map[Biden:44 Kennedy:7 Mapstead:2 Stein:4 Trump:47 West:3] Date:2024-03-24 00:00:00 +0000 UTC Partisan:}
Sample size: 546.000000
Mean R: 51.648352
Std of mean R: 2.138639
Poll says chance of R win: 0.779572
Std with std_additional_uncertainty R: 7.138639
Poll plus uncertainty says chance of R win: 0.591306
Poll: {PollId:86624 SampleSize:800 PollResults:map[Biden:44 Kennedy:7 Trump:41] Date:2024-03-26 00:00:00 +0000 UTC Partisan:}
Sample size: 680.000000
Mean R: 48.235294
Std of mean R: 1.916218
Poll says chance of R win: 0.178543
Std with std_additional_uncertainty R: 6.916218
Poll plus uncertainty says chance of R win: 0.399302
Poll: {PollId:86533 SampleSize:775 PollResults:map[Biden:41 Kennedy:7 Stein:1 Trump:44] Date:2024-03-17 00:00:00 +0000 UTC Partisan:}
Sample size: 658.750000
Mean R: 51.764706
Std of mean R: 1.946879
Poll says chance of R win: 0.817645
Std with std_additional_uncertainty R: 6.946879
Poll plus uncertainty says chance of R win: 0.600263
Aggregate poll: {PollId: SampleSize:3121 PollResults:map[Biden:49.49905963545254 Trump:50.50094036454745] Date:0001-01-01 00:00:00 +0000 UTC Partisan:}
Sample size: 3121.000000
Mean R: 50.500940
Std of mean R: 0.894955
Poll says chance of R win: 0.712171
Std with std_additional_uncertainty R: 5.894955
Poll plus uncertainty says chance of R win: 0.533860
State: Alabama
Votes: 9
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
State: California
Votes: 54
History: map[2000:D 2004:D 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.000000
Poll: {PollId:86635 SampleSize:1084 PollResults:map[Biden:54 Trump:31] Date:2024-03-25 00:00:00 +0000 UTC Partisan:}
Sample size: 921.400000
Mean R: 36.470588
Std of mean R: 1.585750
Poll says chance of R win: 0.000000
N republican wins: 0
=> Reducing additional uncertainty
Std with std_additional_uncertainty R: 3.252417
Poll plus uncertainty says chance of R win: 0.000016
Aggregate poll: {PollId: SampleSize:921 PollResults:map[Biden:63.52941176470588 Trump:36.470588235294116] Date:0001-01-01 00:00:00 +0000 UTC Partisan:}
Sample size: 921.000000
Mean R: 36.470588
Std of mean R: 1.586094
Poll says chance of R win: 0.000000
N republican wins: 0
=> Reducing additional uncertainty
Std with std_additional_uncertainty R: 3.252761
Poll plus uncertainty says chance of R win: 0.000016
State: Hawaii
Votes: 4
History: map[2000:D 2004:D 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.000000
State: Indiana
Votes: 11
History: map[2000:R 2004:R 2008:D 2012:R 2016:R 2020:R]
Historical base rate of R win: 0.833333
State: Iowa
Votes: 6
History: map[2000:D 2004:R 2008:D 2012:D 2016:R 2020:R]
Historical base rate of R win: 0.500000
State: Massachusetts
Votes: 11
History: map[2000:D 2004:D 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.000000
Poll: {PollId:86630 SampleSize:1002 PollResults:map[Biden:46 Kennedy:9 Trump:28 West:1] Date:2024-03-29 00:00:00 +0000 UTC Partisan:}
Sample size: 741.480000
Mean R: 37.837838
Std of mean R: 1.781052
Poll says chance of R win: 0.000000
N republican wins: 0
=> Reducing additional uncertainty
Std with std_additional_uncertainty R: 3.447718
Poll plus uncertainty says chance of R win: 0.000210
Aggregate poll: {PollId: SampleSize:741 PollResults:map[Biden:62.16216216216216 Trump:37.83783783783784] Date:0001-01-01 00:00:00 +0000 UTC Partisan:}
Sample size: 741.000000
Mean R: 37.837838
Std of mean R: 1.781628
Poll says chance of R win: 0.000000
N republican wins: 0
=> Reducing additional uncertainty
Std with std_additional_uncertainty R: 3.448295
Poll plus uncertainty says chance of R win: 0.000210
State: Ohio
Votes: 17
History: map[2000:R 2004:R 2008:D 2012:D 2016:R 2020:R]
Historical base rate of R win: 0.666667
State: Virginia
Votes: 13
History: map[2000:R 2004:R 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.333333
State: Wisconsin
Votes: 10
History: map[2000:D 2004:D 2008:D 2012:D 2016:R 2020:D]
Historical base rate of R win: 0.166667
Poll: {PollId:86503 SampleSize:1000 PollResults:map[Biden:39.6 Kennedy:5.9 Stein:1 Trump:43.4 West:0.6] Date:2024-03-18 00:00:00 +0000 UTC Partisan:}
Sample size: 830.000000
Mean R: 52.289157
Std of mean R: 1.733705
Poll says chance of R win: 0.906647
Std with std_additional_uncertainty R: 6.733705
Poll plus uncertainty says chance of R win: 0.633055
Poll: {PollId:86588 SampleSize:600 PollResults:map[Biden:46 Kennedy:10 Mapstead:2 Stein:2 Trump:46 West:1] Date:2024-03-24 00:00:00 +0000 UTC Partisan:}
Sample size: 552.000000
Mean R: 50.000000
Std of mean R: 2.128141
Poll says chance of R win: 0.500000
Std with std_additional_uncertainty R: 7.128141
Poll plus uncertainty says chance of R win: 0.500000
Aggregate poll: {PollId: SampleSize:1382 PollResults:map[Biden:48.62518089725036 Trump:51.37481910274964] Date:0001-01-01 00:00:00 +0000 UTC Partisan:}
Sample size: 1382.000000
Mean R: 51.374819
Std of mean R: 1.344472
Poll says chance of R win: 0.846745
Std with std_additional_uncertainty R: 6.344472
Poll plus uncertainty says chance of R win: 0.585777
State: Idaho
Votes: 4
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
State: Kentucky
Votes: 8
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
State: Louisiana
Votes: 8
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
State: Mississippi
Votes: 6
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
State: New Mexico
Votes: 5
History: map[2000:D 2004:R 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.166667
State: West Virginia
Votes: 4
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
State: Connecticut
Votes: 7
History: map[2000:D 2004:D 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.000000
State: New Jersey
Votes: 14
History: map[2000:D 2004:D 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.000000
Poll: {PollId:86576 SampleSize:1000 PollResults:map[Biden:41 Kennedy:7.5 Stein:0.8 Trump:35.8 West:1.2] Date:2024-03-29 00:00:00 +0000 UTC Partisan:}
Sample size: 768.000000
Mean R: 46.614583
Std of mean R: 1.800079
Poll says chance of R win: 0.030006
N republican wins: 0
=> Reducing additional uncertainty
Std with std_additional_uncertainty R: 3.466746
Poll plus uncertainty says chance of R win: 0.164398
Aggregate poll: {PollId: SampleSize:768 PollResults:map[Biden:53.385416666666664 Trump:46.614583333333336] Date:0001-01-01 00:00:00 +0000 UTC Partisan:}
Sample size: 768.000000
Mean R: 46.614583
Std of mean R: 1.800079
Poll says chance of R win: 0.030006
N republican wins: 0
=> Reducing additional uncertainty
Std with std_additional_uncertainty R: 3.466746
Poll plus uncertainty says chance of R win: 0.164398
State: North Carolina
Votes: 16
History: map[2000:R 2004:R 2008:D 2012:R 2016:R 2020:R]
Historical base rate of R win: 0.833333
Poll: {PollId:86641 SampleSize:600 PollResults:map[Biden:39 Kennedy:7.3 Trump:43.3] Date:2024-04-08 00:00:00 +0000 UTC Partisan:}
Sample size: 493.800000
Mean R: 52.612394
Std of mean R: 2.246989
Poll says chance of R win: 0.877508
Std with std_additional_uncertainty R: 7.246989
Poll plus uncertainty says chance of R win: 0.640756
Poll: {PollId:86640 SampleSize:1016 PollResults:map[Biden:42 Trump:45] Date:2024-03-30 00:00:00 +0000 UTC Partisan:}
Sample size: 883.920000
Mean R: 51.724138
Std of mean R: 1.680758
Poll says chance of R win: 0.847509
Std with std_additional_uncertainty R: 6.680758
Poll plus uncertainty says chance of R win: 0.601826
Poll: {PollId:86632 SampleSize:1401 PollResults:map[Biden:38 Kennedy:12 Stein:3 Trump:41 West:3] Date:2024-04-08 00:00:00 +0000 UTC Partisan:}
Sample size: 1106.790000
Mean R: 51.898734
Std of mean R: 1.501841
Poll says chance of R win: 0.896934
Std with std_additional_uncertainty R: 6.501841
Poll plus uncertainty says chance of R win: 0.614868
Poll: {PollId:86532 SampleSize:642 PollResults:map[Biden:39 Kennedy:8 Stein:1 Trump:43] Date:2024-03-17 00:00:00 +0000 UTC Partisan:}
Sample size: 526.440000
Mean R: 52.439024
Std of mean R: 2.176598
Poll says chance of R win: 0.868764
Std with std_additional_uncertainty R: 7.176598
Poll plus uncertainty says chance of R win: 0.633018
Poll: {PollId:86585 SampleSize:600 PollResults:map[Biden:43 Kennedy:10 Mapstead:2 Stein:3 Trump:49 West:2] Date:2024-03-24 00:00:00 +0000 UTC Partisan:}
Sample size: 552.000000
Mean R: 53.260870
Std of mean R: 2.123611
Poll says chance of R win: 0.937673
Std with std_additional_uncertainty R: 7.123611
Poll plus uncertainty says chance of R win: 0.676436
Aggregate poll: {PollId: SampleSize:3562 PollResults:map[Biden:47.75480991874711 Trump:52.245190081252886] Date:0001-01-01 00:00:00 +0000 UTC Partisan:}
Sample size: 3562.000000
Mean R: 52.245190
Std of mean R: 0.836922
Poll says chance of R win: 0.996348
Std with std_additional_uncertainty R: 5.836922
Poll plus uncertainty says chance of R win: 0.649753
State: Utah
Votes: 6
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
State: Oregon
Votes: 8
History: map[2000:D 2004:D 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.000000
State: Alaska
Votes: 3
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
State: Delaware
Votes: 3
History: map[2000:D 2004:D 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.000000
State: Michigan
Votes: 15
History: map[2000:D 2004:D 2008:D 2012:D 2016:R 2020:D]
Historical base rate of R win: 0.166667
Poll: {PollId:86502 SampleSize:1000 PollResults:map[Biden:40.6 Kennedy:4.6 Stein:1 Trump:44.6 West:0.6 Whitmer:49.5] Date:2024-03-18 00:00:00 +0000 UTC Partisan:}
Sample size: 852.000000
Mean R: 52.347418
Std of mean R: 1.711083
Poll says chance of R win: 0.914951
Std with std_additional_uncertainty R: 6.711083
Poll plus uncertainty says chance of R win: 0.636749
Poll: {PollId:86584 SampleSize:600 PollResults:map[Biden:45 Kennedy:12 Mapstead:2 Stein:3 Trump:48 West:2] Date:2024-03-24 00:00:00 +0000 UTC Partisan:}
Sample size: 558.000000
Mean R: 51.612903
Std of mean R: 2.115567
Poll says chance of R win: 0.777089
Std with std_additional_uncertainty R: 7.115567
Poll plus uncertainty says chance of R win: 0.589661
Poll: {PollId:86509 SampleSize:1097 PollResults:map[Biden:34 Kennedy:18 Trump:40 West:4] Date:2024-03-18 00:00:00 +0000 UTC Partisan:}
Sample size: 811.780000
Mean R: 54.054054
Std of mean R: 1.749116
Poll says chance of R win: 0.989769
Std with std_additional_uncertainty R: 6.749116
Poll plus uncertainty says chance of R win: 0.725973
Poll: {PollId:86531 SampleSize:616 PollResults:map[Biden:39 Kennedy:6 Stein:0 Trump:41] Date:2024-03-17 00:00:00 +0000 UTC Partisan:}
Sample size: 492.800000
Mean R: 51.250000
Std of mean R: 2.251640
Poll says chance of R win: 0.710604
Std with std_additional_uncertainty R: 7.251640
Poll plus uncertainty says chance of R win: 0.568429
Poll: {PollId:86603 SampleSize:709 PollResults:map[Biden:39.8 Kennedy:8.8 Trump:43] Date:2024-03-28 00:00:00 +0000 UTC Partisan:}
Sample size: 587.052000
Mean R: 51.932367
Std of mean R: 2.062088
Poll says chance of R win: 0.825645
Std with std_additional_uncertainty R: 7.062088
Poll plus uncertainty says chance of R win: 0.607814
Aggregate poll: {PollId: SampleSize:3301 PollResults:map[Biden:47.59470467938281 Trump:52.4052953206172] Date:0001-01-01 00:00:00 +0000 UTC Partisan:}
Sample size: 3301.000000
Mean R: 52.405295
Std of mean R: 0.869249
Poll says chance of R win: 0.997172
Std with std_additional_uncertainty R: 5.869249
Poll plus uncertainty says chance of R win: 0.659028
State: Minnesota
Votes: 10
History: map[2000:D 2004:D 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.000000
Poll: {PollId:86625 SampleSize:608 PollResults:map[Biden:44 Trump:42] Date:2024-04-07 00:00:00 +0000 UTC Partisan:}
Sample size: 522.880000
Mean R: 48.837209
Std of mean R: 2.186007
Poll says chance of R win: 0.297389
N republican wins: 0
=> Reducing additional uncertainty
Std with std_additional_uncertainty R: 3.852674
Poll plus uncertainty says chance of R win: 0.381397
Aggregate poll: {PollId: SampleSize:522 PollResults:map[Biden:51.16279069767442 Trump:48.83720930232558] Date:0001-01-01 00:00:00 +0000 UTC Partisan:}
Sample size: 522.000000
Mean R: 48.837209
Std of mean R: 2.187849
Poll says chance of R win: 0.297544
N republican wins: 0
=> Reducing additional uncertainty
Std with std_additional_uncertainty R: 3.854515
Poll plus uncertainty says chance of R win: 0.381452
State: Missouri
Votes: 10
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
State: New York
Votes: 28
History: map[2000:D 2004:D 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.000000
State: North Dakota
Votes: 3
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
State: Rhode Island
Votes: 4
History: map[2000:D 2004:D 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.000000
State: Washington
Votes: 12
History: map[2000:D 2004:D 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.000000
Poll: {PollId:86605 SampleSize:600 PollResults:map[Biden:48 Trump:37] Date:2024-03-21 00:00:00 +0000 UTC Partisan:REP}
Sample size: 510.000000
Mean R: 43.529412
Std of mean R: 2.195419
Poll says chance of R win: 0.001603
N republican wins: 0
=> Reducing additional uncertainty
Std with std_additional_uncertainty R: 3.862086
Poll plus uncertainty says chance of R win: 0.046927
Aggregate poll: {PollId: SampleSize:510 PollResults:map[Biden:56.470588235294116 Trump:43.529411764705884] Date:0001-01-01 00:00:00 +0000 UTC Partisan:}
Sample size: 510.000000
Mean R: 43.529412
Std of mean R: 2.195419
Poll says chance of R win: 0.001603
N republican wins: 0
=> Reducing additional uncertainty
Std with std_additional_uncertainty R: 3.862086
Poll plus uncertainty says chance of R win: 0.046927
State: Georgia
Votes: 16
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:D]
Historical base rate of R win: 0.833333
Poll: {PollId:86530 SampleSize:760 PollResults:map[Biden:41 Kennedy:6 Stein:0 Trump:44] Date:2024-03-17 00:00:00 +0000 UTC Partisan:}
Sample size: 646.000000
Mean R: 51.764706
Std of mean R: 1.965998
Poll says chance of R win: 0.815304
Std with std_additional_uncertainty R: 6.965998
Poll plus uncertainty says chance of R win: 0.599994
Poll: {PollId:86583 SampleSize:600 PollResults:map[Biden:43 Kennedy:8 Mapstead:4 Stein:2 Trump:44 West:2] Date:2024-03-24 00:00:00 +0000 UTC Partisan:}
Sample size: 522.000000
Mean R: 50.574713
Std of mean R: 2.188296
Poll says chance of R win: 0.603582
Std with std_additional_uncertainty R: 7.188296
Poll plus uncertainty says chance of R win: 0.531862
Aggregate poll: {PollId: SampleSize:1168 PollResults:map[Biden:48.767123287671225 Trump:51.23287671232877] Date:0001-01-01 00:00:00 +0000 UTC Partisan:}
Sample size: 1168.000000
Mean R: 51.232877
Std of mean R: 1.462570
Poll says chance of R win: 0.800373
Std with std_additional_uncertainty R: 6.462570
Poll plus uncertainty says chance of R win: 0.575648
State: Oklahoma
Votes: 7
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
State: South Carolina
Votes: 9
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
State: South Dakota
Votes: 3
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
State: Wyoming
Votes: 3
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
State: Arizona
Votes: 11
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:D]
Historical base rate of R win: 0.833333
Poll: {PollId:86528 SampleSize:516 PollResults:map[Biden:41 Kennedy:7 Stein:0 Trump:44] Date:2024-03-17 00:00:00 +0000 UTC Partisan:}
Sample size: 438.600000
Mean R: 51.764706
Std of mean R: 2.385970
Poll says chance of R win: 0.770234
Std with std_additional_uncertainty R: 7.385970
Poll plus uncertainty says chance of R win: 0.594419
Poll: {PollId:86492 SampleSize:600 PollResults:map[Biden:33 Kennedy:18 Trump:37 West:2] Date:2024-03-17 00:00:00 +0000 UTC Partisan:REP}
Sample size: 420.000000
Mean R: 52.857143
Std of mean R: 2.435764
Poll says chance of R win: 0.879601
Std with std_additional_uncertainty R: 7.435764
Poll plus uncertainty says chance of R win: 0.649601
Poll: {PollId:86577 SampleSize:503 PollResults:map[Biden:36 Trump:39] Date:2024-03-31 00:00:00 +0000 UTC Partisan:}
Sample size: 377.250000
Mean R: 52.000000
Std of mean R: 2.572217
Poll says chance of R win: 0.781580
Std with std_additional_uncertainty R: 7.572217
Poll plus uncertainty says chance of R win: 0.604158
Poll: {PollId:86582 SampleSize:600 PollResults:map[Biden:42 Kennedy:11 Mapstead:3 Stein:5 Trump:47 West:2] Date:2024-03-24 00:00:00 +0000 UTC Partisan:}
Sample size: 534.000000
Mean R: 52.808989
Std of mean R: 2.160294
Poll says chance of R win: 0.903248
Std with std_additional_uncertainty R: 7.160294
Poll plus uncertainty says chance of R win: 0.652582
Aggregate poll: {PollId: SampleSize:1769 PollResults:map[Biden:47.610814475803025 Trump:52.38918552419697] Date:0001-01-01 00:00:00 +0000 UTC Partisan:}
Sample size: 1769.000000
Mean R: 52.389186
Std of mean R: 1.187435
Poll says chance of R win: 0.977893
Std with std_additional_uncertainty R: 6.187435
Poll plus uncertainty says chance of R win: 0.650302
State: Arkansas
Votes: 6
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
State: Kansas
Votes: 6
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
State: Maryland
Votes: 10
History: map[2000:D 2004:D 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.000000
State: Nebraska
Votes: 5
History: map[2000:R 2004:R 2008:Split 2012:R 2016:Split 2020:Split]
Historical base rate of R win: 0.500000
State: Nevada
Votes: 6
History: map[2000:R 2004:R 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.333333
Poll: {PollId:86586 SampleSize:600 PollResults:map[Biden:44 Kennedy:15 Mapstead:3 Stein:5 Trump:48 West:2] Date:2024-03-24 00:00:00 +0000 UTC Partisan:}
Sample size: 552.000000
Mean R: 52.173913
Std of mean R: 2.126129
Poll says chance of R win: 0.846722
Std with std_additional_uncertainty R: 7.126129
Poll plus uncertainty says chance of R win: 0.619841
Aggregate poll: {PollId: SampleSize:552 PollResults:map[Biden:47.82608695652174 Trump:52.17391304347826] Date:0001-01-01 00:00:00 +0000 UTC Partisan:}
Sample size: 552.000000
Mean R: 52.173913
Std of mean R: 2.126129
Poll says chance of R win: 0.846722
Std with std_additional_uncertainty R: 7.126129
Poll plus uncertainty says chance of R win: 0.619841
State: Tennessee
Votes: 11
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
Poll: {PollId:86629 SampleSize:974 PollResults:map[Biden:25 Kennedy:16 Trump:48] Date:2024-04-02 00:00:00 +0000 UTC Partisan:}
Sample size: 711.020000
Mean R: 65.753425
Std of mean R: 1.779618
Poll says chance of R win: 1.000000
N republican wins: 6
=> Reducing additional uncertainty
Std with std_additional_uncertainty R: 3.446285
Poll plus uncertainty says chance of R win: 0.999998
Aggregate poll: {PollId: SampleSize:711 PollResults:map[Biden:34.24657534246575 Trump:65.75342465753425] Date:0001-01-01 00:00:00 +0000 UTC Partisan:}
Sample size: 711.000000
Mean R: 65.753425
Std of mean R: 1.779643
Poll says chance of R win: 1.000000
N republican wins: 6
=> Reducing additional uncertainty
Std with std_additional_uncertainty R: 3.446310
Poll plus uncertainty says chance of R win: 0.999998
State: District of Columbia
Votes: 3
History: map[2000:D 2004:D 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.000000
State: Illinois
Votes: 19
History: map[2000:D 2004:D 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.000000
State: Maine
Votes: 4
History: map[2000:D 2004:D 2008:D 2012:D 2016:Split 2020:Split]
Historical base rate of R win: 0.000000
State: Montana
Votes: 4
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
State: Texas
Votes: 40
History: map[2000:R 2004:R 2008:R 2012:R 2016:R 2020:R]
Historical base rate of R win: 1.000000
Poll: {PollId:86544 SampleSize:1117 PollResults:map[Biden:36 Kennedy:15 Trump:48] Date:2024-03-21 00:00:00 +0000 UTC Partisan:}
Sample size: 938.280000
Mean R: 57.142857
Std of mean R: 1.615572
Poll says chance of R win: 0.999995
N republican wins: 6
=> Reducing additional uncertainty
Std with std_additional_uncertainty R: 3.282239
Poll plus uncertainty says chance of R win: 0.985230
Poll: {PollId:86643 SampleSize:1000 PollResults:map[Biden:42.2 Kennedy:7.6 Stein:1.7 Trump:50.7 West:1] Date:2024-04-06 00:00:00 +0000 UTC Partisan:}
Sample size: 929.000000
Mean R: 54.574812
Std of mean R: 1.633566
Poll says chance of R win: 0.997449
N republican wins: 6
=> Reducing additional uncertainty
Std with std_additional_uncertainty R: 3.300232
Poll plus uncertainty says chance of R win: 0.917158
Aggregate poll: {PollId: SampleSize:1867 PollResults:map[Biden:44.134784285163455 Trump:55.865215714836545] Date:0001-01-01 00:00:00 +0000 UTC Partisan:}
Sample size: 1867.000000
Mean R: 55.865216
Std of mean R: 1.149183
Poll says chance of R win: 1.000000
N republican wins: 6
=> Reducing additional uncertainty
Std with std_additional_uncertainty R: 2.815849
Poll plus uncertainty says chance of R win: 0.981371
State: Vermont
Votes: 3
History: map[2000:D 2004:D 2008:D 2012:D 2016:D 2020:D]
Historical base rate of R win: 0.000000
[ 131, 132): 0.00% (0%)
[ 132, 133): 0.00% (0%)
[ 133, 134): 0.00% (0%)
[ 134, 135): 0.00% (0%)
[ 135, 136): 0.00% (0%)
[ 136, 137): 0.00% (0%)
[ 137, 138): 0.00% (0%)
[ 138, 139): 0.00% (0%)
[ 139, 140): 0.00% (0%)
[ 140, 141): 0.00% (0%)
[ 141, 142): 0.00% (0%)
[ 142, 143): 0.00% (0%)
[ 143, 144): 0.00% (0%)
[ 144, 145): 0.00% (0%)
[ 145, 146): 0.00% (0%)
[ 146, 147): 0.00% (0%)
[ 147, 148): 0.00% (0%)
[ 148, 149): 0.00% (0%)
[ 149, 150): 0.00% (0%)
[ 150, 151): 0.00% (0%)
[ 151, 152): 0.00% (0%)
[ 152, 153): 0.00% (0%)
[ 153, 154): 0.00% (0%)
[ 154, 155): 0.00% (0%)
[ 155, 156): 0.00% (0%)
[ 156, 157): 0.00% (0%)
[ 157, 158): 0.00% (0%)
[ 158, 159): 0.00% (0%)
[ 159, 160): 0.00% (0%)
[ 160, 161): 0.00% (0%)
[ 161, 162): 0.00% (0%)
[ 162, 163): 0.00% (0%)
[ 163, 164): 0.00% (0%)
[ 164, 165): 0.00% (0%)
[ 165, 166): 0.00% (0%)
[ 166, 167): 0.00% (0%)
[ 167, 168): 0.00% (0%)
[ 168, 169): 0.00% (0%)
[ 169, 170): 0.00% (0%)
[ 170, 171): 0.00% (0%)
[ 171, 172): 0.01% (0%)
[ 172, 173): 0.00% (0%)
[ 173, 174): 0.00% (0%)
[ 174, 175): 0.00% (0%)
[ 175, 176): 0.00% (0%)
[ 176, 177): 0.00% (0%)
[ 177, 178): 0.01% (0%)
[ 178, 179): 0.00% (0%)
[ 179, 180): 0.00% (0%)
[ 180, 181): 0.00% (0%)
[ 181, 182): 0.01% (0%)
[ 182, 183): 0.02% (0%)
[ 183, 184): 0.01% (0%)
[ 184, 185): 0.01% (0%)
[ 185, 186): 0.00% (0%)
[ 186, 187): 0.01% (0%)
[ 187, 188): 0.01% (0%)
[ 188, 189): 0.02% (0%)
[ 189, 190): 0.02% (0%)
[ 190, 191): 0.02% (0%)
[ 191, 192): 0.01% (0%)
[ 192, 193): 0.02% (0%)
[ 193, 194): █ 0.03% (0%)
[ 194, 195): 0.01% (0%)
[ 195, 196): 0.02% (0%)
[ 196, 197): █ 0.03% (0%)
[ 197, 198): █ 0.04% (0%)
[ 198, 199): █ 0.03% (0%)
[ 199, 200): ██ 0.05% (0%)
[ 200, 201): █ 0.03% (0%)
[ 201, 202): ██ 0.05% (0%)
[ 202, 203): ██ 0.04% (1%)
[ 203, 204): ███ 0.07% (1%)
[ 204, 205): ██ 0.05% (1%)
[ 205, 206): ██ 0.06% (1%)
[ 206, 207): ███ 0.07% (1%)
[ 207, 208): ███ 0.07% (1%)
[ 208, 209): ████ 0.10% (1%)
[ 209, 210): ████ 0.10% (1%)
[ 210, 211): ████ 0.09% (1%)
[ 211, 212): ████ 0.10% (1%)
[ 212, 213): █████ 0.11% (1%)
[ 213, 214): █████ 0.12% (1%)
[ 214, 215): ██████ 0.14% (2%)
[ 215, 216): █████ 0.12% (2%)
[ 216, 217): ██████ 0.14% (2%)
[ 217, 218): ██████ 0.15% (2%)
[ 218, 219): ████████ 0.19% (2%)
[ 219, 220): ████████ 0.18% (2%)
[ 220, 221): █████████ 0.20% (3%)
[ 221, 222): ████████ 0.18% (3%)
[ 222, 223): █████████ 0.21% (3%)
[ 223, 224): ██████████ 0.24% (3%)
[ 224, 225): ███████████ 0.26% (3%)
[ 225, 226): ███████████ 0.25% (4%)
[ 226, 227): ███████████ 0.26% (4%)
[ 227, 228): █████████████ 0.30% (4%)
[ 228, 229): ████████████████ 0.36% (5%)
[ 229, 230): ████████████████ 0.36% (5%)
[ 230, 231): ███████████████ 0.34% (5%)
[ 231, 232): ████████████████ 0.36% (6%)
[ 232, 233): █████████████████ 0.39% (6%)
[ 233, 234): ███████████████████ 0.42% (7%)
[ 234, 235): ██████████████████████ 0.49% (7%)
[ 235, 236): █████████████████████ 0.47% (7%)
[ 236, 237): ████████████████████ 0.45% (8%)
[ 237, 238): ██████████████████████ 0.50% (8%)
[ 238, 239): █████████████████████████ 0.57% (9%)
[ 239, 240): ███████████████████████████ 0.60% (10%)
[ 240, 241): █████████████████████████ 0.57% (10%)
[ 241, 242): █████████████████████████ 0.56% (11%)
[ 242, 243): ██████████████████████████ 0.58% (11%)
[ 243, 244): █████████████████████████████████ 0.73% (12%)
[ 244, 245): █████████████████████████████████████ 0.82% (13%)
[ 245, 246): ███████████████████████████████████ 0.79% (14%)
[ 246, 247): █████████████████████████████████ 0.75% (14%)
[ 247, 248): ███████████████████████████████████ 0.79% (15%)
[ 248, 249): ███████████████████████████████████████ 0.86% (16%)
[ 249, 250): ██████████████████████████████████████████ 0.94% (17%)
[ 250, 251): ████████████████████████████████████████████ 0.97% (18%)
[ 251, 252): ██████████████████████████████████████ 0.86% (19%)
[ 252, 253): █████████████████████████████████████████ 0.91% (20%)
[ 253, 254): █████████████████████████████████████████████ 1.00% (21%)
[ 254, 255): ██████████████████████████████████████████████████ 1.11% (22%)
[ 255, 256): ███████████████████████████████████████████████████ 1.13% (23%)
[ 256, 257): █████████████████████████████████████████████████ 1.08% (24%)
[ 257, 258): █████████████████████████████████████████████████ 1.09% (25%)
[ 258, 259): ███████████████████████████████████████████████████ 1.13% (26%)
[ 259, 260): ███████████████████████████████████████████████████████████ 1.31% (28%)
[ 260, 261): ███████████████████████████████████████████████████████████ 1.31% (29%)
[ 261, 262): ███████████████████████████████████████████████████████ 1.22% (30%)
[ 262, 263): ███████████████████████████████████████████████████████ 1.22% (31%)
[ 263, 264): ███████████████████████████████████████████████████████████ 1.32% (33%)
[ 264, 265): ████████████████████████████████████████████████████████████████ 1.42% (34%)
[ 265, 266): ██████████████████████████████████████████████████████████████████ 1.47% (36%)
[ 266, 267): ███████████████████████████████████████████████████████████████ 1.41% (37%)
[ 267, 268): ███████████████████████████████████████████████████████████ 1.31% (38%)
[ 268, 269): ██████████████████████████████████████████████████████████████ 1.37% (40%)
[ 269, 270): █████████████████████████████████████████████████████████████████ 1.43% (41%)
[ 270, 271): █████████████████████████████████████████████████████████████████████████ 1.61% (43%)
[ 271, 272): ██████████████████████████████████████████████████████████████████████ 1.56% (44%)
[ 272, 273): ███████████████████████████████████████████████████████████████ 1.40% (46%)
[ 273, 274): ███████████████████████████████████████████████████████████████████████ 1.57% (47%)
[ 274, 275): █████████████████████████████████████████████████████████████████████████ 1.62% (49%)
[ 275, 276): ████████████████████████████████████████████████████████████████████ 1.51% (50%)
[ 276, 277): ████████████████████████████████████████████████████████████████ 1.42% (52%)
[ 277, 278): ██████████████████████████████████████████████████████████████████ 1.47% (53%)
[ 278, 279): █████████████████████████████████████████████████████████████████████ 1.53% (55%)
[ 279, 280): ████████████████████████████████████████████████████████████████████████ 1.59% (56%)
[ 280, 281): ███████████████████████████████████████████████████████████████████████████ 1.65% (58%)
[ 281, 282): ██████████████████████████████████████████████████████████████████████ 1.54% (60%)
[ 282, 283): █████████████████████████████████████████████████████████████ 1.36% (61%)
[ 283, 284): █████████████████████████████████████████████████████████████████ 1.43% (62%)
[ 284, 285): ████████████████████████████████████████████████████████████████████████ 1.59% (64%)
[ 285, 286): █████████████████████████████████████████████████████████████████████ 1.53% (65%)
[ 286, 287): █████████████████████████████████████████████████████████████████ 1.43% (67%)
[ 287, 288): ███████████████████████████████████████████████████████████████ 1.39% (68%)
[ 288, 289): ███████████████████████████████████████████████████████████ 1.31% (70%)
[ 289, 290): ██████████████████████████████████████████████████████████████████ 1.46% (71%)
[ 290, 291): ██████████████████████████████████████████████████████████████████████ 1.56% (73%)
[ 291, 292): ████████████████████████████████████████████████████████████ 1.32% (74%)
[ 292, 293): ███████████████████████████████████████████████████████ 1.23% (75%)
[ 293, 294): █████████████████████████████████████████████████████ 1.17% (76%)
[ 294, 295): ███████████████████████████████████████████████████████████ 1.31% (78%)
[ 295, 296): ███████████████████████████████████████████████████████████ 1.32% (79%)
[ 296, 297): ██████████████████████████████████████████████████████ 1.21% (80%)
[ 297, 298): ████████████████████████████████████████████████ 1.06% (81%)
[ 298, 299): █████████████████████████████████████████████ 1.00% (82%)
[ 299, 300): █████████████████████████████████████████████████ 1.09% (83%)
[ 300, 301): ████████████████████████████████████████████████████ 1.16% (84%)
[ 301, 302): ███████████████████████████████████████████ 0.95% (85%)
[ 302, 303): ██████████████████████████████████████ 0.85% (86%)
[ 303, 304): ████████████████████████████████████████ 0.89% (87%)
[ 304, 305): ██████████████████████████████████████ 0.84% (88%)
[ 305, 306): ██████████████████████████████████████ 0.85% (89%)
[ 306, 307): ██████████████████████████████████████████ 0.94% (90%)
[ 307, 308): █████████████████████████████████ 0.73% (90%)
[ 308, 309): ██████████████████████████████ 0.66% (91%)
[ 309, 310): █████████████████████████████ 0.66% (92%)
[ 310, 311): ███████████████████████████████ 0.68% (92%)
[ 311, 312): ███████████████████████████ 0.60% (93%)
[ 312, 313): ████████████████████████ 0.53% (94%)
[ 313, 314): █████████████████████████ 0.56% (94%)
[ 314, 315): ██████████████████████ 0.49% (95%)
[ 315, 316): ███████████████████ 0.42% (95%)
[ 316, 317): █████████████████████ 0.48% (96%)
[ 317, 318): ███████████████████ 0.42% (96%)
[ 318, 319): ███████████████ 0.35% (96%)
[ 319, 320): ██████████████████ 0.41% (97%)
[ 320, 321): ██████████████ 0.32% (97%)
[ 321, 322): ███████████ 0.25% (97%)
[ 322, 323): ████████████ 0.27% (98%)
[ 323, 324): ████████████ 0.27% (98%)
[ 324, 325): ███████████ 0.25% (98%)
[ 325, 326): ██████████ 0.23% (98%)
[ 326, 327): ████████ 0.19% (99%)
[ 327, 328): ██████ 0.15% (99%)
[ 328, 329): █████ 0.12% (99%)
[ 329, 330): ███████ 0.17% (99%)
[ 330, 331): █████ 0.11% (99%)
[ 331, 332): ███ 0.08% (99%)
[ 332, 333): ███ 0.09% (99%)
[ 333, 334): █████ 0.12% (99%)
[ 334, 335): ████ 0.09% (99%)
[ 335, 336): ████ 0.10% (100%)
[ 336, 337): ███ 0.07% (100%)
[ 337, 338): ██ 0.05% (100%)
[ 338, 339): ██ 0.06% (100%)
[ 339, 340): ██ 0.05% (100%)
[ 340, 341): █ 0.03% (100%)
[ 341, 342): 0.02% (100%)
[ 342, 343): █ 0.03% (100%)
[ 343, 344): 0.02% (100%)
[ 344, 345): 0.02% (100%)
[ 345, 346): 0.02% (100%)
[ 346, 347): 0.01% (100%)
[ 347, 348): 0.01% (100%)
[ 348, 349): 0.01% (100%)
[ 349, 350): 0.02% (100%)
[ 350, 351): 0.01% (100%)
[ 351, 352): 0.00% (100%)
[ 352, 353): 0.01% (100%)
[ 353, 354): 0.01% (100%)
[ 354, 355): 0.00% (100%)
[ 355, 356): 0.00% (100%)
[ 356, 357): 0.00% (100%)
[ 357, 358): 0.00% (100%)
[ 358, 359): 0.00% (100%)
[ 359, 360): 0.00% (100%)
[ 360, 361): 0.00% (100%)
[ 361, 362): 0.00% (100%)
[ 362, 363): 0.00% (100%)
[ 363, 364): 0.00% (100%)
[ 364, 365): 0.00% (100%)
[ 365, 366): 0.00% (100%)
[ 366, 367): 0.00% (100%)
[ 367, 368): 0.00% (100%)
[ 368, 369): 0.00% (100%)
[ 369, 370): 0.00% (100%)
[ 370, 371): 0.00% (100%)
[ 371, 372): 0.00% (100%)
[ 372, 373): 0.00% (100%)
[ 373, 374): 0.00% (100%)
[ 374, 375): 0.00% (100%)
[ 375, 376): 0.00% (100%)
[ 376, 377): 0.00% (100%)
[ 377, 378): 0.00% (100%)
[ 378, 379): 0.00% (100%)
[ 379, 380): 0.00% (100%)
[ 380, 381): 0.00% (100%)
[ 381, 382): 0.00% (100%)
[ 382, 383): 0.00% (100%)
[ 383, 384): 0.00% (100%)
[ 384, 385): 0.00% (100%)
[ 385, 386): 0.00% (100%)
[ 386, 387): 0.00% (100%)
[ 387, 388): 0.00% (100%)
[ 388, 389): 0.00% (100%)
[ 389, 390): 0.00% (100%)
[ 390, 391): 0.00% (100%)
[ 391, 392): 0.00% (100%)
[ 392, 393): 0.00% (100%)
[ 393, 394): 0.00% (100%)
[ 394, 395): 0.00% (100%)
[ 395, 396): 0.00% (100%)
[ 396, 397): 0.00% (100%)
[ 397, 398): 0.00% (100%)
[ 398, 399): 0.00% (100%)
[ 399, 400): 0.00% (100%)
% republicans: 0.589620

1529
output.txt

File diff suppressed because it is too large Load Diff