Congress today is older than it’s ever been with the median age of
the 118th Congress being 59 years old across all senators and
representatives. This is mainly due to the country’s aging population,
which is most apparent in the disproportionate influence of the baby
boomer generation. Congress being disproportionately older than American
population has consequences such as congress members being more likely
to introduce legislation that addresses senior issues, not focusing as
much on issues that are important to younger Americans, and struggling
when dealing with issues related to modern technology
Citation: Skelley, G. (2023, April 3). Congress today is older than it’s ever been. FiveThirtyEight. https://fivethirtyeight.com/features/aging-congress-boomers
Read in csv file as data frame
data <- read.csv("https://raw.githubusercontent.com/fivethirtyeight/data/refs/heads/master/congress-demographics/data_aging_congress.csv")
year column by extracting year from
start_datedata$party_code = as.character(data$party_code)
data$start_date = as.Date(data$start_date, format = "%Y-%m-%d")
data$year = as.numeric(format(data$start_date, '%Y'))
party_ref = tribble(
~party_code, ~party,
"100", "Democratic",
"112", "Conservative",
"200", "Republican",
"328", "Independent",
"329", "Independent Democrat",
"331", "Independent Republican",
"347", "Prohibitionist",
"356", "Union Labor",
"370", "Progressive",
"380", "Socialist",
"402", "Liberal",
"522", "American Labor",
"523", "American Labor (La Guardia)",
"537", "Farmer-Labor"
)
data = merge(data, party_ref)
yeardata = data %>%
select(congress, year, chamber, state_abbrev, party, age_years, generation) %>%
arrange(year)
head(data)
## congress year chamber state_abbrev party age_years generation
## 1 66 1919 House MS Democratic 57.11978 Missionary
## 2 66 1919 House GA Democratic 57.96030 Missionary
## 3 66 1919 House LA Democratic 49.19097 Missionary
## 4 66 1919 Senate AZ Democratic 44.46817 Missionary
## 5 66 1919 House AR Democratic 47.37577 Missionary
## 6 66 1919 House KY Democratic 41.27036 Missionary
Histogram
ggplot(data, aes(x = age_years)) +
geom_histogram(binwidth = 3) +
labs(
title = "Age of Congress Distribution",
x = 'Age',
y = 'Count') +
theme_classic()
Time Series Plot
data %>%
group_by(year) %>%
summarise(med_age = median(age_years)) %>%
ggplot(mapping = aes(x = year, y = med_age)
) +
geom_line() +
labs(
title = "Median Age of Congress Overtime",
x = 'Year',
y = 'Median Age') +
theme_classic()
Multiple Time Series Plot
data %>%
group_by(year, chamber) %>%
summarise(med_age = median(age_years), .groups="keep") %>%
ggplot(aes(x = year, y = med_age, color = chamber)
) +
geom_line() +
labs(
title = "Median Age of Congress by Chamber Overtime",
x = 'Year',
y = 'Median Age',
color = 'Chamber') +
theme_classic()
100% Stacked Bar Chart
count_gen_data = data %>%
group_by(year, generation) %>%
tally()
count_gen_data %>%
group_by(year) %>%
mutate(percent_gen = n / sum(n) * 100) %>%
ggplot(
aes(x = year, y = percent_gen, fill = generation)
) +
geom_col() +
labs(
title = "Generation Distribution per Congress",
x = 'Year',
y = 'Percent of Congress',
color = 'Generation') +
theme_classic()
To further investigate why congress is older than ever before, I would extend the work outlined to include demographic data, specifically age, of the voting population (at the time of voting) for each congress member. This will help to verify if older voters are more likely to vote and prefer people from their own age group. In addition, I would include data on technology proficiency for each member of congress to assess the level of unfamiliarity congress members have with modern technology. Lastly, it would be insightful to include other demographic values for all senators and representatives (such as gender and race) to further expand this analysis and identify potential other disproportionate demographic values being represented in congress and how it has changed overtime.