Story - 6 : What Is The State of Food Security and Nutrition in the US
The analysis explores correlations between poverty, food insecurity, and long-term developmental outcomes, demonstrating how food-insecure children often face barriers to becoming fully functional adults, requiring continued support. Visualizations will provide policymakers with actionable insights, underscoring the urgency of addressing food insecurity at home through targeted policy solutions. Data - https://www.ers.usda.gov/data-products/food-environment-atlas/data-access-and-documentation-downloads/
library(ggplot2)
library(dplyr)
library(usmap)
library(tidyverse)
library(dplyr)
library(tidyr)
library(patchwork)
library(RColorBrewer)
data <- read.csv("https://raw.githubusercontent.com/Angelogallardo05/Data-608-story-6/refs/heads/main/StateAndCountyData.csv")
The first map shows average food insecurity rates across U.S. states from 2015 to 2017. States are shaded according to their food insecurity levels, with darker shades indicating higher rates. The highest levels of food insecurity, exceeding 15%, are concentrated in the southeastern United States, including Mississippi, Louisiana, and Arkansas, as well as in New Mexico. These areas correspond to regions with higher poverty, as shown in the second graph. Conversely, states in the Northeast, Midwest, and parts of the West, such as Massachusetts, Minnesota, and Utah, exhibit lighter shading, indicating food insecurity rates below 10%.
food_insec <- data %>%
filter(Variable_Code == "FOODINSEC_15_17") %>%
group_by(State) %>%
summarize(Food_Insecurity = mean(Value, na.rm = TRUE))
food_insec <- food_insec %>%
rename(state = State)
food_insec$state <- toupper(food_insec$state)
plot_usmap(data = food_insec, values = "Food_Insecurity", regions = "states") +
scale_fill_continuous(
low = "lightyellow", high = "red", name = "Food Insecurity Rate"
) +
labs(
title = "Food Insecurity by State (2015-2017)",
subtitle = "Average food insecurity rates across U.S. states",
caption = "Data Source: State and County Data"
) +
theme_minimal()
The chart demonstrates a relationship between poverty and food insecurity, with high-poverty states experiencing elevated rates of both, indicating that economic hardship strongly impacts food access. In contrast, low-poverty states generally show lower food insecurity rates, though some states like California and Oregon still exhibit moderate food insecurity, possibly due to factors like high living costs or unequal resource distribution. This suggests that while poverty reduction is critical to addressing food insecurity, additional measures targeting food access and affordability are necessary to fully resolve the issue.
comparison_data <- data %>%
filter(Variable_Code %in% c("FOODINSEC_15_17", "POVRATE15")) %>%
pivot_wider(names_from = Variable_Code, values_from = Value) %>%
rename(
Food_Insecurity = FOODINSEC_15_17,
Poverty_Rate = POVRATE15
)
comparison_data <- comparison_data %>%
distinct(State, .keep_all = TRUE)
state_stats <- comparison_data %>%
group_by(State) %>%
summarize(
Average_Poverty_Rate = mean(Poverty_Rate, na.rm = TRUE),
Average_Food_Insecurity = mean(Food_Insecurity, na.rm = TRUE)
)
poverty_median <- median(state_stats$Average_Poverty_Rate, na.rm = TRUE)
state_stats <- state_stats %>%
mutate(Poverty_Level = ifelse(Average_Poverty_Rate >= poverty_median, "High Poverty", "Low Poverty"))
state_stats <- state_stats %>%
arrange(Poverty_Level, desc(Average_Poverty_Rate)) %>%
mutate(State = factor(State, levels = State))
comparison_data_long <- comparison_data %>%
pivot_longer(cols = c(Food_Insecurity, Poverty_Rate),
names_to = "Variable",
values_to = "Value") %>%
left_join(state_stats, by = "State") %>%
mutate(
State = factor(State, levels = state_stats$State)
)
ggplot(comparison_data_long, aes(x = State, y = Value, fill = Variable)) +
geom_bar(stat = "identity", position = "dodge") +
facet_wrap(~ Poverty_Level, scales = "free_y") + # Split graph by poverty level
coord_flip() + # Flip axes for better readability
labs(
title = "Comparison of Food Insecurity and Poverty Rate by State",
x = "State",
y = "Rate (%)",
fill = "Variable",
caption = "Data Source: State and County Data"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5),
strip.text = element_text(size = 12, face = "bold"),
axis.text.x = element_text(angle = 90, hjust = 1)
)
The graph highlights the top 10 states with the highest SNAP participation rates, led by Washington, D.C., Mississippi, and New Mexico, all exceeding 20%. The demographic breakdown shows that in these states, SNAP recipients are predominantly under 18, with the highest proportions in Mississippi and Louisiana. Meanwhile, states like Maine and Alabama show a relatively higher percentage of older adults (65+) relying on SNAP benefits. This indicates that SNAP usage varies not only by state but also by age group, with children forming the largest beneficiary group in most states. These findings emphasize the critical role SNAP plays in supporting vulnerable populations, particularly children, and highlight the need for tailored policy measures to address the unique needs of older adults in specific states.
state_data <- data %>%
filter(Variable_Code %in% c(
"PCT_18YOUNGER10", "PCT_65OLDER10", "PCT_SNAP12"
)) %>%
pivot_wider(names_from = Variable_Code, values_from = Value) %>%
group_by(State) %>%
summarize(across(where(is.numeric), mean, na.rm = TRUE))
top_10_states <- state_data %>%
arrange(desc(PCT_SNAP12)) %>%
slice(1:10)
state_long_demographics <- top_10_states %>%
pivot_longer(
cols = c(PCT_18YOUNGER10, PCT_65OLDER10),
names_to = "Demographic",
values_to = "Percentage"
) %>%
mutate(State = factor(State, levels = top_10_states$State)) %>%
mutate(
Demographic = case_when(
Demographic == "PCT_18YOUNGER10" ~ "Under 18",
Demographic == "PCT_65OLDER10" ~ "65 and Older",
TRUE ~ Demographic
)
)
p1 <- ggplot(top_10_states, aes(x = reorder(State, -PCT_SNAP12), y = PCT_SNAP12)) +
geom_bar(stat = "identity", fill = "skyblue") +
coord_flip() +
labs(
title = "Top 10 States by SNAP Participation",
x = "State",
y = "SNAP Participation Rate (%)",
caption = "Data Source: U.S. Census and SNAP Data"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
axis.text.y = element_text(size = 8)
)
p2 <- ggplot(state_long_demographics, aes(x = State, y = Percentage, fill = Demographic)) +
geom_bar(stat = "identity", position = "stack", width = 0.7) +
scale_fill_brewer(palette = "Set3") +
coord_flip() +
labs(
title = "Demographics of Top 10 States with Highest SNAP Participation",
x = "State",
y = "Percentage",
fill = "Demographic Group"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
axis.text.y = element_text(size = 8),
legend.position = "bottom",
legend.title = element_text(size = 10),
legend.text = element_text(size = 8)
)
combined_plot <- p1 / p2
combined_plot