Overview of Project

Research questions

  • Which of the community areas in Chicago have the highest and lowest participation in SNAP and TANF programs?

  • What is the relationship between various demographic factors (race, income, education level) and access to healthy food in each of Chicago’s 77 community areas to the level of participation in SNAP and TANF?

Significance

Our project is aimed at providing statistical information and basic analysis to activists and advocates in community areas, to provide an additional resource to sway policy-makers to invest in disinvested communities. Showing how public investments might improve a community area’s economic stability and opportunity could influence decision makers to prioritize community areas that have historically not received appropriate resources.

Chicago is a historically inequitable city. According to the Urban Institute, “Chicago typifies wealth inequity, with many households in northeast Cook County holding nearly $1 million dollars in wealth, while just a few miles away, a quarter of households have negative wealth of $1,500 or less”. The differences in opportunity are not limited to monetary factors, “Racial segregation, concentrated poverty, and physical deterioration of neighborhoods continues to define conditions of inequality across Chicago neighborhoods” (Great Cities Institute, Economic Hardship Index).

Data plan

We accessed data from the Chicago Health Atlas which reports statistics from each of the 77 Chicago Community Areas. Below are the variables we will analyze to answer our research questions. The first two variables will be our Dependent Variables, and the remaining will be Independent Variables. Our unit of analysis is the community area, in the time-frame of 2016-2020.

We expect that SNAP and TANF participation rates will be negatively correlated with income, based on their intended audience of people with low income. Similarly, we expect that poverty rate will be positively correlated with participation in public benefits. We expect high school and college graduation rates to be negatively correlated with public benefits participation. As a community area’s overall education level increases, they are likely to have greater economic opportunities and less need for use of public benefits. We predict that community areas with low food access will have high public benefit participation, as these are the areas that historically do not receive economic investment.

Summary Statistics

summary_stats <-
sumtable(data, 
         digits = 2, 
         fixed.digits = TRUE, 
         summ = c('min(x)',
                  'pctile(x)[25]',
                  'pctile(x)[50]',
                  'mean(x)',
                  'pctile(x)[75]',
                  'max(x)'),
         summ.names = c("Min", 
                        "1st Qu.", 
                        "Median", 
                        "Mean", 
                        "3rd Qu.", 
                        "Max."),
         vars = c("tanf",
                  "snap_participant", 
                  "poverty",
                  "median_income",
                  "pct_poc",                  
                  "grad_hs",
                  "grad_coll",
                  "low_food"))
         
summary_stats
Summary Statistics
Variable Min 1st Qu. Median Mean 3rd Qu. Max.
tanf 0.67 2.03 3.29 3.49 4.60 9.41
snap_participant 1.49 9.22 17.50 21.52 32.77 61.52
poverty 3.26 10.85 15.62 19.16 25.82 47.72
median_income 20528.00 42281.00 58905.00 64170.70 77608.00 147366.00
pct_poc 17.27 50.90 85.25 72.01 95.86 99.17
grad_hs 59.19 78.91 86.33 84.66 91.80 98.10
grad_coll 6.43 16.29 27.95 33.96 43.65 85.55
low_food 0.00 5.77 22.25 29.37 49.15 99.85

Analysis

Exploratory Overview

An exploratory overview of the data will allow us to answer which communities have the highest and lowest levels of participation in public benefit programs. These are illustrated in tables below that show statistical information the five community areas with the highest and lowest levels of poverty and participation in public benefit programs.

To examine the relationship between community factors and benefit participation, we will visualize a series of regressions to uncover the strength and nature of these relationships. These will follow later in the report. Each chart will have community areas that stand out as most distant from the regression line labelled.

Highest and Lowest Poverty Rates

data %>%
  arrange(desc(poverty)) %>%
  slice(1:5, 73:77) %>%
  select(name,
         poverty,
         tanf,
         snap_participant,
         poverty,
         inc_2016_2020,
         pct_poc,
         grad_hs,
         grad_coll,
         low_food) %>%
  kable(caption = "Highest and Lowest Poverty Rates",
        col.names = c("Community Area",
                      "Poverty %",
                      "TANF %",
                      "SNAP %",
                      "Median Income",
                      "% BIPOC",
                      "% HS Grad",
                      "% Coll Grad",
                      "% Low Food"),
        format.args = list(big.mark = ","),
        align = "lrrrrrrr") %>%
  kable_styling(bootstrap_options = "striped", full_width = F, fixed_thead = TRUE) %>%
  row_spec(0, bold = TRUE, background = "black", color = "white") %>%
  column_spec(1, border_right = TRUE) %>%
  group_rows("Highest Poverty Rates", 1, 5, label_row_css = "background-color: grey; color: white") %>%
  group_rows("Lowest Poverty Rates", 6, 10, label_row_css = "background-color: grey; color: white")
