Does higher turnout help Democrats, Republicans, both, or neither? Let’s try to find out by using bad weather as an instrumental variable to predict turnout. Run a standard regression predicting Republican vote share based on turnout, and also an instrumental-variables analysis adding rain- and snow-fall as instruments. Are there differences between the two? Are there signs of trouble for the instruments, or do they seem reasonable?
Start by loading relevant data:
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.6
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ ggplot2 4.0.1 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.2.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
#Download data on US House elections and weather
#The data come from this collection: https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/ATSOYF
rainfallelections <- read.csv("https://raw.githubusercontent.com/jnseawright/PS312/refs/heads/main/Data/rainfallelections.csv")
There is no comprehensive codebook for these data, but some of the most important variables are as follows (ignore the “label var” stuff, which is residual STATA code from the authors’ data analysis about ten years ago):
label var de_Rain_Dev “Election Day Rain - Normal Rain” label var de_Snow_Dev “Election Day Snow - Normal Snow” label var REP “ln(REP Share/Absentee)” label var DEM “ln(DEM Share/Absentee)” label var rep2 “Republican Share” label var dem2 “Democratic Share” label var abs2 “Absentee Ratio” label var Rain_Dev “Deviation from Normal Rainfall” label var GOPVoteShare_3MA “Average Republican Support” label var Turnout_Lag “Lag of Turnout” label var PcntBlack “% Black Population” label var ZPcntHSGrad “% High School Graduates” label var FarmsPerCap “% Farmer” label var Unemploy “% Unemployment” label var AdjIncome “Average County Income”
At this point, you’re ready to start carrying out your instrumental-variables design. Fill in the sample code below with the outcome variable, the treatment variable, and the instrument, as well as any control variables that make sense for your analysis.
voteturnout.tsls <- tsls(OUTCOME ~ TREATMENT + CONTROLS, ~ INSTRUMENT + CONTROLS, data=rainfallelections)
summary(voteturnout.tsls)
As a group, evaluate the credibility of your results and interpret their meaning. Send your results and a paragraph explaining your estimator and explaining your results to your TA.