Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

## Briefly

A quick look at the voting behavior of the 30 House Democrats that represent congressional districts carried by Trump in 2016 – relative to other House members. Using Rvoteview. For a more in-depth account of the characteristics of front-line House Democrats in the 116th Congress, see this post.

## Front-line House Democrats

I have been going on about the House of Representatives lately, especially Democrats representing Trump districts. These guys are so important for any number of reasons. They define the Democratic majority in the House. They are the few remaining moderate voices in the House, from either party. But they are super-vulnerable. Over 2/3s of them are freshman members. Again, their constituents supported Trump in 2016. And they could be trying to defend their seats in 2020 with a Democratic Socialist atop the ticket.

I have posted a list of the 30 front-liners as a simple csv, cached as a part of the uspoliticalextras data package. It is available at the link below.

library(tidyverse)
url1 <- 'https://raw.githubusercontent.com/jaytimm/uspoliticalextras/master/clean-data-sets/thirty-one-house-democrats.csv'
fl <- read.csv(url(url1)) 

## Ideologies in the 116th

So, using the Rvoteview (!) package, we obtain DW-Nominate scores for all members in the 116th House. This session is still in progress, so these numbers will change depending on when they are accessed.

x116 <- Rvoteview::member_search (chamber = 'House', congress = 116) %>%
mutate(label = gsub(', .*$', '', bioname), party_code = ifelse(bioname %in% fl$house_rep, 'xx', party_code),
party_name = ifelse(bioname %in% fl$house_rep, 'Frontline Dems', 'Other Dems')) The plot below summarizes voting behaviors as approximated by DW-Nominate scores in two dimensions. Here, our focus is on the first dimension (ie, the x-axis). The 30 front-liners are marked in orange. In the aggregate, then, they vote more moderately than their non-front-line Democrat peers. p <- x116 %>% ggplot(aes(x=nominate.dim1, y=nominate.dim2, label = label )) + annotate("path", x=cos(seq(0,2*pi,length.out=300)), y=sin(seq(0,2*pi,length.out=300)), color='gray', size = .25) + geom_point(aes(color = as.factor(party_code)), size= 2.5, shape= 17) + theme_bw() + ggthemes::scale_color_stata() + theme(legend.position = 'none') + labs(title="DW-Nominate ideology scores for the 116th US House", subtitle = '30 front-line House Democrats in orange') p ## Focusing on Democrats Next, we home in a bit on House Democrats. To add some context to the above plot, we calculate quartiles for DW-Nominate scores among Democrats. These are summarized in table below, ranging from progressive to moderate. dems <- x116 %>% filter(party_code %in% c('xx', '100')) qq <- data.frame(x = quantile(dems$nominate.dim1, probs = seq(0, 1, 0.25)),
stringsAsFactors = FALSE)

qq %>% knitr::kable()
x
0% -0.7620
25% -0.4405
50% -0.3780
75% -0.2860
100% -0.0670

We add these quartiles to the plot below, and label front-line House Democrats. Again, front-liners cluster as a group in terms of roll call voting behavior. The most notable exception to this pattern is Lauren Underhood (IL-14). She won her district by five points in 2018, and Trump won the district by 4 points in 2016. It would appear, then, that her voting behavior and the political ideology of her constituents do not especially rhyme. In other words, she represents a Trump district and votes like a progressive.

p1 <- p +
xlim(-1, 0) +
geom_vline(xintercept = qq$x, linetype = 2, color = 'gray') + ggrepel::geom_text_repel( data = filter(x116, bioname %in% fl$house_rep),
nudge_y =  -0.005,
direction = "y",
hjust = 0,
size = 2.5)

p1

The table below summarizes counts of Democrats by front-line status & ideology quartile. So, roughly 3/4 of front-liners vote in the most moderate Democratic quartile in the House. And all but Underwood are in top 50%.

dems1 <- dems %>%
mutate(qt = ntile(nominate.dim1, 4))

dems1 %>%
group_by(party_name, qt) %>%
count() %>%
group_by(party_name) %>%
mutate(per = round(n/sum(n)*100, 1)) %>%
knitr::kable(booktabs = T, format = "html") %>%
kableExtra::kable_styling() %>%
kableExtra::row_spec(3,
background = "#e4eef4")
party_name qt n per
Frontline Dems 1 1 3.3
Frontline Dems 3 6 20.0
Frontline Dems 4 23 76.7
Other Dems 1 58 28.3
Other Dems 2 59 28.8
Other Dems 3 53 25.9
Other Dems 4 35 17.1