Highest and Lowest Poverty Rates
Community Area Poverty % TANF % SNAP % Median Income % BIPOC % HS Grad % Coll Grad % Low Food
Highest Poverty Rates
Riverdale 47.72 7.88 61.52 $22,815 98.94 86.35 6.43 99.85
Fuller Park 47.48 4.25 57.34 $20,528 95.17 77.15 11.18 97.10
East Garfield Park 45.46 6.86 45.90 $25,899 93.91 78.17 18.81 52.34
Washington Park 42.30 2.77 43.60 $26,690 98.35 83.65 17.94 65.46
Englewood 40.86 9.41 48.34 $24,776 98.81 76.51 8.87 22.25
Lowest Poverty Rates
Beverly 6.27 1.70 3.05 $117,655 43.52 97.56 57.02 50.25
Mount Greenwood 4.60 0.69 2.37 $104,687 18.92 95.31 39.88 62.78
North Center 4.40 0.82 3.75 $143,917 25.35 96.58 77.49 15.90
Forest Glen 4.05 2.13 3.89 $134,176 25.97 94.70 59.13 17.52
Edison Park 3.26 0.69 1.49 $118,472 17.27 95.65 49.53 26.39

Highest and Lowest SNAP Participation Level

data %>%
  arrange(desc(snap_participant)) %>%
  slice(1:5, 73:77) %>%
  select(name,
         snap_participant,
         poverty,
         inc_2016_2020,
         pct_poc,
         grad_hs,
         grad_coll,
         low_food) %>%
  kable(caption = "Highest and Lowest SNAP Participation",
        col.names = c("Community Area",
                      "SNAP %",
                      "Poverty %",
                      "Median Income",
                      "% BIPOC",
                      "% HS Grad",
                      "% Coll Grad",
                      "% Low Food"),
        format.args = list(big.mark = ","),
        align = "lrrrrrrrr") %>%
  kable_styling(bootstrap_options = "striped", full_width = F, fixed_thead = TRUE) %>%
  row_spec(0, bold = TRUE, background = "black", color = "white") %>%
  column_spec(1, border_right = TRUE)%>%
  group_rows("Highest SNAP Participation", 1, 5, label_row_css = "background-color: grey; color: white") %>%
  group_rows("Lowest SNAP Participation", 6, 10, label_row_css = "background-color: grey; color: white")
Highest and Lowest SNAP Participation
Community Area SNAP % Poverty % Median Income % BIPOC % HS Grad % Coll Grad % Low Food
Highest SNAP Participation
Riverdale 61.52 47.72 $22,815 98.94 86.35 6.43 99.85
Fuller Park 57.34 47.48 $20,528 95.17 77.15 11.18 97.10
West Garfield Park 49.37 36.23 $30,319 97.08 74.56 7.29 0.05
Englewood 48.34 40.86 $24,776 98.81 76.51 8.87 22.25
East Garfield Park 45.90 45.46 $25,899 93.91 78.17 18.81 52.34
Lowest SNAP Participation
Beverly 3.05 6.27 $117,655 43.52 97.56 57.02 50.25
Lincoln Park 2.98 8.86 $147,366 20.18 98.10 85.55 4.68
Mount Greenwood 2.37 4.60 $104,687 18.92 95.31 39.88 62.78
Loop 1.83 9.50 $122,854 41.35 96.05 82.44 0.00
Edison Park 1.49 3.26 $118,472 17.27 95.65 49.53 26.39

Highest and Lowest TANF Participation Level

