What Is The State of Food Security and Nutrition in the US

For this assignment, we were given the task to investigate the state of food security and nutrition among children in the United States. Using the most recent data from Feeding America and the U.S. Census Bureau, my analysis explores how food insecurity, malnutrition and poverty intersect at the state level. We gathered child-level data on food insecurity rates and poverty prevalence to identify patterns and disparities across different states. My analysis will center on the relationship between poverty and access to adequate nutrition and how these challenges affect children’s long-term well-being and development. We will develop an impactful visualization to inform policymakers and support action toward more equitable access to food and resources.

# STEP 1 & STEP 2
# Load Libraries
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)
library(ggplot2)
library(ggrepel)
## Warning: package 'ggrepel' was built under R version 4.3.3
# Load Food Insecurity Data 
food_data <- read_excel("/Users/zigcah/Downloads/Food Insecurity Data.xlsx", sheet = "State")
food_2022 <- food_data %>%
  filter(Year == 2022) %>%
  select(State = `State Name`, Food_Insecurity_Rate = `Overall Food Insecurity Rate`) %>%
  mutate(Food_Insecurity_Percent = Food_Insecurity_Rate * 100)

# Load Child Poverty Data 
poverty_data <- read_excel("/Users/zigcah/Downloads/Children in poverty by age group & State.xlsx", sheet = "Kidscount Export")

# Filter and format by age groups
poverty_filtered <- poverty_data %>%
  filter(LocationType == "State", TimeFrame == 2022, DataFormat == "Percent") %>%
  filter(`Age group` %in% c("Birth to 5", "6 to 17")) %>%
  select(State = Location, AgeGroup = `Age group`, PovertyRate = Data) %>%
  mutate(PovertyRate = as.numeric(PovertyRate) * 100)

# Merge with food insecurity data
merged_data <- inner_join(poverty_filtered, food_2022, by = "State")

# Correlation Tests by Age Group
cat("### Correlation Results\n\n")
## ### Correlation Results
merged_data %>%
  group_by(AgeGroup) %>%
  summarise(
    correlation = cor(PovertyRate, Food_Insecurity_Percent, use = "complete.obs"),
    .groups = "drop"
  ) %>%
  knitr::kable(digits = 3)
AgeGroup correlation
6 to 17 0.805
Birth to 5 0.835

Visualization

# STEP 3 Visualization: Faceted Scatter Plot
ggplot(merged_data, aes(x = PovertyRate, y = Food_Insecurity_Percent, label = State)) +
  geom_point(color = "steelblue", size = 3) +
  geom_smooth(method = "lm", se = TRUE, color = "darkred", linetype = "dashed") +
  geom_text_repel(size = 3, max.overlaps = 100) +
  facet_wrap(~AgeGroup) +
  labs(
    title = "Food Insecurity vs. Child Poverty Rate by Age Group and State (2022)",
    x = "Child Poverty Rate [%]",
    y = "Food Insecurity Rate [%]",
    caption = "Data: Feeding America & Kids Count | Visualization: Biyag Dukuray"
  ) +
  theme_minimal(base_size = 14)
## `geom_smooth()` using formula = 'y ~ x'
## Warning: The following aesthetics were dropped during statistical transformation: label.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?
## The following aesthetics were dropped during statistical transformation: label.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?

Elevator Pitch

Hi, Mr.Senator, my analysis reveals a clear and troubling relationship between child poverty and food insecurity across all U.S. states. Children in both early childhood (ages 0–5) and school-age groups (6–17) experience significantly higher food insecurity especially in states with elevated poverty rates, with the trend especially strong among ages 0-5. While most states follow this upward trend, a few outliers such as California and New York demonstrate lower food insecurity despite moderate poverty, which is due to more robust food assistance programs. On the other hand, many southern states like Mississippi and Louisiana fall into the upper-right quadrant, reflecting both high poverty and food insecurity. This link highlights the urgent need for federal support to expand early childhood nutritional and anti-poverty programs in vulnerable regions, specifically in the South and Midwest. Investing in these children now will reduce long-term dependency, improve educational outcomes and strengthen the nation’s future workforce.