Skip to content

Instantly share code, notes, and snippets.

View elliottmorris's full-sized avatar

G. Elliott Morris elliottmorris

View GitHub Profile
@elliottmorris
elliottmorris / bayes update young voters.R
Created November 27, 2023 22:50
for twitter. showing how to combine a prior (past election results) and data (polls) for certain poll subgroups
library(tidyverse)
bayes_update_normal = function(
data_mu,
data_se,
prior_mu = 0,
prior_se = 3){
if(all(data_mu == 0)){
return(c(0,0))
@elliottmorris
elliottmorris / Untitled spreadsheet - Sheet1.csv
Created October 17, 2023 15:51
chart for Matt and Derek
country inflation (YoY Sept 2023) Leader approval Disapproval Net
Austria 7.37 23 73 -50
Belgium 2.39 38 46 -8
Brazil 5.19 51 45 6
Canada 4 33 59 -26
France 4.86 23 72 -49
Germany 4.53 25 68 -43
Ireland 6.41 39 52 -13
Italy 5.44 44 51 -7
Japan 3.2 23 63 -40
@elliottmorris
elliottmorris / ca_polls - Sheet1.csv
Last active September 18, 2021 03:03
California 2021 recall polling model
end_date pollster n population pid_weighted keep remove
2021-09-13 survey monkey 3985 LV 1 0.55 0.41
2021-09-13 trafalgar 1082 LV 0 0.53 0.45
2021-09-11 emerson 1000 LV 1 0.6 0.4
2021-09-10 data for progress 2464 LV 1 0.57 0.43
2021-09-08 surveyusa 930 LV 0 0.54 0.41
2021-09-07 suffolk 500 LV 0 0.58 0.41
2021-09-06 uc berkeley 6550 LV 0 0.6 0.39
2021-09-04 trafalgar 1079 LV 0 0.53 0.43
2021-09-01 yougov 1955 LV 1 0.56 0.44
@elliottmorris
elliottmorris / election_night_live_model.R
Last active January 29, 2024 18:56
A live election-night prediction model using The Economist's pre-election forecast
#' Description
#' This file runs a live election-night forecast based on The Economist's pre-election forecasting model
#' available at projects.economist.com/us-2020-forecast/president.
#' It is resampling model based on https://pkremp.github.io/update_prob.html.
#' This script does not input any real election results! You will have to enter your picks/constraints manually (scroll to the bottom of the script).
#'
#' Licence
#' This software is published by *[The Economist](https://www.economist.com)* under the [MIT licence](https://opensource.org/licenses/MIT). The data generated by *The Economist* are available under the [Creative Commons Attribution 4.0 International License](https://creativecommons.org/licenses/by/4.0/).
#' The licences include only the data and the software authored by *The Economist*, and do not cover any *Economist* content or third-party data or content made available using the software. More information about licensing, syndication and the copyright of *Economist* content can be fou
@elliottmorris
elliottmorris / poll_change_trend.gg
Last active October 29, 2020 02:36
Charts the poll-level trend in 2020 polls
library(tidyverse)
library(lubridate)
library(pbapply)
url<- 'https://docs.google.com/spreadsheets/d/e/2PACX-1vQ56fySJKLL18Lipu1_i3ID9JE06voJEz2EXm6JW4Vh11zmndyTwejMavuNntzIWLY0RyhA1UsVEen0/pub?gid=0&single=true&output=csv'
all_polls <- read_csv(url)
# remove any polls if biden or trump blank
all_polls <- all_polls %>% filter(!is.na(biden),!is.na(trump))#, include == "TRUE")
@elliottmorris
elliottmorris / tipping-point_states.R
Last active August 26, 2020 00:18
Code to generate the tipping-point index from our model's simulations
library(pbapply)
library(tidyverse)
mod <- read_csv('~/Downloads/output/site_data/electoral_college_simulations.csv')
mod <- mod %>% gather(state,vote,4:ncol(.))
evs <- read_csv('data/prior/state_evs.csv')
mod <- mod %>% left_join(evs)
tp <- pblapply(1:max(mod$draw),
cl = 12,
@elliottmorris
elliottmorris / polls_biden_v_clinton_2020.R
Last active August 16, 2020 15:16
Code to make a chart that compares Biden's polling numbers to Hillary Clinton's 2016 performance
library(tidyverse)
library(janitor)
library(lubridate)
library(zoo)
library(politicaldata)
RUN_DATE <- Sys.Date()
start_date <- ymd("2020-02-01")
election_day <- ymd('2020-11-03')
@elliottmorris
elliottmorris / rasmussen_v_other_approval.R
Created April 12, 2020 18:29
compare rasmussen polling average vs average of all other polls
library(tidyverse)
library(zoo)
trump_approve <- read_csv("https://projects.fivethirtyeight.com/polls-page/president_approval_polls.csv")
trump_approve <- trump_approve %>%
mutate("date" = mdy(end_date)) %>%
dplyr::select(pollster,
date,
"approve" = yes,
@elliottmorris
elliottmorris / polling_averages.R
Last active March 21, 2020 00:26
historical polling averages + 2020
library(tidyverse)
library(politicaldata)
library(lubridate)
library(zoo)
library(gghighlight)
today_2020_time_difference <- as.numeric(difftime(ymd('2020-11-03'),Sys.Date(),units = 'days'))
# wrangle -----------------------------------------------------------------
# historical
@elliottmorris
elliottmorris / historical_approval.R
Last active July 29, 2023 14:00
historical presidential approval ratings
rm(list = ls()) #reset the environment
library(tidyverse)
library(lubridate)
library(mgcv)
exponent_weight <- function(i) {
exp(-0.04*i)
}
TODAY_DAY <- difftime(Sys.Date(),as.Date("2017-01-21"))