This analysis explores the relationship between structural disadvantage and gun violence across New York City neighborhoods in 2023. While shootings have declined overall, violence remains concentrated in specific areas—often those facing overlapping environmental and social burdens.
To examine this connection, the study uses the Disadvantage Score developed by NYSERDA and the New York State Climate Justice Working Group. This composite score incorporates 45 indicators across domains such as pollution exposure, healthcare access, socioeconomic vulnerability, and climate risk—generating a percentile-based metric (0 to 1) that reflects neighborhood-level structural disadvantage.
By applying beta regression modeling and simulation, the analysis identifies which factors most strongly influence predicted disadvantage scores. Findings reveal that both environmental conditions (e.g., particulate matter, limited green space, benzene exposure) and population-level challenges (e.g., asthma rates, healthcare access) significantly raise a neighborhood’s Disadvantage Score.
This data-driven approach highlights how structural factors intersect to shape community vulnerability. The Disadvantage Score proves to be a valuable tool for identifying high-need neighborhoods and informing targeted public health, planning, and safety interventions.
This research investigates how social and environmental factors intersect to influence gun violence across New York City neighborhoods, using the Disadvantage Score as a central tool for analysis.
The study assesses whether NYSERDA’s Disadvantage Score accurately captures the types of neighborhood vulnerability associated with gun violence. Results confirm that the score reflects both environmental and population-level risk factors, making it a meaningful tool for identifying high-need areas and guiding interventions.
This analysis relies on two primary data sets:
NYPD Shooting Incident Data (2023): • Obtained from the New York Police Department (NYPD), this data set provides detailed information on all recorded shootings in NYC from 2006 to 2023. • Includes variables such as incident date/time, location (latitude/longitude), victim demographics (age, race, sex), and whether the shooting was fatal or non-fatal. • This data set enables the calculation of shooting rates per 100,000 residents at the neighborhood level by matching incidents to NYC census tracts. New York City Police Department (n.d.)
New York State Disadvantaged Communities Data (2023): Defines disadvantaged neighborhoods based on environmental burdens, climate risks, and socioeconomic vulnerabilities. • Published by the New York State Energy Research and Development Authority (NYSERDA), this dataset identifies disadvantaged communities based on a combination of socioeconomic, environmental, and health-related factors. • Neighborhoods are assigned a Disadvantaged Score ranging from 0 (least disadvantaged) to 1 (most disadvantaged), determined by indicators such as poverty rates, unemployment, median income, racial composition, housing burden, and environmental risks. • This dataset allows for a quantitative measure of neighborhood-level disadvantage, which is used to assess its relationship with gun violence. Development Authority (NYSERDA) (2023b)
By integrating these two datasets, this study evaluates whether higher levels of neighborhood disadvantage correlate with increased rates of gun violence.
This study tests whether structural disadvantage—measured through combined environmental and social burdens—can help explain where gun violence is most likely to occur in New York City..
Gun violence is more likely to be concentrated in tracts with both environmental and social issues,as these overlapping burdens reflect long-standing neglect and structural vulnerabilities. Neighborhoods facing poor air quality, lack of green space, and limited access to healthcare—combined with socioeconomic stressors—are likely to experience the compounding effects that contribute to higher rates of violence. These areas represent priority zones for targeted intervention.
Neighborhoods with elevated Disadvantage Scores are more likely to experience gun violence, reinforcing the score’s value as an essential indicator. Because the Disadvantage Score reflects cumulative burdens across environmental, health, and economic domains, it captures the structural conditions that leave communities more exposed to violence. If used strategically, the score can guide resource allocation and policy to address root causes.
This research was carried out in three key stages: spatial analysis of gun violence, regression analysis of gun violence and disadvantage, and simulation modeling of structural factors contributing to disadvantage.
To enable neighborhood-level comparisons, individual NYPD shooting incidents were spatially joined to NYC census tracts using R’s sf package. Since Disadvantage Scores are calculated at the census tract level, this spatial join allowed for the total number of shootings per tract to be computed. From there, tract-level shooting rates (per 100,000 people) were generated to standardize comparison across communities.
To quantify the relationship between neighborhood disadvantage and gun violence, a simple linear regression was performed using Disadvantage Score as the independent variable and shootings per 100,000 residents as the outcome. The results revealed that each 1% increase in Disadvantage Score (0.01) is associated with approximately 0.30 additional shootings per 100,000 people. A 10% increase corresponds to 3 additional shootings per 100,000. The effect was statistically significant, with a high t-statistic and a p-value near zero, confirming a strong correlation between structural disadvantage and elevated gun violence.
To explore which structural factors most influence Disadvantage Scores, a beta regression model was used—appropriate for outcomes between 0 and 1. The model evaluated 44 social, health, and environmental predictors. For each, simulations estimated how predicted disadvantage scores change from their minimum to maximum observed values, holding other variables constant. This approach allowed the effect of each variable to be isolated and ranked by impact, revealing key drivers of structural vulnerability across NYC neighborhoods.
# Load necessary libraries
library(sf)
library(leaflet)
library(dplyr)
# Convert WKT geometry to sf object
neighborhoods_sf <- st_as_sf(neighborhoods, wkt = "the_geom", crs = 4326)
# Ensure geometries are valid
neighborhoods_sf <- st_make_valid(neighborhoods_sf)
# Filter for NYC bounding box (approximate boundaries)
nyc_sf <- neighborhoods_sf %>%
st_filter(st_as_sfc(st_bbox(c(xmin = -74.2591, xmax = -73.7004, ymin = 40.4774, ymax = 40.9176), crs = 4326)))
# Filter only areas that are "Designated as DAC"
nyc_disadvantaged_sf <- nyc_sf %>%
filter(DAC_Designation == "Designated as DAC")
# Check if there are valid rows left
if (nrow(nyc_disadvantaged_sf) == 0) {
stop("No areas found with DAC_Designation == 'Designated as DAC'. Verify column values.")
}
# Create an interactive leaflet map highlighting DAC-designated areas
leaflet(nyc_disadvantaged_sf) %>%
addProviderTiles("CartoDB.Positron") %>%
addPolygons(
fillColor = "lightblue",
color = "blue",
weight = 1,
opacity = 0.7,
fillOpacity = 0.6,
highlightOptions = highlightOptions(
color = "yellow", weight = 2, bringToFront = TRUE
),
label = lapply(
paste0(
"<div style='font-size:14px; background-color:white; padding:5px; border-radius:5px; border:1px solid #ccc;'>",
"<b>GEOID:</b> ", nyc_disadvantaged_sf$GEOID, "<br>",
"<b>County:</b> ", nyc_disadvantaged_sf$County, "<br>",
"<b>Percentile Rank Combined NYC:</b> ", nyc_disadvantaged_sf$Percentile_Rank_Combined_NYC,
"</div>"
)
,
htmltools::HTML
),
labelOptions = labelOptions(
direction = "auto",
textsize = "12px",
style = list(
"color" = "black",
"background-color" = "white",
"border" = "1px solid gray",
"padding" = "6px",
"border-radius" = "6px"
)
)
) %>%
addLegend(
position = "bottomright",
colors = "lightblue",
labels = "Most Disadvantaged Neighborhoods",
opacity = 1.0
) %>%
setView(lng = -74.0060, lat = 40.7128, zoom = 11)The map above highlights all New York City census tracts identified as disadvantaged based on the 2023 criteria established by the New York State Energy Research and Development Authority (NYSERDA). A tract is designated as disadvantaged if it receives a combined percentile score of 0.30 or higher, reflecting cumulative burdens across 45 indicators spanning environmental exposure, health vulnerabilities, and socioeconomic conditions. “Final Disadvantaged Communities (DAC) Overview” (2023)
These highlighted tracts are geographically concentrated in historically undeserved areas, including large portions of the Bronx, Central and East Brooklyn, Southeast Queens, Upper Manhattan, and the North Shore of Staten Island. The spatial clustering of disadvantaged neighborhoods underscores systemic patterns of disinvestment and structural inequality. This geographic visualization serves as a foundational layer for analyzing how neighborhood disadvantage overlaps with public health and safety concerns, including patterns of gun violence.
This map visualizes over 17 years of shooting incidents across New York City, using point-level data from the NYPD Shooting Incident (Historic) dataset. Each red dot represents a single shooting event recorded between 2006 and 2023. These incidents are geocoded and include detailed statistical markers such as:
Date & time of the incident
Police precinct where the shooting occurred
Whether the shooting was fatal or non-fatal
Victim demographics, including age group, sex, and race
By displaying each incident spatially, the map highlights the geographic concentration of gun violence in specific neighborhoods, particularly in the Bronx, Brooklyn, and parts of Queens. This spatial context helps to better understand how gun violence is distributed across the city and serves as a foundation for correlating shootings with structural factors such as neighborhood disadvantage.
# Load necessary libraries
library(leaflet)
library(dplyr)
library(lubridate)
# Clean and prepare the shooting data
location.data <- shootings %>%
mutate(
Latitude = as.numeric(Latitude),
Longitude = as.numeric(Longitude),
OCCUR_DATE = mdy(OCCUR_DATE),
OCCUR_DATE_FORMATTED = format(OCCUR_DATE, "%B %d, %Y"),
STATISTICAL_MURDER_FLAG = ifelse(STATISTICAL_MURDER_FLAG, "Fatal", "Non-Fatal")
) %>%
filter(
!is.na(Latitude) & !is.na(Longitude),
Latitude >= 40.4774 & Latitude <= 40.9176,
Longitude >= -74.2591 & Longitude <= -73.7004
) %>%
select(
Longitude, Latitude, OCCUR_DATE_FORMATTED, OCCUR_TIME, PRECINCT,
STATISTICAL_MURDER_FLAG, VIC_AGE_GROUP, VIC_SEX, VIC_RACE
)
# Create the Leaflet map
leaflet(location.data) %>%
addProviderTiles("CartoDB.Positron") %>%
addCircleMarkers(
~Longitude, ~Latitude,
radius = 2,
color = "red",
fillColor = "red",
fillOpacity = 0.2,
popup = ~paste0(
"<div style='font-size:14px; background-color:white; padding:5px; border-radius:5px; border:1px solid #ccc;'>",
"<b>Date:</b> ", OCCUR_DATE_FORMATTED, "<br>",
"<b>Time:</b> ", OCCUR_TIME, "<br>",
"<b>Precinct:</b> ", PRECINCT, "<br>",
"<b>Outcome:</b> ", STATISTICAL_MURDER_FLAG, "<br>",
"<b>Victim Age Group:</b> ", VIC_AGE_GROUP, "<br>",
"<b>Victim Sex:</b> ", VIC_SEX, "<br>",
"<b>Victim Race:</b> ", VIC_RACE,
"</div>"
)
) %>%
setView(lng = -74.0060, lat = 40.7128, zoom = 12)