Biden’s Approval Margins
Biden’s Approval Margins
# Import approval polls data directly off fivethirtyeight website
approval_polllist <- read_csv('https://projects.fivethirtyeight.com/biden-approval-data/approval_polllist.csv')
glimpse(approval_polllist)
## Rows: 4,567
## Columns: 22
## $ president <chr> "Joe Biden", "Joe Biden", "Joe Biden", "Joe Biden"…
## $ subgroup <chr> "All polls", "All polls", "All polls", "All polls"…
## $ modeldate <chr> "9/16/2022", "9/16/2022", "9/16/2022", "9/16/2022"…
## $ startdate <chr> "1/19/2021", "1/19/2021", "1/20/2021", "1/20/2021"…
## $ enddate <chr> "1/21/2021", "1/21/2021", "1/22/2021", "1/21/2021"…
## $ pollster <chr> "Morning Consult", "Rasmussen Reports/Pulse Opinio…
## $ grade <chr> "B", "B", "B", "B+", "B", "B-", "B+", "B", "B", "B…
## $ samplesize <dbl> 15000, 1500, 15000, 1516, 1993, 1115, 941, 15000, …
## $ population <chr> "a", "lv", "a", "a", "rv", "a", "rv", "a", "lv", "…
## $ weight <dbl> 0.2594, 0.3382, 0.2333, 1.2454, 0.0930, 1.1014, 1.…
## $ influence <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ approve <dbl> 50.0, 48.0, 51.0, 45.0, 56.0, 55.5, 63.0, 52.0, 48…
## $ disapprove <dbl> 28.0, 45.0, 28.0, 28.0, 31.0, 31.6, 37.0, 29.0, 47…
## $ adjusted_approve <dbl> 49.4, 49.1, 50.4, 46.0, 55.4, 54.6, 59.4, 51.4, 49…
## $ adjusted_disapprove <dbl> 30.9, 40.3, 30.9, 29.0, 33.9, 32.4, 38.4, 31.9, 42…
## $ multiversions <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
## $ tracking <lgl> TRUE, TRUE, TRUE, NA, NA, NA, NA, TRUE, TRUE, NA, …
## $ url <chr> "https://morningconsult.com/form/global-leader-app…
## $ poll_id <dbl> 74272, 74247, 74273, 74327, 74246, 74248, 74256, 7…
## $ question_id <dbl> 139491, 139395, 139492, 139570, 139394, 139404, 13…
## $ createddate <chr> "1/28/2021", "1/22/2021", "1/28/2021", "2/2/2021",…
## $ timestamp <chr> "15:38:30 16 Sep 2022", "15:38:30 16 Sep 2022", "1…
Create a plot
What I would like you to do is to calculate the average net approval
rate (approve- disapprove) for each week since he got into office. I
want you plot the net approval for each week in 2022, along with its 95%
confidence interval. There are various dates given for each poll, please
use enddate, i.e., the date the poll ended.
approval_polllist %>%
#convert end-date into "date" format:
mutate(date_poll = mdy(enddate)) %>%
#extract year from date
mutate(Year_poll = year(date_poll)) %>%
#get week number from date
mutate(week_no = isoweek(date_poll)) %>%
#filter out data for year 2022 and eliminate week 52
filter(Year_poll== 2022, week_no != 52) %>%
#week-wise average approval rate line plot for different sub-groups
group_by(subgroup,week_no) %>%
#get mean approval rate (difference of approve & disapprove), standard deviation of approval rate and total number of votes in each group
summarize(approval_rate = mean(approve - disapprove), approval_sd = sd(approve-disapprove), n = n()) %>%
ungroup(subgroup,week_no) %>%
#confidence interval
mutate(low = approval_rate - 1.96*approval_sd/sqrt(n)) %>%
mutate(high = approval_rate + 1.96*approval_sd/sqrt(n)) %>%
#Plot the graph of week number vs approval rate
ggplot(aes(x=week_no,y=approval_rate, color = subgroup))+
geom_line()+
facet_wrap(~subgroup, nrow = 3, strip.position = "right")+
xlim(0,35)+
geom_ribbon(aes(ymin=low,ymax=high), alpha = 0.3, fill= "orange", size = 0.8)+
theme_bw()+
theme(legend.position = "none")+
labs(title = "Biden's Net Approval Ratings in 2022",
subtitle = "Weekly Data, Approve - Disapprove, %",
x = "Week in 2022",
y = NULL,
caption = "Source: https://projects.fivethirtyeight.com/biden-approval-data/")
