Compare commits
2 Commits
212f72f596
...
3c4d6ba372
Author | SHA1 | Date | |
---|---|---|---|
3c4d6ba372 | |||
cbda7b1e5c |
568
main.go
568
main.go
|
@ -34,9 +34,285 @@ type Poll struct {
|
||||||
|
|
||||||
/* Globals */
|
/* Globals */
|
||||||
var r = rand.New(rand.NewPCG(uint64(100), uint64(2224)))
|
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 */
|
/* Load data from csvs */
|
||||||
|
// Glue code
|
||||||
func readStates() ([]State, error) {
|
func readStates() ([]State, error) {
|
||||||
var states map[string]State = make(map[string]State)
|
var states map[string]State = make(map[string]State)
|
||||||
|
|
||||||
|
@ -175,9 +451,9 @@ func readStates() ([]State, error) {
|
||||||
has_biden := false
|
has_biden := false
|
||||||
has_trump := false
|
has_trump := false
|
||||||
for candidate_name, _ := range recent_poll.PollResults {
|
for candidate_name, _ := range recent_poll.PollResults {
|
||||||
if candidate_name == "Biden" {
|
if candidate_name == dem_nominee_name {
|
||||||
has_biden = true
|
has_biden = true
|
||||||
} else if candidate_name == "Trump" {
|
} else if candidate_name == rep_nominee_name {
|
||||||
has_trump = true
|
has_trump = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -205,294 +481,9 @@ func readStates() ([]State, error) {
|
||||||
for _, state := range states {
|
for _, state := range states {
|
||||||
states_slice = append(states_slice, state)
|
states_slice = append(states_slice, state)
|
||||||
}
|
}
|
||||||
|
|
||||||
return states_slice, nil
|
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() {
|
func main() {
|
||||||
states, err := readStates()
|
states, err := readStates()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -518,5 +509,4 @@ func main() {
|
||||||
|
|
||||||
p_republicans = p_republicans / float64(n_sims)
|
p_republicans = p_republicans / float64(n_sims)
|
||||||
fmt.Printf("\n%% republicans: %f\n", p_republicans)
|
fmt.Printf("\n%% republicans: %f\n", p_republicans)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
915
output
915
output
|
@ -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
1529
output.txt
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user