data %>%
  arrange(desc(tanf)) %>%
  slice(1:5, 73:77) %>%
  select(name,
         tanf,
         poverty,
         inc_2016_2020,
         pct_poc,
         grad_hs,
         grad_coll,
         low_food) %>%
  kable(caption = "Highest and Lowest TANF Rates",
        col.names = c("Community Area",
                      "TANF %",
                      "Poverty %",
                      "Median Income",
                      "% BIPOC",
                      "% HS Grad",
                      "% Coll Grad",
                      "% Low Food"),
        format.args = list(big.mark = ","),
        align = "lrrrrrrrr") %>%
  kable_styling(bootstrap_options = "striped", 
                full_width = F, 
                fixed_thead = TRUE) %>%
  row_spec(0, bold = TRUE, 
           background = "black", 
           color = "white") %>%
  column_spec(1, border_right = TRUE) %>%
  group_rows("Highest TANF Participation", 1, 5, 
             label_row_css = "background-color: grey; 
             color: white") %>%
  group_rows("Lowest TANF Participation", 6, 10, 
             label_row_css = "background-color: grey; 
             color: white")
Highest and Lowest TANF Rates
Community Area TANF % Poverty % Median Income % BIPOC % HS Grad % Coll Grad % Low Food
Highest TANF Participation
Englewood 9.41 40.86 $24,776 98.81 76.51 8.87 22.25
Riverdale 7.88 47.72 $22,815 98.94 86.35 6.43 99.85
West Englewood 7.73 32.28 $30,204 98.54 80.06 10.71 63.50
East Garfield Park 6.86 45.46 $25,899 93.91 78.17 18.81 52.34
Greater Grand Crossing 6.65 33.41 $34,324 99.17 86.27 18.88 10.56
Lowest TANF Participation
Burnside 0.91 11.67 $41,756 97.48 85.84 21.81 94.25
North Center 0.82 4.40 $143,917 25.35 96.58 77.49 15.90
Mount Greenwood 0.69 4.60 $104,687 18.92 95.31 39.88 62.78
Edison Park 0.69 3.26 $118,472 17.27 95.65 49.53 26.39
O’Hare 0.67 10.85 $63,096 32.64 90.81 40.53 75.77

Englewood, Riverdale, and the Garfield Park community areas appear as being in the top 5 community areas by household participation in both SNAP and TANF.

Mount Greenwood and Edison Park are the only two community areas that are in the lowest 5 community areas for participation in both SNAP and TANF participation.

SNAP participation overall is significantly higher than TANF participation, a possible result of stricter eligibility requirements to receive TANF.

Income and Poverty

Below is the quadratic regression between SNAP participation rate and median household income. As expected there is a negative relationship between these two variables, SNAP is intended for people with low income and participation would be expected to drop as a community area’s income increases.

O’Hare and Hyde Park are the two community areas farthest below the regression line, indicating that these areas are not receiving as much SNAP as expected based on their income levels.

# Adding labels to identify farthest points from regression line as focus of graph
d <- data
data$median_income_sq = data$median_income^2
fit <- lm(snap_participant ~ median_income + median_income_sq, data = data)
d$predicted <- predict(fit)
d$residuals <- residuals(fit) 

snapslice <- d %>%
  arrange(residuals) %>%
  slice(1:5, 73:77)

d %>%
  ggplot(aes(x = median_income, 
             y = snap_participant)) +
  geom_point() +
  stat_smooth(se = FALSE, 
              method = "loess", 
              formula ="y ~ x") +
  geom_text(data = snapslice,
            aes(label = name),
            nudge_y = -1.5) +
  labs(title = "SNAP Participation by Median Income",
       subtitle = "Chicago Community Areas",
       x = "Median Income",
       y = "Percent receiving SNAP")+
  scale_x_continuous(labels=scales::dollar_format(), limits = c(0, 160000)) +
  cust_theme

The graph of the regression for SNAP participation and poverty rate (as a percent of total residents) is a positive correlation. Again, Hyde Park appears to be a community area that has lower SNAP participation than would be expected.

# Graphing poverty level vs SNAP participation
d_poverty <- data
# Calculating the linear regression between SNAP participation and poverty level
fit_poverty <- lm(data$snap_participant ~ data$poverty)
d_poverty$predicted <- predict(fit_poverty)
# Calculating the residual between the datapoint and regression line to select proper labels
d_poverty$residuals <- residuals(fit_poverty)

snappovslice <- d_poverty %>%
  arrange(residuals) %>%
  slice(1:5, 73:77)

d_poverty %>%
  ggplot(aes(x = poverty, y = snap_participant)) +
  geom_point() +
  geom_smooth(se = FALSE, 
              method = 'lm', 
              formula = 'y ~ x') +
  geom_text_repel(data = snappovslice,
            aes(label = name),
            nudge_y = 1.5) +
  labs(title = "SNAP Participation by Poverty Rate",
       subtitle = "Chicago Community Areas",
       x = "Poverty rate",
       y = "Percent receiving SNAP") +
  theme_classic() +
  scale_x_continuous(labels = scales::percent_format(scale = 1)) +
  cust_theme

Below is the quadratic regression between TANF participation rate and median household income. Once again, a negative relationship is apparent between these two variables.

Burnside has significantly lower amount of participation (1%) compared to what is expected based on the community area’s median income ($41,756.28).

# Graphing income vs TANF participation
d_tanf <- data
# Calculating the quadratic regression between TANF participation and median income
fit_tanf <- lm(tanf ~ median_income + median_income_sq, data = data)
d_tanf$predicted <- predict(fit_tanf)
# Calculating the residual between the datapoint and regression line to select proper labels
d_tanf$residuals <- residuals(fit_tanf)

tanfslice <- d_tanf %>%
  arrange(residuals) %>%
  slice(1:5, 73:77)

d_tanf %>%
  ggplot(aes(x = median_income, 
             y = tanf)) +
  geom_point() +
  stat_smooth(se = FALSE, 
              method = 'loess', 
              formula = 'y ~ x') +
  geom_text_repel(data = tanfslice,
            aes(label = name)) +
  labs(title = "TANF Participation by Median Income",
       subtitle = "Chicago Community Areas",
       x = "Median Income",
       y = "Percent receiving TANF") +
  scale_x_continuous(labels=scales::dollar_format(), limits = c(0, 160000)) +
  cust_theme

TANF and poverty level show a positive relationship, as poverty increases in a community area so does the TANF participation rate.

Englewood and Washington Park are the community areas with the largest difference in observed and expected TANF participation rates. Englewood continues to have a higher participation rate than expected, at 9.41%. Englewood has the highest participation rate in the city by about 1.5% compared to the next highest area.

# Graphing poverty level vs TANF participation
d_tanf_poverty <- data
# Calculating the linear regression between TANF participation and poverty level
fit_tanf_poverty <- lm(data$tanf ~ data$poverty)
d_tanf_poverty$predicted <- predict(fit_tanf_poverty)
# Calculating the residual between the datapoint and regression line to select proper labels
d_tanf_poverty$residuals <- residuals(fit_tanf_poverty)

tanfpovslice <- d_tanf_poverty %>%
  arrange(residuals) %>%
  slice(1:5, 73:77)

d_tanf_poverty %>%
  ggplot(aes(x = poverty, y = tanf)) +
  geom_point() +
  geom_smooth(se = FALSE, 
              method = 'lm', 
              formula = 'y ~ x') +
  geom_text_repel(data = tanfpovslice,
            aes(label = name)) +
  labs(title = "TANF Participation by Poverty Rate",
       subtitle = "Chicago Community Areas",
       x = "Poverty rate",
       y = "Percent receiving TANF") +
  scale_x_continuous(labels = scales::percent_format(scale = 1)) +
  cust_theme

Education Level

In this section we review SNAP and TANF participation compared to the community area’s high school and college graduation rates.

Below is the regression comparing SNAP participation and high school and college graduation rate.

The community area of Riverdale stands out here, as it has the highest SNAP participation of all community areas (61.5%) while also having a high school graduation rate of 86.4%, which is above the citywide mean.

South Lawndale has the lowest high school graduation rate of all community areas (59.2%), yet SNAP participation in South Lawndale is only slightly higher than the mean. The median income of South Lawndale is in the lowest quartile of income, indicating that this community area may be experiencing a lack of services.

#Plotting residuals of high school graduation rates vs snap participation
d_hs_snap <- data
fit_hs_snap <- lm(snap_participant ~ grad_hs, data = data)
d_hs_snap$predicted <- predict(fit_hs_snap)
d_hs_snap$residuals <- residuals(fit_hs_snap)

snaphsslice <- d_hs_snap %>%
  arrange(residuals) %>%
  slice(1:5, 73:77)

#Plotting residuals of college graduation rates vs snap participation
d_coll_snap <- data
fit_coll_snap <- lm(snap_participant ~ grad_coll, data = data)
d_coll_snap$predicted <- predict(fit_coll_snap)
d_coll_snap$residuals <- residuals(fit_coll_snap)

snapcollslice <- d_coll_snap %>%
  arrange(residuals) %>%
  slice(1:5, 73:77)

# Graph snap vs. college and high school grad rates
data %>%
  ggplot() +
  geom_point(aes(x = grad_hs, 
                 y = snap_participant, 
                 color = "High School")) +
  geom_smooth(aes(x = grad_hs, 
                  y = snap_participant), 
              se = FALSE, 
              method = 'lm', 
              formula = 'y ~ x', 
              linetype = "dashed", 
              color = "indianred2") +
  geom_text_repel(data = snaphsslice,
                  aes(label = name, x = grad_hs, y = snap_participant),
                  color = "red",
                  nudge_y = -.25) +
  geom_point(aes(x = grad_coll, 
                 y = snap_participant, 
                 color = "College")) +
  geom_smooth(aes(x = grad_coll, 
                  y = snap_participant), 
              se = FALSE, 
              method = 'lm', 
              formula = 'y ~ x', 
              linetype = "dashed") +
  labs(title = "SNAP Participation vs high school and college graduation rate",
       subtitle = "Chicago Community Areas",
       x = "Graduation Rate",
       y = "Percent receiving SNAP") +
  geom_text_repel(data = snapcollslice,
                  aes(label = name, x = grad_coll, y = snap_participant),
                  color = "blue",
                  nudge_y = -.25) +
  scale_color_manual(name='School type',
                     breaks=c('High School', 'College'),
                     values=c('High School'='red', 'College'='blue')) +
  scale_x_continuous(labels = scales::percent_format(scale = 1)) +
  cust_theme

Below is the regression between TANF and high school and college graduation rates. Englewood and Archer Heights are the community areas with the largest difference in expected and observed participation rates. Archer Heights has a high school graduation rate of 70.53%, in the lowest quartile of all community areas, but only has a TANF participation rate of 1.98%, indicating a lack of benefits in the area.

#Plotting residuals of high school graduation rates vs TANF participation
d_hs_tanf <- data
fit_hs_tanf <- lm(tanf ~ grad_hs, data = data)
d_hs_tanf$predicted <- predict(fit_hs_tanf)
d_hs_tanf$residuals <- residuals(fit_hs_tanf)

tanfhsslice <- d_hs_tanf %>%
  arrange(residuals) %>%
  slice(1:5, 73:77)

#Plotting residuals of college graduation rates vs TANF participation
d_coll_tanf <- data
fit_coll_tanf <- lm(tanf ~ grad_coll, data = data)
d_coll_tanf$predicted <- predict(fit_coll_tanf)
d_coll_tanf$residuals <- residuals(fit_coll_tanf)

tanfcollslice <- d_coll_tanf %>%
  arrange(residuals) %>%
  slice(1:5, 73:77)

# Graph TANF vs. college and high school grad rates
data %>%
  ggplot() +
  geom_point(aes(x = grad_hs, 
                 y = tanf, 
                 color = "High School")) +
  geom_smooth(aes(x = grad_hs, 
                  y = tanf), 
              se = FALSE, 
              method = 'lm', 
              formula = 'y ~ x', 
              linetype = "dashed", 
              color = "indianred2") +
  geom_text_repel(data = tanfhsslice,
                  aes(label = name, x = grad_hs, y = tanf),
                  color = "red",
                  nudge_y = -.25) +
  geom_point(aes(x = grad_coll, 
                 y = tanf, 
                 color = "College")) +
  geom_smooth(aes(x = grad_coll, 
                  y = tanf), 
              se = FALSE, 
              method = 'lm', 
              formula = 'y ~ x', 
              linetype = "dashed") +
  labs(title = "TANF Participation vs high school and college graduation rate",
       subtitle = "Chicago Community Areas",
       x = "Graduation Rate",
       y = "Percent receiving TANF") +
  geom_text_repel(data = tanfcollslice,
                  aes(label = name, x = grad_coll, y = tanf),
                  color = "blue",
                  nudge_y = -.25) +
  scale_color_manual(name='School type',
                     breaks=c('High School', 'College'),
                     values=c('High School'='red', 'College'='blue')) +
  scale_x_continuous(labels = scales::percent_format(scale = 1)) +
  cust_theme

Low Food Access

The relationship between food access and public benefit participation is graphed below. The community areas with greater than 75% of their residents experiencing low food access are labeled to highlight where people are not given proper access to food.

O’Hare and North Park are the community areas closest to the mean income of the city experiencing greater than 75% low food access. These areas also have lower than average SNAP participation, indicating a need for increased intervention or awareness of the SNAP program.

Riverdale and Fuller Park are the community areas with the highest percent of residents experiencing low food access, they are also two of the highest community areas by benefit participation. This could suggest that a person’s likelihood to participate in a benefit program is influenced by their community area and how frequently those programs are used in their area.

#Plotting residuals of food access rates vs SNAP participation
d_foodsnap <- data
fit_foodsnap <- lm(snap_participant ~ low_food, data = data)
d_foodsnap$predicted <- predict(fit_foodsnap)
d_foodsnap$residuals <- residuals(fit_foodsnap)

foodsnapslice <- d_foodsnap %>%
  arrange(residuals) %>%
  slice(1:5, 73:77)


# Graphing food access
data %>%
  ggplot() +
  geom_point(aes(x = low_food, y = snap_participant)) +
  geom_smooth(aes(x = low_food, 
                  y = snap_participant), 
              se = FALSE, 
              method = 'lm', 
              formula = 'y ~ x', 
              linetype = "dashed") +
  geom_text_repel(data = foodsnapslice,
            aes(label = name, x = low_food, y = snap_participant),
            nudge_y = -2) +
  labs(title = "Low food availabilty and SNAP Participation",
       subtitle = "Chicago Community Areas",
       x = "Low food access",
       y = "Percent receiving SNAP") +
  scale_x_continuous(labels = scales::percent_format(scale = 1)) +
  cust_theme

Racial Demographics

When comparing the relationship between public benefit participation and a community area’s demographic composition, it is clear to see that different community areas have different levels of benefits based on race. There is a strong positive relationship between SNAP and TANF participation and the percent of BIPOC households in a community area. Conversely, there is a negative relationship between benefit participation and the percent of white residents in the community area.

# Graphing %POC vs TANF participation
d_tanf_bipoc <- data
# Calculating the linear regression between TANF participation and %POC
fit_tanf_bipoc <- lm(tanf ~ pct_poc, data = data)
d_tanf_bipoc$predicted <- predict(fit_tanf_bipoc)
# Calculating the residual between the datapoint and regression line to select proper labels
d_tanf_bipoc$residuals <- residuals(fit_tanf_bipoc)

tanfbipocslice <- d_tanf_bipoc %>%
  arrange(residuals) %>%
  slice(1:5, 73:77)

data %>%
  ggplot() +
  geom_point(aes(x = pct_poc, 
                 y = tanf)) +
  geom_smooth(aes(x = pct_poc, 
                  y = tanf), 
              se = FALSE, 
              method = 'lm', 
              formula = 'y ~ x', 
              linetype = "dashed") +
  geom_text_repel(data = tanfbipocslice,
                  aes(x = pct_poc,
                      y = tanf,
                      label = name)) +
  labs(title = "BIPOC Households and TANF Participation",
       subtitle = "Chicago Community Areas",
       x = "BIPOC Households",
       y = "Percent receiving TANF") +
  scale_x_continuous(labels = scales::percent_format(scale = 1)) +
  cust_theme

# Graphing %POC vs TANF participation
d_snap_bipoc <- data
# Calculating the linear regression between TANF participation and %POC
fit_snap_bipoc <- lm(snap_participant ~ pct_poc, data = data)
d_snap_bipoc$predicted <- predict(fit_snap_bipoc)
# Calculating the residual between the datapoint and regression line to select proper labels
d_snap_bipoc$residuals <- residuals(fit_snap_bipoc)

snapbipocslice <- d_snap_bipoc %>%
  arrange(residuals) %>%
  slice(1:5, 73:77)

data %>%
  ggplot(aes(x = pct_poc, 
             y = snap_participant)) +
  geom_point() +
  geom_smooth(se = FALSE, 
              method = 'lm', 
              formula = 'y ~ x', 
              linetype = "dashed") +
  geom_text_repel(data = snapbipocslice,
                  aes(label = name)) +
  labs(title = "BIPOC Households receiving SNAP",
       subtitle = "Chicago Community Areas",
       x = "BIPOC Households",
       y = "Percent receiving SNAP") +
  scale_x_continuous(labels = scales::percent_format(scale = 1)) +
  cust_theme