Natural disasters pose an increasing economic challenge to the United States, with impacts that vary substantially across space and time. This study examines the frequency, intensity, and economic costs of federally declared natural disasters from 2000 to 2024 at the state level, using Federal Emergency Management Agency (FEMA) disaster declaration records and Public Assistance funding data. To understand disaster-related expenditures, state-level gross domestic product (GDP) data from the Bureau of Economic Analysis (BEA) are incorporated to evaluate relative economic burden. Utilizing R and a combination of descriptive, temporal, and exploratory spatial data analysis techniques, this study investigates whether disaster impacts and federal assistance exhibit spatial clustering and whether economic resources correspond to observed disaster costs. Global and Local Moran’s I statistics are used to assess spatial autocorrelation in federal relief, disaster occurrence, and cost relative to GDP. The results reveal spatial heterogeneity in disaster impacts across states, with localized clusters of high and low economic burden. Temporal analysis highlights rising disaster costs and sustained federal relief over the study period. Together, these findings highlight the uneven economic exposure to natural hazards across the United States. The analysis provides a data-driven framework for understanding spatial disparities in disaster impacts and offers insight into the challenges of disaster preparedness, funding adequacy, and long-term economic resilience.
Natural disasters such as hurricanes, floods, wildfires, and severe storms impose substantial economic costs across the United States. In recent decades, the frequency and severity of these events have increased in the context of a changing climate, increasing financial pressures on federal and state governments, local communities, and regional economies. Beyond the immediate damages, disaster recovery requires sustained investment, making it critical to understand how disaster impacts vary across space and time.
This study examines federally declared natural disasters in the United States from 2000 to 2024 using FEMA disaster declaration records and Public Assistance funding data. These data are combined with state-level gross domestic product (GDP) information from the Bureau of Economic Analysis (BEA) to assess the economic burden of disasters relative to state financial capacity. Spatial and temporal analytics are used to evaluate patterns of disaster occurrence, federal relief, and financial cost at the state level.
The central research question guiding this analysis is:
How do the frequency, intensity, and economic impacts of federally declared natural disasters vary across U.S. states from 2000 to 2024, how do these patterns relate to state-level economic capacity and federal disaster assistance, and how important is FEMA’s economic relief?
To address this question, the study pursues the following objectives:
Quantify temporal trends in disaster frequency, intensity, cost, federal relief and type across U.S. states.
Assess the spatial distribution and clustering of disaster-related financial costs and federal assistance.
Evaluate the relationship between disaster impacts and state-level economic indicators, including GDP, as a measure of relative economic burden.
Examine the extent to which federal disaster assistance corresponds to observed disaster impacts and state economic capacity.
This study integrates spatial, economic, and disaster-related data to analyze the frequency, duration, and economic impacts of natural disasters in the United States from 2000 to 2024. All analyses are conducted at the state level, with state polygons serving as the primary spatial unit of analysis.
https://www.naturalearthdata.com/
State boundary geometries were obtained from the Natural Earth public-domain vector datasets using the rnaturalearth R package. United States state polygons were extracted and filtered to retain only state names, abbreviations, and polygon geometries. These spatial data provide the foundation for mapping and spatial analysis.
https://www.bea.gov/data/gdp/gross-domestic-product
State-level Gross Domestic Product (GDP) data were retrieved from the U.S. Bureau of Economic Analysis (BEA) using the bea.R package and the BEA API. The dataset includes annual GDP estimates for all fifty U.S. states between 2000 and 2024. GDP is used as an indicator of state-level economic capacity and to contextualize disaster-related financial costs.
https://www.fema.gov/openfema-data-page/disaster-declarations-summaries-v2
Federally declared natural disaster records were obtained from the FEMA Disaster Declarations Summaries dataset through the FEMA Open Data API. The dataset includes disaster identifiers, affected states, incident types, declaration titles, and event start and end dates. Disaster records were filtered to include only events occurring between 2000 and 2024. From these records, disaster frequency and duration were calculated at the state level.
https://www.fema.gov/openfema-data-page/public-assistance-funded-projects-details-v2
Financial data related to disaster recovery were derived from the FEMA Public Assistance Funded Projects Details dataset. This dataset provides information on total project costs and federal obligations associated with each disaster declaration. These data were aggregated to the state-year level to assess total disaster-related expenditures and federal assistance over time.
A primary limitation of this study is the lack of detailed spatial information at the individual disaster level within FEMA datasets. Spatial analysis is restricted to state-level aggregation, which may mask variation in disaster impacts. While state-level analysis enables nationwide comparison and statistical testing, finer-scale geographic data would allow for more detailed assessment of disaster exposure that may provide a more accurate representation of the true patterns related to disaster economics across the United States. A secondary limitation of this study lies in the level of detail about the FEMA panel association’s economic breakdown. The FEMA panel represents the totals for projected economic relief and actual economic relief provided for each disaster. However, the distribution of these economic provisions is not provided and is therefore inconclusive of how the economic relief was utilized for individual disasters. In addition, the relative Gross Domestic Product of each state is not an inherently useful metric to detail the out of pocket cost for a disaster in a given state relative to the relief FEMA provided. The study uses a relative economic burden by normalizing cost against GDP but, the standard procedural for handling the economic costs of natural disaster events comes from rainy day funds that were inaccessible.
Data acquisition and cleaning were performed in R using a combination of tidyverse, lubridate, janitor, rfema, and bea.R packages. FEMA and BEA data were retrieved via public APIs, cleaned to ensure consistent date formats and numeric values, and filtered to match the study period. Processed datasets were exported as CSV files and used in subsequent analytical steps. Code chunks are included below for transparency and reproducibility, with API calls commented out to reduce runtime.
#load packages
library(tidyverse) # cleaning and manipulating data sets
library(jsonlite) # conversions between R and JSON objects
library(lubridate) # handles dates in data files
library(janitor) # cleaning messy data sets
library(rfema) # access to and working with FEMA data
library(bea.R) # access to and working with BEA data
library(here) # accessing file locations
# #fetch fema disaster data ----
# fema_csv_url <- "https://www.fema.gov/api/open/v2/DisasterDeclarationsSummaries.csv" #FEMA csv URL object
#
# fema_disasters_raw <- read_csv(fema_csv_url) #read in FEMA URL object
#
# fema_disasters <- fema_disasters_raw %>% #clean and filter FEMA disasters object
# #clean_names() %>%
# mutate(
# incident_begin_date = as.Date(incident_begin_date), #check for date values
# incident_end_date = as.Date(incident_end_date), #check for date values
# year = year(incident_begin_date) #check for date values
# ) %>%
# select(disaster_number, state, incident_type, declaration_title,
# incident_begin_date, incident_end_date, year) #select desired fields for analysis
#
# #save cleaned disasters as new CSV file
# write_csv(fema_disasters, "fema_disasters.csv")
# fetch FEMA Public Assistance (PA) Project Details ----
# pa_details <- open_fema("PublicAssistanceFundedProjectsDetails", ask_before_call = FALSE) #access FEMA public assistance data file
#
# fema_pa <- clean_names(pa_details) %>% #tidy FEMA_pa data set
# rename( # rename fields for clarity
# obligation_date = lastobligationdate,
# cost = totalobligated
# ) %>%
# mutate(
# obligation_date = as.Date(obligation_date), #check for date values
# year = year(obligation_date),
# cost = as.numeric(cost) #check for numeric values
# ) %>%
# filter(!is.na(state), !is.na(cost), cost >= 0) #filter out na states and states with 0 cost
#
# #save cleaned PA data as new CSV file
# write_csv(fema_pa, "fema_pa.csv")
# fetch BEA GDP Data ----
# beaKey <- "BEA API KEY" #store API key object
#
# gdp_state <- beaGet(list( #retrieve GDP state level data
# 'UserID' = beaKey,
# 'Method' = 'GetData',
# 'datasetname' = 'Regional',
# 'TableName' = 'SAGDP2', #state GDP
# 'LineCode' = 1, #industry total
# 'GeoFIPS' = 'STATE',
# 'Year' = 'ALL'
# ))
#
# # clean GDP state level data
# gdp_state <- gdp_state %>%
# as_tibble() %>% #create a new tibble object
# select(GeoName, starts_with("DataValue_")) %>% #select fields with names beginning with Data_Value
# pivot_longer( #pivot to a long form tibble object
# cols = starts_with("DataValue_"),
# names_to = "year",
# names_prefix = "DataValue_",
# values_to = "gdp"
# ) %>%
# mutate(
# year = as.numeric(year), #confirm data type
# gdp = as.numeric(gdp), #confirm data type
# state_name = GeoName
# ) %>%
# select(state_name, year, gdp) #select desired field
#
# # save as a new CSV file
# write_csv(gdp_state, "gdp_state.csv")
This study utilized a descriptive, temporal, and spatial analytics framework to examine the frequency, economic cost, Federal relief, and spatial distribution of natural disasters in the United States from 2000 to 2024. Results are found through a combination of exploratory data analysis, statistical summaries, visualization, and spatial statistical testing using both Global Moran’s I and Local Moran’s I (LISA). Together, these methods allow the project to identify national trends, regional disparities, and localized clustering patterns in disaster impacts across the country.
A workflow diagram summarizing the analytic processes is provided in
the figure below:
Cleaned and filtered datasets from FEMA disaster declarations, FEMA Public Assistance (PA) funding records, and state-level GDP data from the BEA were imported into R for preparation and integration. Data manipulation was conducted primarily using the dplyr package, while spatial boundary data were obtained from the Natural Earth datasets via the rnaturalearth, rnaturalearthdata, and rnaturalearthhires packages.
Initial inspection of the datasets was performed to verify structure, variable consistency, and completeness. The FEMA disaster dataset was further refined by selecting variables relevant to disaster type, location, year, and duration. The FEMA PA dataset was cleaned and standardized to align variable naming conventions with the disaster dataset.
To prevent duplication during dataset integration, FEMA PA records were aggregated to unique state–year–disaster type combinations. Aggregated measures included total project amounts, total federal share obligated, and total disaster-related costs. These summaries were then joined with disaster occurrence counts derived from the FEMA disaster declarations.
Discrepancies between state naming conventions across datasets were resolved using a state abbreviation–name lookup table. The consolidated FEMA dataset was subsequently joined with state-level GDP data, producing a final analysis-ready dataset containing disaster frequency, total costs, federal relief amounts, and economic context for each state and year.
library(dplyr) #data manipulation
library(rnaturalearth) #access to base data sets from Natural Earth
library(rnaturalearthdata) #access to low resolution data sets from Natural Earth
library(rnaturalearthhires) #access to high resolution data sets from Natural Earth
#read in wrangled data files
fema_disasters <- read_csv(here("TermProject", "TermProjectData", "fema_disasters.csv"))
gdp_state <- read_csv(here("TermProject", "TermProjectData", "gdp_state.csv"))
fema_pa <- read_csv(here("TermProject", "TermProjectData", "fema_pa.csv"))
#view wrangled data sets
head(fema_disasters)
## # A tibble: 6 × 7
## disaster_number state incident_type declaration_title incident_begin_date
## <dbl> <chr> <chr> <chr> <date>
## 1 5529 OR Fire LEE FALLS FIRE 2024-08-08
## 2 5528 OR Fire ELK LANE FIRE 2024-08-04
## 3 5527 OR Fire MILE MARKER 132 FIRE 2024-08-02
## 4 4312 CA Severe Storm FLOODING 2017-02-08
## 5 4251 AL Severe Storm SEVERE STORMS, TORNAD… 2015-12-23
## 6 4251 AL Severe Storm SEVERE STORMS, TORNAD… 2015-12-23
## # ℹ 2 more variables: incident_end_date <date>, year <dbl>
head(gdp_state)
## # A tibble: 6 × 3
## state_name year gdp
## <chr> <dbl> <dbl>
## 1 United States * 1997 8577552
## 2 United States * 1998 9062817
## 3 United States * 1999 9631172
## 4 United States * 2000 10250952
## 5 United States * 2001 10581929
## 6 United States * 2002 10929108
head(fema_pa)
## # A tibble: 6 × 26
## disasterNumber declarationDate incidentType pwNumber applicationTitle
## <dbl> <dttm> <chr> <dbl> <chr>
## 1 1239 1998-08-26 07:00:00 Severe Storm(s) 1 (PW# 1) IMMEDIATE…
## 2 1239 1998-08-26 07:00:00 Severe Storm(s) 5 (PW# 5) Not Provi…
## 3 1239 1998-08-26 07:00:00 Severe Storm(s) 7 (PW# 7) Not Provi…
## 4 1603 2005-08-29 07:00:00 Hurricane 18097 (PW# 18097) PROJE…
## 5 1239 1998-08-26 07:00:00 Severe Storm(s) 8 (PW# 8) Not Provi…
## 6 1239 1998-08-26 07:00:00 Severe Storm(s) 10 (PW# 10) Not Prov…
## # ℹ 21 more variables: applicantId <chr>, damageCategoryCode <chr>,
## # damageCategoryDescrip <chr>, projectStatus <chr>, projectProcessStep <chr>,
## # projectSize <chr>, county <chr>, countyCode <dbl>, state <chr>,
## # stateNumberCode <dbl>, projectAmount <dbl>, federalShareObligated <dbl>,
## # cost <dbl>, obligation_date <date>, firstObligationDate <dttm>,
## # mitigationAmount <dbl>, gmProjectId <dbl>, gmApplicantId <dbl>,
## # lastRefresh <dttm>, hash <chr>, year <dbl>
#clean FEMA disasters
fema_disasters_clean <- fema_disasters %>%
rename(disaster_type = incident_type) %>% #rename categories for congruence across datasets
select(disaster_number, state, disaster_type, year) #select desired fields
#clean FEMA PA data
fema_pa_clean <- fema_pa %>%
clean_names() %>%
rename(disaster_type = incident_type) %>% #rename fields for congruence across datasets
select(disaster_number, disaster_type, state, project_amount, federal_share_obligated, cost, year) #select desired fields
#aggregate PA data by state/year/disaster_type to prevent duplicates
fema_pa_aggregate <- fema_pa_clean %>%
group_by(state, year, disaster_type) %>% #group data by state, year, and disaster type
summarise(
total_project_amount = sum(project_amount, na.rm = TRUE), #summarize total projected disaster cost
total_fed_share = sum(federal_share_obligated, na.rm = TRUE), #summarize total federal share contributed
total_cost = sum(cost, na.rm = TRUE), #summarize total cost of each disaster
.groups = "drop"
)
#join disasters with aggregated PA
fema_disaster_pa <- fema_disasters_clean %>%
group_by(state, year, disaster_type) %>%
summarise(
total_disaster_occurrence = n(),
.groups = "drop"
) %>%
left_join(fema_pa_aggregate, by = c("state", "year", "disaster_type"))
#add state name lookup for future joins by state name or abbreviation
state_lookup <- data.frame(
state = state.abb,
state_name = state.name
)
#join fema/pa disaster data set with state look up table
fema_disaster_pa <- fema_disaster_pa %>%
left_join(state_lookup, by = "state")
#join GDP to fema_disasters_pa
FEMA_analysis_data <- fema_disaster_pa %>%
left_join(gdp_state, by = c("state_name", "year")) %>%
filter(year >= 2000 & year <= 2024) %>% #year range of interest
filter(disaster_type %in% c("Coastal Storm", "Fire", "Flood", "Freezing", "Hurricane","Severe Ice Storm",
"Severe Storm", "Tropical Storm", "Winter Storm")) %>%
select(state_name, state, year, disaster_type, total_disaster_occurrence,
total_project_amount, total_fed_share, total_cost, gdp)
#view analysis ready data
glimpse(FEMA_analysis_data)
## Rows: 1,365
## Columns: 9
## $ state_name <chr> "Alaska", "Alaska", "Alaska", "Alaska", "Ala…
## $ state <chr> "AK", "AK", "AK", "AK", "AK", "AK", "AK", "A…
## $ year <dbl> 2001, 2002, 2002, 2003, 2004, 2004, 2005, 20…
## $ disaster_type <chr> "Fire", "Flood", "Severe Storm", "Severe Sto…
## $ total_disaster_occurrence <int> 1, 10, 4, 3, 7, 6, 5, 2, 3, 6, 1, 4, 1, 8, 1…
## $ total_project_amount <dbl> NA, 345526.1, NA, NA, NA, NA, NA, NA, 908069…
## $ total_fed_share <dbl> NA, 259144.6, NA, NA, NA, NA, NA, NA, 681052…
## $ total_cost <dbl> NA, 272475.4, NA, NA, NA, NA, NA, NA, 718295…
## $ gdp <dbl> 28660.9, 29884.5, 29884.5, 32115.8, 35389.5,…
#save analysis ready data set as a new CSV
write_csv(FEMA_analysis_data, here("TermProject", "TermProjectData", "FEMA_data_compiled.csv"))
Following data preparation, several analytical approaches were applied. Spatial data handling was performed using the sf package. Visualization and exploratory analysis relied on ggplot2, while spatial statistical analyses were conducted using spdep. Additional packages supported classification schemes (classInt), color scaling (RColorBrewer), and plot composition (patchwork).
library(sf) # for spatial data
library(ggplot2) # for plots and graphs
# spatial/statistics
library(spdep) # for Moran's I, neighbors, clustering
library(spgwr) # for GWR
library(classInt) # for breaks
library(RColorBrewer) # for color schemes
library(patchwork) # combine ggplot
library(scales) # adjusting axis labels
#read in analysis ready data set
disaster_cost_analysis <- read_csv(here("TermProject", "TermProjectData", "FEMA_data_compiled.csv"))
Descriptive analyses were used to summarize the types and aggregate costs of natural disasters across the United States. Frequency tables quantified the prevalence of disaster types between 2000 and 2024, while grouped summaries calculated total costs by disaster category where the types of disasters included those potentially most influenced by climate change: fires, floods, hurricanes, freezing events, and severe storms.
disaster_cost_analysis %>%
count(disaster_type, sort = TRUE) #count the number of each disaster events in each categorical type
## # A tibble: 9 × 2
## disaster_type n
## <chr> <int>
## 1 Severe Storm 560
## 2 Fire 331
## 3 Flood 196
## 4 Hurricane 178
## 5 Severe Ice Storm 49
## 6 Coastal Storm 19
## 7 Tropical Storm 18
## 8 Winter Storm 10
## 9 Freezing 4
disaster_cost_analysis %>%
group_by(disaster_type) %>% #group the data set by disaster type
summarise(total_cost = sum(total_cost, na.rm=TRUE)) %>% #summarize the total cost of each disaster type in a given year
arrange(desc(total_cost))
## # A tibble: 9 × 2
## disaster_type total_cost
## <chr> <dbl>
## 1 Hurricane 29910168655.
## 2 Flood 1884333750.
## 3 Fire 1829775773.
## 4 Tropical Storm 1061635982.
## 5 Severe Ice Storm 525387559.
## 6 Coastal Storm 64800975.
## 7 Winter Storm 41155916.
## 8 Freezing 0
## 9 Severe Storm 0
Temporal trends were examined to assess how disaster occurrences, total costs, and federal relief have evolved over time. Line and area plots created with ggplot2 illustrate annual changes in disaster occurrence and economic impact between 2000 and 2024. These visualizations allow for intuitive assessment of long-term trends and comparisons between disaster costs and federal assistance.
disaster_cost_analysis %>%
group_by(year) %>%
summarise(total_disasters = sum(total_disaster_occurrence, na.rm=TRUE)) %>%
ggplot(aes(x = year, y = total_disasters)) +
geom_line() +
labs(title = "Natural Disaster Occurrences in the United States",
subtitle = "2000 - 2004",
x = "Year",
y = "Disaster Event Occurrence",
caption = "Figure 1: Disaster Event Occurrences Over Time")
disaster_cost_analysis %>%
group_by(year) %>%
summarise(total_cost = sum(total_cost, na.rm = TRUE)) %>%
ggplot(aes(x = year, y = total_cost)) +
scale_y_continuous(labels = label_dollar(scale = 1e-9, suffix = "B")) +
geom_line() +
labs(title = "Natural Disaster Cost in the United States",
subtitle = "2000 - 2004",
x = "Year",
y = "Disaster Cost (Billions USD)",
caption = "Figure 2: Disaster Cost Over Time")
disaster_cost_analysis %>%
group_by(year) %>%
summarise(
cost = sum(total_cost, na.rm = TRUE),
relief = sum(total_fed_share, na.rm = TRUE)
) %>%
ggplot(aes(x = year)) +
scale_y_continuous(labels = label_dollar(scale = 1e-9, suffix = "B")) +
geom_area(aes(y = cost), fill = "red", alpha = 0.5) +
geom_line(aes(y = relief), color = "green", size = 1) +
labs(
title = "Total Costs vs Federal Relief",
subtitle = "2000–2024",
x = "Year",
y = "Billions USD",
caption = "Figure 3: Disaster Cost Relative to Federal Relief Over Time")
Spatial analysis was conducted at the state level using U.S. boundary shapefiles obtained from Natural Earth and projected to an equal-area coordinate reference system (5070). The spatial data were joined with the aggregated disaster dataset to enable geographic visualization and spatial statistical testing. Given the highly skewed distribution of disaster costs and related measures, adjusted variables were created to address zero, missing, or non-finite values. Choropleth maps were produced to display (1) total disaster Federal relief, (2) total disaster occurrences, and (3) disaster costs relative to state GDP. Logarithmic transformations and carefully selected classification breaks were applied to improve readabiloity and visual balance. Additional facet-wrapped maps displayed these measures by the disaster types mentioned earlier to reveal hazard-specific spatial patterns.
us_states <- ne_states(
country = "United States of America",
returnclass = "sf"
) %>%
rename(c(state_name = name, state= postal)) %>%
select(state_name, state, geometry)
us_states <- st_transform(us_states, 5070)
disaster_cost_analysis_sf <- disaster_cost_analysis %>%
group_by(state_name, state, disaster_type) %>%
summarise(
total_cost = sum(total_cost, na.rm=TRUE),
total_occ = sum(total_disaster_occurrence, na.rm=TRUE),
total_relief = sum(total_fed_share, na.rm=TRUE),
cost_per_gdp = total_cost / sum(gdp, na.rm=TRUE)
)
#join disaster cost analysis to us states
disaster_cost_map <- us_states %>%
left_join(disaster_cost_analysis_sf, by = "state")
#mutate disaster cost map to accommodate for na or values of 0 for breaks
disaster_cost_map <- disaster_cost_map %>%
mutate(
total_relief_adj = ifelse(!is.finite(total_relief) | total_relief <= 0,
1, total_relief),
total_occ_adj = ifelse(!is.finite(total_occ) | total_occ <= 0,
1, total_occ),
cost_per_gdp_adj = ifelse(!is.finite(cost_per_gdp) | cost_per_gdp <= 0,
1e-6, cost_per_gdp)
)
#plot 1 is a choropleth of total disaster relief across the US
relief_breaks <- c(1, 1e4, 1e7, 2.5e8, 1e9,
max(disaster_cost_map$total_relief_adj, na.rm = TRUE))
ggplot(disaster_cost_map) +
geom_sf(aes(fill = total_relief_adj)) +
coord_sf() +
scale_fill_viridis_c(
trans = "log",
breaks = relief_breaks,
labels = scales::label_dollar(
scale_cut = scales::cut_short_scale()),
guide = guide_colorbar(
barheight = unit(8, "cm"))) +
labs(title = "Total Disaster Relief by State",
subtitle = "2000 - 2024",
caption = "Figure 4: Federal Relief by State")
#plot 2 is a choropleth of total disaster occurrences across the US
occ_breaks <- quantile(disaster_cost_map$total_occ,
probs = c(0, 0.25, 0.50, 0.75, 1),
na.rm = TRUE)
ggplot(disaster_cost_map) +
geom_sf(aes(fill = total_occ)) +
coord_sf() +
scale_fill_viridis_c(
breaks = occ_breaks,
labels = scales::comma,
guide = guide_colorbar(
barheight = unit(8, "cm"))) +
labs(title = "Total Disaster Occurrences by State",
subtitle = "2000 - 2024",
caption = "Figure 5: Disaster Event Occurrence by State")
#plot 3 is a choropleth of total disaster burdern across the US
burden_breaks <- c(1e-6, 0.001, 0.01, 0.1, 1,
max(disaster_cost_map$cost_per_gdp_adj, na.rm = TRUE))
ggplot(disaster_cost_map) +
geom_sf(aes(fill = cost_per_gdp_adj)) +
coord_sf() +
scale_fill_viridis_c(
trans = "log",
breaks = burden_breaks,
labels = scales::label_percent(accuracy = 0.1),
guide = guide_colorbar(
barheight = unit(8, "cm"))) +
labs(title = "Total Disaster Burden by State",
subtitle = "2000 - 2024",
caption = "Figure 6: Disaster Cost Relative to State GDP")
ggplot(disaster_cost_map) +
geom_sf(aes(fill = total_occ)) +
coord_sf() +
scale_fill_viridis_c(
breaks = occ_breaks,
labels = scales::comma
) +
labs(title = "Total Disaster Occurrences by State 2000-2024",
subtitle = "Facet Wrapped by disaster type",
caption = "Figure 7: Disaster Occurrence by State per Disaster Type") +
facet_wrap(~ disaster_type)
ggplot(disaster_cost_map) +
geom_sf(aes(fill = total_relief_adj)) +
coord_sf() +
scale_fill_viridis_c(
trans = "log",
breaks = relief_breaks,
labels = scales::label_dollar(
scale_cut = scales::cut_short_scale())
) +
labs(title = "Total Disaster Relief by State 2000-2024",
subtitle = "Facet Wrapped by disaster type",
caption = "Figure 8: Federal Relief for States per Disaster Typer") +
facet_wrap(~ disaster_type)
ggplot(disaster_cost_map) +
geom_sf(aes(fill = cost_per_gdp_adj)) +
coord_sf() +
scale_fill_viridis_c(
trans = "log",
breaks = burden_breaks,
labels = scales::label_number(scale_cut = scales::cut_short_scale())
) +
labs(title = "Total Financial Burden per State GDP 2000-2024",
subtitle = "Facet Wrapped by disaster type",
caption = "Figure 9: Financial Burden by State per Disaster Type") +
facet_wrap(~ disaster_type)
Global spatial autocorrelation was assessed using Moran’s I to determine whether disaster impacts exhibit statistically significant clustering across the United States. Moran’s I was calculated for adjusted measures of total federal relief, disaster occurrence, and cost relative to GDP. Spatial relationships were defined using a queen contiguity-based neighbor structure, and row-standardized spatial weights were applied. Statistical significance was evaluated using associated p-values, with Moran’s I values interpreted on a scale from –1 (dispersion) to +1 (clustering).
#create a neighbors matrix
neighbors <- poly2nb(disaster_cost_map, queen = TRUE)
#assign weights to the matrix
weighted_neighbors <- nb2listw(neighbors, style = "W")
#compute morans I for total cost, occurrence, and cost per gdp
morans_relief <- moran.test(disaster_cost_map$total_relief_adj, weighted_neighbors)
morans_occ <- moran.test(disaster_cost_map$total_occ, weighted_neighbors)
morans_costgdp <- moran.test(disaster_cost_map$cost_per_gdp_adj, weighted_neighbors,
zero.policy = TRUE)
#extract key results into a data frame
moran_results <- tibble(
Variable = c("Total Relief", "Total Occurrences", "Cost per GDP"),
Moran_I = c(morans_relief$estimate[1],
morans_occ$estimate[1],
morans_costgdp$estimate[1]),
Expected_I = c(morans_relief$estimate[2],
morans_occ$estimate[2],
morans_costgdp$estimate[2]),
SD = c(morans_relief$statistic,
morans_occ$statistic,
morans_costgdp$statistic),
p_value = c(morans_relief$p.value,
morans_occ$p.value,
morans_costgdp$p.value)
)
#display tibble
moran_results
## # A tibble: 3 × 5
## Variable Moran_I Expected_I SD p_value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Total Relief -0.000500 -0.00429 0.250 0.401
## 2 Total Occurrences 0.107 -0.00429 5.52 0.0000000166
## 3 Cost per GDP 0.0210 -0.00429 1.88 0.0303
Global Moran’s I provides a national summary measure, which may obscure localized spatial patterns. To address this potential limitation, Local Moran’s I (LISA) was employed to identify state-level clusters and spatial outliers. Local Moran’s I statistics were calculated for disaster relief, occurrence, and cost per GDP using the same spatial weights matrix. States were classified into cluster types—High–High, Low–Low, High–Low, Low–High, or Not Significant—based on the sign of the local statistic, the deviation from the mean, and statistical significance at the 0.05 level. Resulting LISA cluster maps visually identify hotspots, cold spots, and anomalous states, providing a state specific view of spatial heterogeneity in disaster impacts across the United States. Together, the combination of descriptive statistics, visualization, and global and local spatial autocorrelation analyses enables a comprehensive assessment of how natural disaster economic impacts and associated relief varies across space and time.
#Local Moran's I ----
local_morans_relief <- localmoran(disaster_cost_map$total_relief_adj, weighted_neighbors, zero.policy = TRUE)
local_morans_occ <- localmoran(disaster_cost_map$total_occ_adj, weighted_neighbors, zero.policy = TRUE)
local_morans_costgdp <- localmoran(disaster_cost_map$cost_per_gdp_adj, weighted_neighbors, zero.policy = TRUE)
#add these results back into the spatial object for local relief
disaster_cost_map$Ii_relief <- local_morans_relief[,1]
disaster_cost_map$Z_relief <- local_morans_relief[,4]
disaster_cost_map$P_relief <- local_morans_relief[,5]
#classify the results of local relief
average_relief <- mean(disaster_cost_map$total_relief_adj)
disaster_cost_map$cluster_relief <- with(disaster_cost_map,
ifelse(P_relief > 0.05, "Not significant",
ifelse(Ii_relief > 0 & total_relief_adj > average_relief, "High-High",
ifelse(Ii_relief > 0 & total_relief_adj < average_relief, "Low-Low",
ifelse(Ii_relief < 0 & total_relief_adj > average_relief, "High-Low",
"Low-High"))))
)
# plot local morans disaster relief
ggplot(disaster_cost_map) +
geom_sf(aes(fill = cluster_relief), color = "white", size = 0.2) +
scale_fill_discrete(name = "LISA Cluster Type") +
labs(
title = "Local Moran's I Cluster Map: Adjusted Disaster Relief",
subtitle = "High-High = Hotspot, Low-Low = Cold Spot, High-Low/Low-High = Spatial Outliers",
caption = "Figure 10: LISA Federal Relief"
) +
theme_minimal(base_size = 12) +
theme(
legend.position = "right",
panel.grid = element_blank()
)
#add these results back into the spatial object for local occurrence
disaster_cost_map$Ii_occ <- local_morans_occ[,1]
disaster_cost_map$Z_occ <- local_morans_occ[,4]
disaster_cost_map$P_occ <- local_morans_occ[,5]
#classify the results of local occurrence
average_occ <- mean(disaster_cost_map$total_occ_adj)
disaster_cost_map$cluster_occ <- with(disaster_cost_map,
ifelse(P_occ > 0.05, "Not significant",
ifelse(Ii_occ > 0 & total_occ_adj > average_occ, "High-High",
ifelse(Ii_occ > 0 & total_occ_adj < average_occ, "Low-Low",
ifelse(Ii_occ < 0 & total_occ_adj > average_occ, "High-Low",
"Low-High"))))
)
# plot local moran's disaster occurrence
ggplot(disaster_cost_map) +
geom_sf(aes(fill = cluster_occ), color = "white", size = 0.2) +
scale_fill_discrete(name = "LISA Cluster Type") +
labs(
title = "Local Moran's I Cluster Map: Adjusted Disaster Occurrence",
subtitle = "High-High = Hotspot, Low-Low = Cold Spot, High-Low/Low-High = Spatial Outliers",
caption = "Figure 11: LISA Disaster Occurrence"
) +
theme_minimal(base_size = 12) +
theme(
legend.position = "right",
panel.grid = element_blank()
)
#add these results back into the spatial object for local cost per GDP
disaster_cost_map$Ii_costgdp <- local_morans_costgdp[,1]
disaster_cost_map$Z_costgdp <- local_morans_costgdp[,4]
disaster_cost_map$P_costgdp <- local_morans_costgdp[,5]
#classify the results of local cost per GDP
average_costgdp <- mean(disaster_cost_map$cost_per_gdp_adj)
disaster_cost_map$cluster_costgdp <- with(disaster_cost_map,
ifelse(P_costgdp > 0.05, "Not significant",
ifelse(Ii_costgdp > 0 & cost_per_gdp_adj > average_costgdp, "High-High",
ifelse(Ii_costgdp > 0 & cost_per_gdp_adj < average_costgdp, "Low-Low",
ifelse(Ii_costgdp < 0 & cost_per_gdp_adj > average_costgdp, "High-Low",
"Low-High"))))
)
# plot local moran's disaster costgdp
ggplot(disaster_cost_map) +
geom_sf(aes(fill = cluster_costgdp), color = "white", size = 0.2) +
scale_fill_discrete(name = "LISA Cluster Type") +
labs(
title = "Local Moran's I Cluster Map: Adjusted Disaster Cost per State GDP",
subtitle = "High-High = Hotspot, Low-Low = Cold Spot, High-Low/Low-High = Spatial Outliers",
caption = "Figure 12: LISA Cost Per GDP"
) +
theme_minimal(base_size = 12) +
theme(
legend.position = "right",
panel.grid = element_blank()
)
Initial descriptive analyses provide an overview of natural disaster patterns in the United States from 2000 to 2024. The most frequently occurring disaster types during this period were severe storms, fires, floods, and hurricanes which are widely recognized as being sensitive to climatic variability. Summary statistics further indicate that these same disaster types are also responsible for the largest economic costs, suggesting an overlap between disaster frequency and financial impact.
Temporal analysis of disaster occurrences indicates potential increases in event frequency over time (Figure 1), although the overall trend remains inconclusive due to substantial year-to-year variability. Two notable spikes in disaster occurrence are observed in 2005 and a second, more pronounced increase in 2020. Outside of these peak years, annual disaster counts fluctuate without a clear trend.
In contrast, total disaster costs exhibit an upward trajectory beginning around 2018 and continuing through the end of the study period (Figure 2). FEMA disaster relief funding holds consistency with these rising costs (Figure 3). This consistency highlights that FEMA has maintained appropriate levels of federal relief amid rising costs of natural disaster events.
Spatial patterns in disaster impacts are evident across the United States. Choropleth maps of disaster relief (Figure 4), disaster occurrence (Figure 5), and financial burden (Figure 6) (measured as disaster cost relative to state GDP) reveal that states receiving the highest levels of federal relief also tend to experience the greatest relative economic burdens. This pattern is particularly pronounced in states with repeated exposure to high-cost disaster events.
Analysis of disaster types across geographic space further illustrates distinct regional patterns(Figures 7,8,9). Wildfires are most prevalent along the West Coast and in Texas, while severe storms occur predominantly across the central and Midwestern United States. Hurricanes are concentrated in the southeastern and Gulf Coast regions. Texas emerges as a unique case, experiencing high frequencies of multiple disaster types. Spatial patterns of disaster costs closely mirror patterns of disaster occurrence, with coastal storms, wildfires, floods, and hurricanes accounting for the largest economic losses. Additionally, disaster relief and disaster cost relative to state GDP display similar spatial distributions, indicating that states with high economic burdens receive high amounts of federal relief.
To assess whether disaster impacts exhibit significant spatial patterns, global and local Moran’s I statistics were calculated for total disaster relief, total disaster occurrence, and disaster cost relative to state GDP.
Global Moran’s I results indicate differing spatial structures across the three variables. Total disaster relief shows no significant spatial autocorrelation, suggesting that relief expenditures are not geographically clustered and are instead driven by individual disaster events. In contrast, total disaster occurrence exhibits a positive and statistically significant Moran’s I value, indicating spatial clustering in the frequency of disaster events across neighboring states. This finding suggests that geographic location plays an important role in disaster occurrence patterns but not in relief and economic burden.
Disaster cost relative to state GDP demonstrates a small but statistically significant positive spatial autocorrelation. This result indicates that economic vulnerability to disasters tends to cluster spatially, with neighboring states exhibiting similar levels of relative financial burden. Taken together, the global Moran’s I results show that disaster occurrence and economic vulnerability are spatially structured, while total disaster relief is spatially random.
Local Moran’s I (LISA) analysis provides insight into the specific locations of spatial clusters and outliers. Results were classified into five categories: not significant, high–high, low–low, high–low, and low–high. High–high and low–low classifications indicate local clustering, while high–low and low–high classifications represent spatial outliers relative to neighboring states.
For disaster relief (Figure 10), most states exhibit no local spatial autocorrelation, reinforcing the global Moran’s I finding that relief is primarily event-driven. Louisiana, Missouri, and Florida, emerge as spatial outliers with disproportionately high relief values relative to neighboring states.
Disaster occurrence (Figure 11) displays more pronounced spatial structure. High–high clusters are concentrated in the southeastern United States, while low–low clusters form a distinct band across the western United States, extending from Idaho southward through Arizona. An additional low–low cluster is observed in the northeastern United States. Several spatial outliers are present around Texas, reflecting its unusually high frequency of disaster events compared to surrounding states.
Finally, disaster cost relative to state GDP (Figure 12) exhibits clustering patterns similar to those observed for total disaster relief, although the spatial distribution of outliers shifts westward. This shift highlights regions where disaster relief compensates a particularly high economic burden relative to state-level economic capacity.
Overall, the results demonstrate clear temporal, spatial, and economic patterns in U.S. natural disasters from 2000 to 2024. Disaster occurrence and economic vulnerability exhibit significant spatial clustering, while disaster relief is largely spatially independent. These findings underscore the importance of geographic context in understanding disaster risk and highlight regional disparities in economic exposure to natural disasters.
The preparation for this project proved to be more cumbersome than initially anticipated. Due to unforeseen circumstances, the original datasets selected for analysis were inadequate for producing a meaningful report or deriving accurate and useful results. A critical pivot had to be made later in the project timeline than was ideal. This shift required identifying new datasets and reformulating the research question in order to support a more meaningful and informative analysis. Even after this adjustment, the data wrangling and preparation process remained a substantial challenge. The time required for cleaning, integrating, and structuring the data ultimately delayed the analytical portion of the project and limited the scope of what could be accomplished with the improved datasets.
FEMA data, in conjunction with GDP data from the Bureau of Economic Analysis, offer a vast array of information that, if more time had been available, could have strengthened this study considerably. With additional time, the analysis could have provided deeper insights into the spatial patterns of climate change–influenced disaster events and their associated economic costs across the United States. In retrospect, an additional challenge was attempting to address too many objectives within a single report, which ultimately diluted the strength and clarity of the findings related to disaster-driven economic impacts.
Despite these limitations, this analysis provides a valuable foundation for understanding the spatial distribution of natural disasters, their economic burdens across the United States, and the importance of having an appropriately funded Federal Emergency Management Agency. Several of the results were unexpected. At this scale of analysis, the data suggested a more complex relationship than anticipated between climate change, disaster occurrence, and economic cost. I initially expected to observe clear upward trends in disaster frequency and costs, accompanied by declining levels of federal relief. However, these patterns were not consistently evident across the country and it is meaningful to visual the impact FEMA has on dampening economic burdens of associated disasters. Similarly, higher levels of spatial autocorrelation were anticipated, yet the results were largely inconclusive at the national scale. While I remain confident that climate change is influencing natural disaster dynamics, the geographic and environmental diversity of the United States appears to complicate these relationships.
The diversity across regions, and within individual states, poses a significant challenge for large-scale analyses. Ecosystem variation, climatological differences, and region-specific disaster types make it difficult to draw strong conclusions from a nationwide approach. Different disasters entail distinct costs, logistical demands, and resource allocations, further complicating interpretation. Although a countrywide analysis offers valuable context, this project likely does not capture the full complexity of disaster-related economic impacts. Given additional time, a finer-scale approach focused on state-level or regional analyses would likely yield more precise and meaningful insights into changes in disaster frequency, intensity, and financial burden across the United States.
This study nonetheless serves as a useful starting point. It highlights underlying spatial patterns and economic dynamics associated with natural disasters while also revealing the limitations of broad-scale analysis. Future work could build on this foundation by incorporating higher-resolution spatial data, such as state-level analyses that are later aggregated to a national framework. Additionally, integrating temperature or other climate variables would help clarify the mechanisms linking climate change to observed disaster trends. Such extensions would provide a more complete and accurate representation of how natural disasters and their economic impacts are evolving over time due to human-induced climate change.
It is clear that the importance of a Federal Emergency Management Agency is crucial as the climate continues to change and alter the phenomena humanity experiences. The loss to life, property, and communities can not be understated. Appropriately funded and supported organizations, local governments, and federal entities are necessary to mitigate losses, prepare emergency plans, and provide relief for individuals and communities for these natural disaster events.
Bhola, V., Hertelendy, A., Hart, A., Adnan, S., Ciottone, G. (2023). Escalating costs of billion-dollar disasters in the US. [The Journal of Climate Change and Health], [Volume 10 (ISSN 2667-2782)]. https://doi.org/10.1016/S2667-2782(22)00090-6
Federal Emergency Management Agency (December 12, 2025). OpenFEMA Dataset: FEMA Web Disaster Declarations - v1. FEMA. Retrieved December 1, 2025, from https://www.fema.gov/openfema-data-page/fema-web-disaster-declarations-v1
Federal Emergency Management Agency (December 12, 2025). OpenFEMA Dataset: Public Assistance Funded Projects Details - v2. FEMA. Retrieved December 1, 2025, from https://www.fema.gov/openfema-data-page/public-assistance-funded-projects-details-v2
Natural Earth (n.d.). Natural Earth. Retrieved December 1st, 2025, from https://www.naturalearthdata.com/
ropensci. (January 25, 2022). ropensci/rfema. Retrieved December 1, 2025, from https://github.com/ropensci/rfema
Seneviratne, S. I., Zhang, X., Adnan, M., Badi, W., Dereczynski, C., Di Luca, A., Ghosh, S., Iskandar, I., Kossin, J., Lewis, S., Otto, F., Pinto, I., Satoh, M., Vicente-Serrano, S. M., Wehner, M., & Zhou, B. (2021). Weather and climate extreme events in a changing climate (Chapter 11). In V. Masson-Delmotte, P. Zhai, A. Pirani, S. L. Connors, C. Péan, S. Berger, N. Caud, Y. Chen, L. Goldfarb, M. I. Gomis, M. Huang, K. Leitzell, E. Lonnoy, J. B. R. Matthews, T. K. Maycock, T. Waterfield, O. Yelekçi, R. Yu, & B. Zhou (Eds.), Climate change 2021: The physical science basis. Contribution of Working Group I to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change (pp. 1513-1766). Cambridge University Press. https://doi.org/10.1017/9781009157896.013 ipcc.ch
U.S. Bureau of Economic Analysis (September 25, 2025). Gross Domestic Product. Retrieved December 1, 2025, from https://www.bea.gov/data/gdp/gross-domestic-product
U.S. Bureau of Economic Analysis (April 3, 2025). us-bea/bea.R. Retrieved December 1, 2025, from https://github.com/us-bea