Created
November 13, 2020 01:36
-
-
Save NaimKabir/f8ff2b77f732da457ba5f76a81cac844 to your computer and use it in GitHub Desktop.
A version of the ayyadurai sim where the downballot vote is on the x-axis
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Simple process: let's say you have two populations, NR (non-Republican) and R (Republican), each with a preference For down-ballot R candidates or Against, and also a preference For or Against the R president.\n", | |
"\n", | |
"Let's model these as *probabilities* for downballot R candidates and for the R president like so:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"NR = {\n", | |
" 'downballot': 0.05, # 0.05 chance to vote for R down-ballot\n", | |
" 'president': 0.1 # 0.1 chance to vote for the R president\n", | |
"}\n", | |
"\n", | |
"R = {\n", | |
" 'downballot': 0.99,\n", | |
" 'president': 0.6\n", | |
"}" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Great now let's simulate a bunch of precincts with different fractions of R vs. NR voters." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"r_percentages = np.random.rand(1000) # modeling the fraction of r_voters in a precint, randomly" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Now let's simulate some per-precinct votes and collect % of downballot-R votes as well as president-R votes within that precinct." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"downballot_r_percentages = []\n", | |
"president_r_percentages = []\n", | |
"\n", | |
"choices = ['R', 'non-R']\n", | |
"\n", | |
"for percentage in r_percentages:\n", | |
" # Assume all precincts are the same size\n", | |
" N = 100\n", | |
" \n", | |
" # Simulate the two dice-rollers: NR and R voters\n", | |
" num_r = int(percentage*N)\n", | |
" num_nr = int((1-percentage)*N)\n", | |
" \n", | |
" # Do some dicerolls\n", | |
" r_downballot_votes = np.random.choice(choices, num_r, p=[R['downballot'], 1-R['downballot']])\n", | |
" r_president_votes = np.random.choice(choices, num_r, p=[R['president'], 1-R['president']])\n", | |
" \n", | |
" nr_downballot_votes = np.random.choice(choices, num_nr, p=[NR['downballot'], 1-NR['downballot']])\n", | |
" nr_president_votes = np.random.choice(choices, num_nr, p=[NR['president'], 1-NR['president']])\n", | |
" \n", | |
" # Collect the percentages of votes\n", | |
" def get_r_percentage(r_votes, nr_votes):\n", | |
" pooled_votes = np.concatenate([r_votes, nr_votes])\n", | |
" pooled_r_votes = pooled_votes == 'R'\n", | |
" \n", | |
" return np.sum(pooled_r_votes)*1.0 / len(pooled_votes)\n", | |
" \n", | |
" percentage_downballot_r = get_r_percentage(r_downballot_votes, nr_downballot_votes)\n", | |
" percentage_president_r = get_r_percentage(r_president_votes, nr_president_votes)\n", | |
" \n", | |
" downballot_r_percentages.append(percentage_downballot_r)\n", | |
" president_r_percentages.append(percentage_president_r)\n", | |
" \n", | |
"downballot_r_percentages = np.array(downballot_r_percentages)\n", | |
"president_r_percentages = np.array(president_r_percentages)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"import seaborn as sns\n", | |
"sns.set()\n", | |
"\n", | |
"diffs = president_r_percentages - downballot_r_percentages\n", | |
"plt.scatter(downballot_r_percentages*100, diffs*100) # EDIT: Now plotting straight-ticket votes vs. differences\n", | |
"plt.xlabel('% republican')\n", | |
"plt.ylabel('% diff')\n", | |
"plt.xlim([0, 100])\n", | |
"plt.ylim([-60, 20])\n", | |
"\n", | |
"plt.savefig('fig1.png')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.7.7" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment