Analyzing the Role of Community and Individual Factors in LAMP Grant Funding: Identifying Diverse Barriers Across Clustered US Counties

FAS Food Systems Impact Fellowship Capstone Project, April 2024

Author

Elliot Hohn, Senior Agricultural Data Scientist Impact Fellow

Introduction

Local Agriculture Market Program (LAMP)

The USDA’s Agricultural Marketing Service (AMS) administers a variety of grant programs aimed at strengthening local and regional food systems. The Local Agriculture Market Program (LAMP) is one such program that supports direct producer-to-consumer marketing, food enterprises, and value-added agricultural products. Established under the 2018 Farm Bill, LAMP fosters community collaboration and public-private partnerships to improve regional food economies, aiding in the development of business strategies and infrastructure for local food systems.

Promotional materials for LAMP. Image: USDA-AMS, 2024

Building community capital through food systems investment

According to AMS, the main goals of the LAMP program include the following1:

  • Simplify the application processes and the reporting processes for the Program

  • Improve income and economic opportunities for producers and food businesses through job creation

  • Strengthen capacity and regional food system development through community collaboration and expansion of mid-tier value chains

Programs and Policies

(An overview of key programs, policies, and initiatives introduced by the chosen federal agency or within the selected subject area.

Summarize available evaluation or other available research and reports on the effectiveness of these interventions in addressing food system challenges.)

Best practices, current innovation, and policy proposals

(Identify and discuss successful program and policy models, emerging and innovative approaches, or other proposed interventions relevant to the issue area.)

Objectives of this research

Methods

(TBD)

Local Agriculture Market Program (LAMP)

According to the USDA-AMS LAMP webpage, the program’s main goals are:

  • Connect and cultivate regional food economies through public-private partnerships.

  • Support the development of business plans, feasibility studies, and strategies for value-added agricultural production and local and regional food system infrastructure.

  • Strengthen capacity and regional food system development through community collaboration and expansion of mid-tier value chains.

  • Improve income and economic opportunities for producers and food businesses through job creation; and

  • Simplify the application processes and the reporting processes for the Program.

AFAIK, USDA does not have great data on the nuanced characteristics of the counties receiving funding. This analysis might shed some light on whether or not there is some threshold level of social capital that determines if a county gets funding.

Load LAMP data and create binary “received funding”/“did not receive funding”

The LAMP data includes a row for each grant that has been funded from 2006 to 2023, as well as information on the grant amount, and the main objectives of the grant (e.g., technical assistance, food safety, etc.). For location information, the dataset includes a city and state, but no spatial-type data or coding pertaining to standardized geographies (e.g., counties, census tracts, etc.). Therefore, in order to join this data to county data, I load a dataset of US city names with latitude and longitude values, join this to the LAMP data, then do a spatial join of these points with the geometries of the counties.

This analysis will classify each county in the continental US as either having received LAMP funding (lamp_funded == 1), or not having received LAMP funding (lamp_funded == 0). To achieve this, I’ll load data on all counties in the US, join it to the LAMP data, then mark any county with non-null LAMP grant values as lamp_funded = 1

Note

Note: there are some cities in the city_loc dataset that have more than one row, I think because they are bisected by county lines, so I dealt with that short list of issues by grouping them by city and state and selecting the first row in the group.

Also, there are three remaining rows in the LAMP data that don’t have cities listed, so there are no coords for them, but I could track those down and fix them manually at some point.

# Data downloaded directly from URL on the LAMP Navigator webpage
lamp_url <- 'https://www.ams.usda.gov/sites/default/files/media/LAMPDatasetandDataDictionary.xlsx'
lamp <- read.xlsx(lamp_url, sheet = 'LAMP Dataset 2006 to 2023') %>%
  rename(
    state = State,
    city = City.2
    ) %>%
  mutate(city = str_squish(str_trim(tolower(city)))) %>%
  filter(!state %in% c('HI', 'AK', 'PR'))

# Load US Cities dataset from github
url <- 'https://raw.githubusercontent.com/kelvins/US-Cities-Database/main/csv/us_cities.csv'
city_loc <- read.csv(url) %>%
  select(-c(ID, COUNTY)) %>%
  rename(
    city = CITY,
    state = STATE_CODE
  ) %>%
  mutate(city = str_squish(str_trim(tolower(city)))) %>%
  group_by(city, state) %>%
  filter(row_number()==1) %>% 
  ungroup()

# check how many cities in LAMP data are in city_loc data
#print(length(unique(lamp$city)))
#print(length(unique(lamp$city) %in% city_loc$city))

# do the join
lamp <- merge(lamp, city_loc, by = c('city', 'state'), all.x = TRUE)

# convert to sf object
lamp_sf <- lamp %>% 
  drop_na(LATITUDE, LONGITUDE) %>%
  st_as_sf(coords = c("LONGITUDE", "LATITUDE")) %>%
  st_set_crs(4326) %>%
  st_transform(my_crs)

# Load counties data (downloaded somewhere on the interwebs...)
counties <- st_read('data/cb_2021_us_county_20m/cb_2021_us_county_20m.shp') %>%
  filter(!STATE_NAME %in% c('Alaska', 'Hawaii', 'Puerto Rico')) %>%
  select(GEOID, geometry) %>%
  st_transform(my_crs)

# spatial join points within counties
lamp_by_county <- counties %>%
  st_join(lamp_sf, join = st_contains, left = TRUE) %>%
  group_by(GEOID) %>%
  mutate(total_grant = sum(Award.Amount)) %>%
  mutate(lamp_funded = as.factor(ifelse(is.na(Award.Amount) | Award.Amount == 0, 0, 1))) %>%
  select(GEOID, lamp_funded, Organization)
cols <- c('1' = "#014745", '0' = "grey")

ggplot(lamp_by_county) +
  geom_sf(
    aes(fill = factor(lamp_funded)),
    color = 'transparent') +
  scale_fill_manual(
    values = cols,
    labels = c('Did not receive\nLAMP funding', 'Received\nLAMP funding')
    ) +
  theme_void() +
  theme(
    legend.position = "bottom",
    legend.title=element_blank(),
    plot.title = element_text(hjust = 0.5)
  ) +
  ggtitle("Counties that recieved LAMP grants, 2006 to 2023")

d_map_lamp <- lamp_by_county %>%
  st_transform(4326)

pal <- colorFactor(
  palette = c('grey', "#014745"),
  na.color = 'transparent',
  domain = d_map_lamp$lamp_funded)

labels <- sprintf(
  "<strong>%s</strong>",
  d_map_lamp$Organization
) %>% lapply(htmltools::HTML)

leaflet() %>%
  addPolygons(
    data = d_map_lamp,
    stroke = FALSE, 
    smoothFactor = 0.2, 
    fillOpacity = 1,
    color = ~pal(lamp_funded),
    # highlightOptions = highlightOptions(
    #   weight = 5,
    #   color = "#666",
    #   dashArray = "",
    #   fillOpacity = 0.7,
    #   bringToFront = TRUE),
    label = labels#,
    # labelOptions = labelOptions(
    #   style = list("font-weight" = "normal", padding = "3px 8px"),
    #   textsize = "15px",
    #   direction = "auto")
    ) %>%
  addProviderTiles(providers$CartoDB.Positron)

Footnotes

  1. https://www.ams.usda.gov/services/grants/lamp. Accessed April 20, 2024↩︎