gain clarity about next steps & print polling errors
This commit is contained in:
parent
dc9630b96f
commit
8b190e5d25
14
README.md
14
README.md
|
@ -142,12 +142,20 @@ Notes on 2020:
|
||||||
|
|
||||||
## Roadmap
|
## Roadmap
|
||||||
|
|
||||||
|
It's not clear to me what I will do with this. As a result of writting down the model, I've realized that 80/20-ing a 538 would involve more effort than what I was expecting
|
||||||
|
|
||||||
### To do
|
### To do
|
||||||
|
|
||||||
General:
|
General:
|
||||||
|
|
||||||
- [ ] Think about next steps
|
|
||||||
- [ ] Share with Samotsvety
|
- [ ] Share with Samotsvety
|
||||||
|
- [ ] Implement possible next steps:
|
||||||
|
- Uncertainty due to drift between now and the election
|
||||||
|
- Uncertainty due to difference between last election poll and final vote share
|
||||||
|
- [ ] Better prior by incorporating more past elections
|
||||||
|
- Think about how to:
|
||||||
|
- [ ] Inject error
|
||||||
|
- [ ] Inject correlated error
|
||||||
- [ ] Think about whether I want to monetize this
|
- [ ] Think about whether I want to monetize this
|
||||||
- Maybe with Vox?
|
- Maybe with Vox?
|
||||||
- Otherwise: add MIT license & publish
|
- Otherwise: add MIT license & publish
|
||||||
|
@ -160,7 +168,6 @@ Steps to make this more accurate:
|
||||||
- How?
|
- How?
|
||||||
- [ ] Consider conditional probabilities
|
- [ ] Consider conditional probabilities
|
||||||
- See how other models account for the correlation
|
- See how other models account for the correlation
|
||||||
- [ ] Inspect polling stderrs
|
|
||||||
- [ ] Add more years
|
- [ ] Add more years
|
||||||
- [ ] Polling company errors
|
- [ ] Polling company errors
|
||||||
- [ ] Make polling errors wider?
|
- [ ] Make polling errors wider?
|
||||||
|
@ -186,12 +193,15 @@ Consider polls:
|
||||||
- [x] Another extreme: Aggregate very naïvely, add up all samples together?
|
- [x] Another extreme: Aggregate very naïvely, add up all samples together?
|
||||||
- [x] Aggregate polls?
|
- [x] Aggregate polls?
|
||||||
- [x] Exclude polls older than one month?
|
- [x] Exclude polls older than one month?
|
||||||
|
- [x] Inspect polling stderrs
|
||||||
|
|
||||||
General
|
General
|
||||||
|
|
||||||
- [x] Work on README
|
- [x] Work on README
|
||||||
- [x] Print states & polls separately
|
- [x] Print states & polls separately
|
||||||
- [x] Histogram distributions of electoral college votes
|
- [x] Histogram distributions of electoral college votes
|
||||||
|
- [x] Think about next steps
|
||||||
|
- [x] Get clarity on next steps
|
||||||
|
|
||||||
### Discarded
|
### Discarded
|
||||||
|
|
||||||
|
|
17
main.go
17
main.go
|
@ -224,7 +224,7 @@ func getChanceCandidateWinsFromPollShare(candidate_p float64, poll_sample_size f
|
||||||
return getProbabilityAboveX(0.5, candidate_p, std)
|
return getProbabilityAboveX(0.5, candidate_p, std)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getChanceRepublicanWinFromPoll(poll Poll) float64 {
|
func getChanceRepublicanWinFromPoll(poll Poll, pretty_print bool) float64 {
|
||||||
|
|
||||||
biden_percentage, biden_exists := poll.PollResults["Biden"]
|
biden_percentage, biden_exists := poll.PollResults["Biden"]
|
||||||
trump_percentage, trump_exists := poll.PollResults["Trump"]
|
trump_percentage, trump_exists := poll.PollResults["Trump"]
|
||||||
|
@ -241,6 +241,13 @@ func getChanceRepublicanWinFromPoll(poll Poll) float64 {
|
||||||
std_error_poll_mean := math.Sqrt((normalized_trump_share * normalized_biden_share) / joint_trump_biden_sample_size)
|
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)
|
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
|
return p_republican_win
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -262,9 +269,8 @@ func printStates(states []State) {
|
||||||
|
|
||||||
// Individual poll
|
// Individual poll
|
||||||
for _, poll := range state.Polls {
|
for _, poll := range state.Polls {
|
||||||
p_republican_win_poll := getChanceRepublicanWinFromPoll(poll)
|
|
||||||
fmt.Printf("\n\tPoll: %+v", poll)
|
fmt.Printf("\n\tPoll: %+v", poll)
|
||||||
fmt.Printf("\n\t\tPoll says chance of R win: %f", p_republican_win_poll)
|
_ = getChanceRepublicanWinFromPoll(poll, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Aggregate poll
|
// Aggregate poll
|
||||||
|
@ -285,9 +291,8 @@ func printStates(states []State) {
|
||||||
aggregate_poll.PollResults["Biden"] = 100.0 * num_biden_votes / aggregate_sample_size
|
aggregate_poll.PollResults["Biden"] = 100.0 * num_biden_votes / aggregate_sample_size
|
||||||
aggregate_poll.PollResults["Trump"] = 100.0 * num_trump_votes / aggregate_sample_size
|
aggregate_poll.PollResults["Trump"] = 100.0 * num_trump_votes / aggregate_sample_size
|
||||||
|
|
||||||
p_republican_win_aggregate_polls := getChanceRepublicanWinFromPoll(aggregate_poll)
|
|
||||||
fmt.Printf("\n\tAggregate poll: %+v", aggregate_poll)
|
fmt.Printf("\n\tAggregate poll: %+v", aggregate_poll)
|
||||||
fmt.Printf("\n\t\tAggregate Poll says chance of R win: %f", p_republican_win_aggregate_polls)
|
_ = getChanceRepublicanWinFromPoll(aggregate_poll, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -359,7 +364,7 @@ func sampleFromState(state State) VotesForEachParty {
|
||||||
var aggregate_poll = Poll{SampleSize: int(aggregate_sample_size), PollResults: make(map[string]float64)}
|
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["Biden"] = 100.0 * num_biden_votes / aggregate_sample_size
|
||||||
aggregate_poll.PollResults["Trump"] = 100.0 * num_trump_votes / aggregate_sample_size
|
aggregate_poll.PollResults["Trump"] = 100.0 * num_trump_votes / aggregate_sample_size
|
||||||
p_republican_win_aggregate_polls := getChanceRepublicanWinFromPoll(aggregate_poll)
|
p_republican_win_aggregate_polls := getChanceRepublicanWinFromPoll(aggregate_poll, false)
|
||||||
weight_polls := 0.5
|
weight_polls := 0.5
|
||||||
p_republican = weight_polls*p_republican_win_aggregate_polls + (1.0-weight_polls)*p_baserate_republican
|
p_republican = weight_polls*p_republican_win_aggregate_polls + (1.0-weight_polls)*p_baserate_republican
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user