The United States Congress represents the citizens of the United States. As such, they are expected to be representative of the average American citizen. However, due to obvious factors like the need to gain the skills, knowledge, temperament and name recognition necessary to run for and win an election, the average age of Congress members has always been older than the average American. The high population growth during the Boomer generation has led to the current congress being the oldest one in history. More information can be found in the following article:
https://fivethirtyeight.com/features/aging-congress-boomers/:
#Let's shorten this table by averaging the age of the entire Congress per session
aging_congress <- read_csv("https://raw.githubusercontent.com/fivethirtyeight/data/master/congress-demographics/data_aging_congress.csv")
## Rows: 29120 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): chamber, state_abbrev, bioname, bioguide_id, generation
## dbl (6): congress, party_code, cmltv_cong, cmltv_chamber, age_days, age_years
## date (2): start_date, birthday
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
aging_congress_subset <- aging_congress[c(1,3,11,12)]
glimpse(aging_congress_subset)
## Rows: 29,120
## Columns: 4
## $ congress <dbl> 82, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, …
## $ chamber <chr> "House", "House", "House", "House", "House", "House", "House…
## $ age_days <dbl> 19626, 14106, 14837, 15567, 16298, 17028, 17759, 18489, 1922…
## $ age_years <dbl> 53.73306, 38.62012, 40.62149, 42.62012, 44.62149, 46.62012, …
The code above gives us the dimensions of the large dataset. That dataset is extremely large and is not easily read. However, using the dplyr :: glimpse function we can see it’s dimensions. We can see it has 4 columns and 29,120 rows. Those columns represent the number Congress they served in, the specific chamber of Congress they were part of, their age in days and, finally, their age in years. The rows detail the different congressmen collected.
Since the above dataset is too large to print and not easily read, we can try making a smaller table to help us be able to take a look at this data.
average_age_congress <- aggregate(age_years ~ congress, aging_congress_subset, mean)
kable(average_age_congress,
row.names = TRUE,
col.names = c("# Congress", "Average Age"),
table.attr = "style='width:30%;'")
| # Congress | Average Age | |
|---|---|---|
| 1 | 66 | 51.73002 |
| 2 | 67 | 52.60360 |
| 3 | 68 | 52.56625 |
| 4 | 69 | 53.22577 |
| 5 | 70 | 53.95525 |
| 6 | 71 | 54.61430 |
| 7 | 72 | 54.39717 |
| 8 | 73 | 53.45225 |
| 9 | 74 | 52.60445 |
| 10 | 75 | 52.50597 |
| 11 | 76 | 52.34120 |
| 12 | 77 | 52.40562 |
| 13 | 78 | 53.15972 |
| 14 | 79 | 53.51016 |
| 15 | 80 | 52.59263 |
| 16 | 81 | 52.69689 |
| 17 | 82 | 53.24015 |
| 18 | 83 | 53.19028 |
| 19 | 84 | 53.39559 |
| 20 | 85 | 54.19333 |
| 21 | 86 | 53.16789 |
| 22 | 87 | 53.60106 |
| 23 | 88 | 52.95704 |
| 24 | 89 | 52.20452 |
| 25 | 90 | 52.43809 |
| 26 | 91 | 52.71952 |
| 27 | 92 | 53.07843 |
| 28 | 93 | 52.40800 |
| 29 | 94 | 51.28931 |
| 30 | 95 | 50.60187 |
| 31 | 96 | 50.00601 |
| 32 | 97 | 49.51691 |
| 33 | 98 | 50.02744 |
| 34 | 99 | 51.04766 |
| 35 | 100 | 51.84557 |
| 36 | 101 | 52.66166 |
| 37 | 102 | 53.81787 |
| 38 | 103 | 52.92735 |
| 39 | 104 | 52.68546 |
| 40 | 105 | 53.07348 |
| 41 | 106 | 54.13965 |
| 42 | 107 | 54.71521 |
| 43 | 108 | 55.43003 |
| 44 | 109 | 56.51792 |
| 45 | 110 | 57.29550 |
| 46 | 111 | 57.79102 |
| 47 | 112 | 57.63021 |
| 48 | 113 | 57.52962 |
| 49 | 114 | 57.89433 |
| 50 | 115 | 58.77052 |
| 51 | 116 | 58.43788 |
| 52 | 117 | 58.83102 |
| 53 | 118 | 58.55512 |
This table is still a little long to scan quickly so we can shorten that into a table showing only every third Congress. Hopefully, the overall trend will remain the same.
subset_average <- average_age_congress %>% slice(which(row_number() %% 3 == 1))
kable(subset_average,
row.names = TRUE,
col.names = c("# Congress", "Average Age"),
table.attr = "style='width:30%;'")
| # Congress | Average Age | |
|---|---|---|
| 1 | 66 | 51.73002 |
| 2 | 69 | 53.22577 |
| 3 | 72 | 54.39717 |
| 4 | 75 | 52.50597 |
| 5 | 78 | 53.15972 |
| 6 | 81 | 52.69689 |
| 7 | 84 | 53.39559 |
| 8 | 87 | 53.60106 |
| 9 | 90 | 52.43809 |
| 10 | 93 | 52.40800 |
| 11 | 96 | 50.00601 |
| 12 | 99 | 51.04766 |
| 13 | 102 | 53.81787 |
| 14 | 105 | 53.07348 |
| 15 | 108 | 55.43003 |
| 16 | 111 | 57.79102 |
| 17 | 114 | 57.89433 |
| 18 | 117 | 58.83102 |
We can now plot both those tables to see if their trend is the same or if we lost too much by trimming this data.
#we can plot these tables to see their trend
ggplot(data = average_age_congress, mapping = aes(x = congress, y = age_years)) +
geom_point()
ggplot(data = subset_average, mapping = aes(x = congress, y = age_years)) +
geom_point()
Using the above tables and plots we can easily see that while at the beginning of the collected data the average age of Congress stayed within a certain range, recently that number has been rising fast. This can be due to a variety of reasons but is likely due to the huge population jump during the Boomer generation. Assuming this is indeed a major contributing factor, we can expect this number to come down as the Boomer generation loses their impact on the vote.
The ramifications of an older Congress can be quite large. We live in a world evolving at a very rapid pace. Older people typically have a lower understanding of new technology. As those new technologies become a bigger part of our lives, we would prefer the people representing us in government to understand them.
For additional research, we can next import the average age of US citizens during the same time period as these Congressmen and check their correlation. We can also use that correlation to try to predict the age of future Congressmen based on current population data.
Sources:
data/congress-demographics at master · fivethirtyeight/data (github.com)