Story - 1 : Infrastructure Investment & Jobs Act Funding Allocation

The allocation of funds under the Infrastructure Investment & Jobs Act represents a significant federal investment aimed at improving infrastructure across the United States. Understanding the distribution of these funds can shed light whether allocation is equitable and if it favor the political interests of the Biden administration.

This report utilizes data on the IIJA funding allocation (2023), 2023 population estimates for each states and territory, and the 2020 Presidential election results. Through a series of visualizations, we will identify any patterns or discrepancies in the distribution of funds and if the allocation demonstrates any bias.

Is the allocation equitable based on the population of each of the States and Territories, or is bias apparent?

Load Dataset

In addition to the provided IIJA Funds dataset, I have sourced the United States population in 2023 from United States Census and the 2020 US Presidential Election Results from Kaggle.

library(dplyr)
library(ggplot2)
library(stringr)
# Load dataset

fund <- read.csv("https://raw.githubusercontent.com/suswong/DATA-608/main/IIJA%20FUNDING%20AS%20OF%20MARCH%202023.csv")%>%
  select("Name","Total_Funds")

population <- read.csv(("https://raw.githubusercontent.com/suswong/DATA-608/main/NST-EST2023-ALLDATA.csv")) %>%
  select("NAME","POPESTIMATE2023")

election <- read.csv("https://raw.githubusercontent.com/suswong/DATA-608/main/voting.csv")

# In order to merge the data by State, lowercase the State names
fund$Name <- tolower(fund$Name)
population$NAME <- tolower(population$NAME)
election$state <- tolower(election$state)

# Merge data by State Name
combined_df <- merge(fund,population, by.x = "Name", by.y = "NAME")
combined_df <- merge(combined_df,election, by.x = "Name", by.y = "state")
combined_df$Name <- str_to_title(combined_df$Name)

US Population by State

States vary significantly in population size. The following states has the highest population: California, Texas, Florida, New York, and Pennsylvania. The following states has the lowest population: Wyoming, Vermont, District of Columbia, Alaska, North Dakota, and South Dakota.

ggplot(combined_df, aes(x = reorder(Name, -POPESTIMATE2023), y = POPESTIMATE2023)) +
  geom_bar(stat = "identity") +
  labs(title = "US Population of Each State (2023)",
       x = "State",
       y = "Population",
       caption = "The bar chart shows the population for each state from greatest to least.") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Total Fundings V. Population Per State

The scatter plot demonstrates a linear relationship between total funds allocated and population by state, indicating that larger states generally receive more funding. However, this analysis does not assess the equity of the funding distribution. To evaluate equity, we need to calculate per capita funding, which will provide insights into how fairly funds are allocated relative to the population of each state.

ggplot(combined_df, aes(x = POPESTIMATE2023, y = Total_Funds)) +
  geom_point(size = 3)  +  
  geom_smooth(method = "lm", se = FALSE, color = "gray")+
  scale_color_manual(values = c("Biden" = "blue", "Trump" = "red"), name = "2020 Election Results") +
  labs(title = "Total Funds vs. Population by State",
       x = "Population",
       y = "Total Funds (USD)")  +
  theme_minimal() 
## `geom_smooth()` using formula = 'y ~ x'

Funding Allocation Per Capita

States vary significantly in population size. Comparing total funds alone can be misleading, as states with larger population size may receive more funding due to their size. In order to make a fair comparison across the states, we calculate per capital funding by divding the total funds by the population for each state. We can properly view if the distribution of the funds is proportional to the population size.

# Create a column for Per Capital
combined_df$PER_CAPITA = round(combined_df$Total_Funds/combined_df$POPESTIMATE2023,0)

combined_df$winner <- ifelse(combined_df$biden_win == 1, "Biden", "Trump")

median_PER_CAPITA <- median(combined_df$PER_CAPITA)
print(paste("The mdiean fundings per capita is", median_PER_CAPITA))
## [1] "The mdiean fundings per capita is 573.5"

Funding Allocation Per Capita by State

The bar chart shows the Per Capita Funding for each state from greatest to least.

The following states received the most IIJA funds per capita: Alaska, Wyoming, Montana, and North Dakota. These states happens to contain the least populations in US. Alaska and Montana are among the largest states by area.

The following states received the least IIJA funds per capita: Florida, North Carolina, South Carolina, and Maryland. Some of these states has the highest population in US.

These indicates that the allocation is not equitable since states with a large population receives less funding per capita than a smaller state.

In addition, the top 4 states with the highest IIJA funds per capita went to Trump despite, Biden being the winner of the Election.

An equitable funding distribution in the bar chart would appear as evenly sized bars, indicating fair allocation across states; however, the plot shows significant disparities.

ggplot(combined_df, aes(x = reorder(Name, -PER_CAPITA), y = PER_CAPITA, fill = winner)) +
  geom_bar(stat = "identity") +
  scale_fill_manual(values = c("Biden" = "blue", "Trump" = "red"), name = "2020 Election Results" ) +
  labs(title = "Per Capita IIJA Funding by State",
       x = "State",
       y = "Per Capita Funding (USD)") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 80, hjust = 1))

Funding Allocation Per Capita V. Population by State

ggplot(combined_df, aes(x = POPESTIMATE2023, y = PER_CAPITA, color = winner)) +
  geom_point(size = 3) +
  geom_text(aes(label = ifelse(PER_CAPITA > 1000,state_abr,"")), hjust = 1.1, vjust = 1.1) +  
  scale_color_manual(values = c("Biden" = "blue", "Trump" = "red"), name = "2020 Election Results") +
  labs(title = "Per Capita IIJA Funding vs. Population by State",
       x = "Population",
       y = "Per Capita Funding (USD)")  +
  theme_minimal() 

Does the allocation favor the political interests of the Biden administration?

The per capita funding for most states is below $1000.

The red dots representing Trump won states cluster around lower percentage votes for Biden. There are 6 states (outliers) that receive significantly higher per capita funding.

The blue dots representing Biden won states cluster around higher percentage votes for Biden. These states mostly receives a more consistent level of per capita funding around $1000 or lower.

The allocation of IIJA funding per capita did not seem to favor the political interests of the Biden administration.

ggplot(combined_df, aes(x = biden_pct, y = PER_CAPITA, color = winner)) +
  geom_point(size = 3) +
  geom_text(aes(label = ifelse(PER_CAPITA > 1000,state_abr,"")), hjust = 1.1, vjust = 1.1) +  
  scale_color_manual(values = c("Biden" = "blue", "Trump" = "red"), name = "2020 Election Results") +
  labs(title = "Per Capita IIJA Funding vs. 2020 Biden Vote Percentage",
       x = "Biden % of Vote (2020)",
       y = "Per Capita Funding (USD)") +
  geom_hline(yintercept = 1000) +
  theme_minimal() 

# Calculate Pearson correlation coefficient
correlation <- cor(combined_df$biden_pct, combined_df$PER_CAPITA)
print(paste("Pearson correlation coefficient:", correlation))
## [1] "Pearson correlation coefficient: -0.218165936985201"

Conclusions

The allocation of IIJA funding per capita is not equitable since some states with a large population receives less funding per capita than a smaller state. For example, Alaska, which the largest state by area and has the least population size, received more funding per capita. California is among the states that is highly populated but received less funding per capita.

The allocation of IIJA funding per capita did not seem to favor the political interests of the Biden administration.