mirror of
https://github.com/dylanbenzi/hurricane_normalization_app.git
synced 2026-07-29 21:01:27 +00:00
685 lines
26 KiB
R
685 lines
26 KiB
R
library(bslib)
|
||
|
||
study_card <- function(
|
||
title,
|
||
authors,
|
||
journal,
|
||
year,
|
||
abstract,
|
||
doi = NULL
|
||
) {
|
||
card(
|
||
fill = FALSE,
|
||
card_body(
|
||
div(
|
||
class = "d-flex justify-content-between align-items-start gap-3",
|
||
div(
|
||
class = "flex-grow-1",
|
||
h5(class = "mb-2", strong(title)),
|
||
span(class = "badge bg-secondary mb-2", year),
|
||
tags$small(class = "text-muted", strong(journal)),
|
||
p(class = "text-muted small mb-1", authors),
|
||
p(abstract)
|
||
),
|
||
div(
|
||
class = "text-end flex-shrink-0",
|
||
if (!is.null(doi)) {
|
||
a(
|
||
class = "btn btn-outline-primary btn-sm mt-2",
|
||
href = doi,
|
||
target = "_blank",
|
||
"View Paper"
|
||
)
|
||
}
|
||
)
|
||
)
|
||
)
|
||
)
|
||
}
|
||
|
||
download_card <- function(
|
||
title,
|
||
description,
|
||
data_coverage,
|
||
last_updated,
|
||
data_id
|
||
) {
|
||
return(
|
||
card(
|
||
fill = F,
|
||
layout_columns(
|
||
col_widths = c(10, 2),
|
||
strong(title),
|
||
actionButton(
|
||
class = "btn-primary btn-sm",
|
||
icon = icon("download"),
|
||
paste("download", data_id, sep = "-"),
|
||
"Download"
|
||
)
|
||
),
|
||
p(description),
|
||
div(
|
||
class = "d-flex",
|
||
div(
|
||
class = "d-flex me-4",
|
||
bs_icon("database-fill", class = "text-muted me-1"),
|
||
h6(data_coverage)
|
||
),
|
||
div(
|
||
class = "d-flex me-4",
|
||
bs_icon("calendar-event-fill", class = "text-muted me-1"),
|
||
h6(last_updated)
|
||
)
|
||
)
|
||
)
|
||
)
|
||
}
|
||
|
||
# cost norm, economic factors, fatalities, svis, rmw county weights, landfalls
|
||
download_cards <- list(
|
||
download_card(
|
||
"Cyclone Cost Normalization",
|
||
"Normalized economic damage estimates for US landfalling hurricanes 1900-2023 using updated MMH/MMP methodology.",
|
||
"1900-2023",
|
||
"8/03/2025",
|
||
"cost_norm"
|
||
),
|
||
download_card(
|
||
"Economic Factors",
|
||
"Yearly economic factors for GDP deflator and Current-Cost Net Stock of Fixed Assets and Consumer Durable Goods (CCNFACDG) used in the MMH/MMP cost normalization methodology.",
|
||
"1900-2024",
|
||
"-/-/2025",
|
||
"usa_econ"
|
||
),
|
||
download_card(
|
||
"Tracked Landfalls",
|
||
"Landfalls with identifiers, RMW county weights, and time/location data for all storms normalized using the MMH/MMP methodology.",
|
||
"1900-2024",
|
||
"3/15/2026",
|
||
"landfalls"
|
||
),
|
||
download_card(
|
||
"Cyclone Fatalities",
|
||
"All known direct fatalities with peril categories from tropical cyclones",
|
||
"1963-2024",
|
||
"3/31/2026",
|
||
"fatalities"
|
||
),
|
||
download_card(
|
||
"Social Vulnerability Index",
|
||
"County/tract level data representing the vulnerability of people in that region",
|
||
"X-X",
|
||
"...",
|
||
"svi"
|
||
),
|
||
download_card(
|
||
"Additional Data",
|
||
"We can add more here later",
|
||
"X-X",
|
||
"...",
|
||
"additional"
|
||
)
|
||
)
|
||
|
||
ui <- page_navbar(
|
||
id = "main_navbar",
|
||
fillable = TRUE,
|
||
title = "Tropical Cyclone Database",
|
||
theme = bs_theme(
|
||
bootswatch = "sandstone"
|
||
),
|
||
nav_panel(
|
||
"Home",
|
||
layout_columns(
|
||
col_widths = c(6, 6),
|
||
card(
|
||
HTML(
|
||
'
|
||
<h4>Welcome to the Hurricane Cost Normalization Web App</h4>
|
||
|
||
<p>Our platform provides access to normalized hurricane damage data spanning from 1900 to 2024, allowing researchers, policymakers, insurance professionals, and the public to better understand how hurricane costs have changed over time.</p>
|
||
|
||
<h6>Our Data</h6>
|
||
|
||
<p>The core datasets used in this app are based on research by Muller et al. (2025) published in <i>Bulletin of the American Meteorlogical Society</i>. This study updates and refines hurricane damage normalization methodologies to provide a more accurate picture of how historical hurricanes would impact today\'s society.</p>
|
||
|
||
<ul>
|
||
<li><b>MMP24:</b> The Muller-Mooney Population (2024) normalization with RMW weighting on affected population.</li>
|
||
|
||
<li><b>MMH24:</b> The Muller-Mooney Housing (2024) normalization with RMW weighting on affected housing units.</li>
|
||
</ul>
|
||
|
||
<h6>Methodology Innovations</h6>
|
||
|
||
<p>Our platform incorporates several methodological innovations over previously used cost normalization formulas:</p>
|
||
|
||
<ul>
|
||
<li><b>Radius of Maximum Wind (RMW) Data:</b> Using landfalling RMWs to identify impacted coastal counties.</li>
|
||
|
||
<li><b>RMW Affected Area Weighting:</b> Determining affected population and housing unit figures based on RMW.</li>
|
||
|
||
<li><b>Expanded Storm Coverage:</b> Including over 200 storms analyzed with interactive data.</li>
|
||
|
||
<li><b>Up-to-date Data:</b> Using the latest population, housing unit, and economic data through 2024.</li>
|
||
</ul>
|
||
'
|
||
)
|
||
),
|
||
layout_columns(
|
||
col_widths = 12,
|
||
card(
|
||
HTML(
|
||
'
|
||
<h4>How to Use This App</h4>
|
||
|
||
<h6>1. Find a Storm — Storm Selector</h6>
|
||
<p>Browse and filter the full storm database. Use the search bar to find a storm by name, or narrow results by year range, available data types, and normalized cost or fatality thresholds. Click a row to preview storm statistics, then press <b>Load Storm</b> to explore it in detail.</p>
|
||
|
||
<h6>2. Explore Storm Data — Storm Explorer</h6>
|
||
<p>Once a storm is loaded, four analysis tabs become available:</p>
|
||
<ul>
|
||
<li><b>Track:</b> Interactive map of the storm\'s full HURDAT2 track with meteorological observations and a time-series chart of windspeed and pressure.</li>
|
||
|
||
<li><b>Cost Normalization:</b> View MMH24 and MMP24 normalized damage indices and losses over time for each landfall. Toggle between index and dollar values, linear and log scale, and individual landfalls.</li>
|
||
|
||
<li><b>Human Factors:</b> Animated county-level map showing population and housing unit growth in the affected area from the storm year through 2024.</li>
|
||
|
||
<li><b>Fatality Map:</b> State-level direct fatality breakdown by cause, with a category pie chart and state-by-cause heatmap.</li>
|
||
</ul>
|
||
|
||
<h6>Data Availability</h6>
|
||
<p>All storms include HURDAT2 track data. Cost normalization and fatality data are available for a subset of storms, indicated by the <span class="badge bg-success">Cost</span> and <span class="badge bg-danger">Fatality</span> badges in the Storm Selector.</p>
|
||
'
|
||
)
|
||
),
|
||
card(
|
||
"Contact Us",
|
||
card_body(
|
||
"CONTACT US INFO"
|
||
)
|
||
)
|
||
),
|
||
)
|
||
),
|
||
nav_panel(
|
||
"Storm Selector",
|
||
layout_columns(
|
||
col_widths = c(8, 4),
|
||
card(
|
||
div(
|
||
class = "px-1 pt-1",
|
||
layout_columns(
|
||
col_widths = c(6, 6),
|
||
textInput(
|
||
"table_search",
|
||
"Storm Search",
|
||
placeholder = "Search storm name...",
|
||
width = "100%"
|
||
),
|
||
div(
|
||
tags$label(class = "form-label", "Data Availability"),
|
||
layout_columns(
|
||
col_widths = c(4, 4, 4),
|
||
tags$div(
|
||
class = "btn-group w-100",
|
||
role = "group",
|
||
tags$button(
|
||
class = "btn btn-primary w-100",
|
||
style = "pointer-events: none;",
|
||
"HURDAT2"
|
||
)
|
||
),
|
||
checkboxGroupButtons(
|
||
"filter_cost",
|
||
label = NULL,
|
||
choices = "Cost",
|
||
selected = character(0),
|
||
status = "outline-success",
|
||
justified = TRUE,
|
||
width = "100%"
|
||
),
|
||
checkboxGroupButtons(
|
||
"filter_fatality",
|
||
label = NULL,
|
||
choices = "Fatality",
|
||
selected = character(0),
|
||
status = "outline-danger",
|
||
justified = TRUE,
|
||
width = "100%"
|
||
)
|
||
)
|
||
)
|
||
),
|
||
layout_columns(
|
||
col_widths = c(6, 6),
|
||
sliderInput(
|
||
"dt_year_filter",
|
||
"Year",
|
||
min = 1900,
|
||
max = 2024,
|
||
value = c(1900, 2024),
|
||
sep = "",
|
||
step = 1,
|
||
ticks = FALSE,
|
||
width = "100%"
|
||
),
|
||
numericRangeInput(
|
||
"dt_deaths_filter",
|
||
"Direct Deaths",
|
||
value = c(0, dt_death_max),
|
||
min = 0,
|
||
separator = "-",
|
||
width = "100%"
|
||
)
|
||
),
|
||
layout_columns(
|
||
col_widths = c(6, 6),
|
||
numericRangeInput(
|
||
"dt_mmh_filter",
|
||
"MMH ($)",
|
||
value = c(0, round(dt_mmh_max, digits = 0)),
|
||
min = 0,
|
||
separator = "-",
|
||
width = "100%"
|
||
),
|
||
numericRangeInput(
|
||
"dt_mmp_filter",
|
||
"MMP ($)",
|
||
value = c(0, round(dt_mmp_max, digits = 0)),
|
||
min = 0,
|
||
separator = "-",
|
||
width = "100%"
|
||
)
|
||
)
|
||
),
|
||
hr(class = "m-0"),
|
||
DTOutput("storm_coverage_table")
|
||
),
|
||
layout_columns(
|
||
col_widths = 12,
|
||
card(
|
||
height = 300,
|
||
div(
|
||
h5(strong(textOutput("dt_storm_name_year"))),
|
||
uiOutput("dt_storm_badges")
|
||
),
|
||
layout_columns(
|
||
col_widths = c(6, 6),
|
||
card(
|
||
class = "bg-light",
|
||
card_body(
|
||
class = "p-1",
|
||
div(
|
||
div(tags$small(class = "text-muted", "Track Observations")),
|
||
h6(strong(textOutput("dt_track_observations")))
|
||
)
|
||
)
|
||
),
|
||
card(
|
||
class = "bg-light",
|
||
card_body(
|
||
class = "p-1",
|
||
div(
|
||
div(tags$small(class = "text-muted", "Max Category")),
|
||
h6(strong(textOutput("dt_max_category")))
|
||
)
|
||
)
|
||
),
|
||
card(
|
||
class = "bg-light",
|
||
card_body(
|
||
class = "p-1",
|
||
div(
|
||
div(tags$small(class = "text-muted", "Max Windspeed")),
|
||
h6(strong(textOutput("dt_max_windspeed")))
|
||
)
|
||
)
|
||
),
|
||
card(
|
||
class = "bg-light",
|
||
card_body(
|
||
class = "p-1",
|
||
div(
|
||
div(tags$small(class = "text-muted", "Min Pressure")),
|
||
h6(strong(textOutput("dt_min_pressure")))
|
||
)
|
||
)
|
||
)
|
||
),
|
||
actionButton(class = "btn-primary", "load_storm", "Load Storm")
|
||
),
|
||
card(
|
||
height = 700,
|
||
card_body(
|
||
class = "p-0",
|
||
#leafletOutput("all_storms_map", height = "100%")
|
||
)
|
||
)
|
||
)
|
||
)
|
||
),
|
||
nav_panel(
|
||
title = "Storm Explorer",
|
||
navset_card_underline(
|
||
nav_item(strong(textOutput("selected_storm_name_year"))),
|
||
nav_panel(
|
||
"Track",
|
||
layout_columns(
|
||
col_widths = 12,
|
||
layout_column_wrap(
|
||
card(
|
||
full_screen = TRUE,
|
||
card_body(
|
||
class = "p-0",
|
||
leafletOutput("track_map", height = "100%")
|
||
)
|
||
),
|
||
layout_column_wrap(
|
||
width = 1,
|
||
card(
|
||
card_body(
|
||
DTOutput("track_data", fill = TRUE)
|
||
)
|
||
),
|
||
card(
|
||
dygraphOutput("track_met_chart", height = "250px")
|
||
)
|
||
)
|
||
)
|
||
)
|
||
),
|
||
nav_panel(
|
||
"Cost Normalization",
|
||
layout_column_wrap(
|
||
col_widths = 1,
|
||
card(
|
||
full_screen = TRUE,
|
||
layout_sidebar(
|
||
sidebar = sidebar(
|
||
virtualSelectInput(
|
||
"storm_overview_cost_index_lf_select",
|
||
"Landfalls",
|
||
choices = NULL,
|
||
showValueAsTags = T,
|
||
multiple = T,
|
||
autoSelectFirstOption = T
|
||
),
|
||
radioGroupButtons(
|
||
"storm_overview_cost_index_scale",
|
||
label = "Value",
|
||
choices = c("Index", "Loss"),
|
||
status = "outline-primary rounded-0",
|
||
justified = T
|
||
),
|
||
checkboxGroupButtons(
|
||
"storm_overview_cost_index_mmh_mmp",
|
||
label = "MMH/MMP",
|
||
choices = c("MMH", "MMP"),
|
||
selected = c("MMH", "MMP"),
|
||
status = "outline-primary rounded-0",
|
||
justified = T
|
||
),
|
||
radioGroupButtons(
|
||
"storm_overview_cost_index_y_scale",
|
||
label = "Y-Axis Scale",
|
||
choices = c("Linear", "Log"),
|
||
status = "outline-primary rounded-0",
|
||
justified = T
|
||
)
|
||
),
|
||
dygraphOutput("cost_index_chart")
|
||
)
|
||
)
|
||
)
|
||
),
|
||
nav_panel(
|
||
"Human Factors",
|
||
layout_column_wrap(
|
||
width = 1,
|
||
layout_columns(
|
||
col_widths = 12,
|
||
row_heights = c("auto", "1fr", "auto"),
|
||
card(
|
||
fill = FALSE,
|
||
layout_columns(
|
||
selectInput(
|
||
"growth_trend_lf_select",
|
||
"Landfall Select",
|
||
choices = NULL
|
||
),
|
||
radioGroupButtons(
|
||
"growth_map_metric",
|
||
label = "Display Metric",
|
||
choices = c("Population", "Housing"),
|
||
selected = "Population",
|
||
status = "outline-primary rounded-0",
|
||
justified = T
|
||
)
|
||
),
|
||
),
|
||
card(
|
||
full_screen = TRUE,
|
||
card_body(
|
||
class = "p-0",
|
||
leafletOutput("growth_map", height = "100%")
|
||
)
|
||
),
|
||
card(
|
||
fill = FALSE,
|
||
sliderInput(
|
||
"growth_trend_map_slider",
|
||
label = NULL,
|
||
min = 0,
|
||
max = 2024,
|
||
step = 1,
|
||
animate = list(
|
||
interval = 250,
|
||
loop = F
|
||
),
|
||
value = 0,
|
||
sep = "",
|
||
width = "100%",
|
||
ticks = F
|
||
)
|
||
)
|
||
)
|
||
)
|
||
),
|
||
nav_panel(
|
||
"Fatality Map",
|
||
layout_columns(
|
||
col_widths = c(8, 4),
|
||
card(
|
||
full_screen = TRUE,
|
||
card_body(
|
||
class = "p-0",
|
||
leafletOutput("fatality_map", height = "100%")
|
||
)
|
||
),
|
||
layout_column_wrap(
|
||
width = 1,
|
||
card(
|
||
plotlyOutput("fatality_pie", height = "100%")
|
||
),
|
||
card(
|
||
plotlyOutput("fatality_heatmap", height = "100%")
|
||
)
|
||
)
|
||
)
|
||
),
|
||
nav_spacer(),
|
||
nav_menu(
|
||
title = "Export",
|
||
nav_item("Storm report")
|
||
)
|
||
)
|
||
),
|
||
nav_panel(
|
||
"Social Vulnerability"
|
||
),
|
||
nav_menu(
|
||
"Data",
|
||
nav_panel(
|
||
"What We Track",
|
||
layout_columns(
|
||
col_widths = 12,
|
||
row_heights = c("auto", "1fr"),
|
||
card(
|
||
fill = FALSE,
|
||
card_body(
|
||
class = "py-3",
|
||
div(
|
||
class = "d-flex justify-content-around text-center align-items-center",
|
||
div(
|
||
class = "px-4",
|
||
div(class = "fs-3 fw-semibold lh-1 text-primary", "201"),
|
||
div(
|
||
class = "text-muted mt-1",
|
||
tags$small("cost-normalized storms")
|
||
)
|
||
),
|
||
div(class = "vr"),
|
||
div(
|
||
class = "px-4",
|
||
div(class = "fs-3 fw-semibold lh-1 text-primary", "$3.36T"),
|
||
div(
|
||
class = "text-muted mt-1",
|
||
tags$small("total normalized losses")
|
||
)
|
||
),
|
||
div(class = "vr"),
|
||
div(
|
||
class = "px-4",
|
||
div(class = "fs-3 fw-semibold lh-1", "126"),
|
||
div(
|
||
class = "text-muted mt-1",
|
||
tags$small("years of cost coverage")
|
||
)
|
||
),
|
||
div(class = "vr"),
|
||
div(
|
||
class = "px-4",
|
||
div(class = "fs-3 fw-semibold lh-1 text-danger", "766"),
|
||
div(
|
||
class = "text-muted mt-1",
|
||
tags$small("fatality-tracked storms")
|
||
)
|
||
),
|
||
div(class = "vr"),
|
||
div(
|
||
class = "px-4",
|
||
div(class = "fs-3 fw-semibold lh-1 text-danger", "2,656"),
|
||
div(
|
||
class = "text-muted mt-1",
|
||
tags$small("direct fatalities recorded")
|
||
)
|
||
)
|
||
)
|
||
)
|
||
),
|
||
layout_columns(
|
||
col_widths = 6,
|
||
layout_columns(
|
||
col_widths = 12,
|
||
card(
|
||
card_header("HURDAT2 Integration"),
|
||
"Our application integrates the HURDAT2 Atlantic basin dataset maintained by the National Hurricane Center. It provides 6-hour observations of historical tropical cyclones including storm location, status, maximum sustained windspeed, minimum pressure, and radius of maximum winds (RMW), covering all recorded Atlantic basin storms."
|
||
),
|
||
card(
|
||
card_header("Economic Data"),
|
||
"Historic base damage estimates are sourced from NHC Monthly Weather Review and Tropical Cyclone reports, supplemented by the National Centers for Environmental Information (NCEI) for more recent and high-impact events. Inflation adjustments use the GDP deflator and the Current-Cost Net Stock of Fixed Assets and Consumer Durable Goods (CCNFACDG) from the U.S. Bureau of Economic Analysis."
|
||
),
|
||
card(
|
||
card_header("Population and Housing Growth"),
|
||
"County-level population and housing unit figures are compiled from an internal dataset spanning the full period of record. These figures drive the human growth factors applied in the MMH and MMP normalization methodologies. Census tract-level data from the U.S. Census Bureau supports higher-resolution normalization methods."
|
||
),
|
||
card(
|
||
card_header("Social Vulnerability"),
|
||
"Social vulnerability indices are constructed from the American Community Survey published by the U.S. Census Bureau. Inputs include poverty rate, language barriers, unemployment, educational attainment, age distribution, vehicle access, and disability status. These metrics are combined to characterize the relative vulnerability of counties and census tracts in storm-affected areas."
|
||
),
|
||
card(
|
||
card_header("Direct Fatalities"),
|
||
"Direct fatality records are sourced from NHC Monthly Weather Review and Tropical Cyclone reports, cross-referenced with additional historical sources to validate counts. Each record is categorized by cause of death (e.g., wind, surge, inland flooding, tornado) and geographic location where available, enabling peril-level analysis across storms."
|
||
)
|
||
),
|
||
navset_card_tab(
|
||
title = "Geographic Data Coverage",
|
||
nav_panel(
|
||
"Cost",
|
||
card_body(
|
||
padding = 0,
|
||
leafletOutput("all_storms_map", height = "100%")
|
||
)
|
||
),
|
||
nav_panel(
|
||
"Fatality",
|
||
card_body(
|
||
padding = 0,
|
||
)
|
||
),
|
||
nav_panel(
|
||
"SVI",
|
||
card_body(
|
||
padding = 0,
|
||
)
|
||
)
|
||
)
|
||
)
|
||
)
|
||
),
|
||
nav_panel(
|
||
"Export",
|
||
layout_column_wrap(
|
||
width = 1 / 2,
|
||
card(
|
||
card_header("Available Datasets"),
|
||
!!!download_cards
|
||
),
|
||
card()
|
||
)
|
||
)
|
||
),
|
||
nav_menu(
|
||
"About",
|
||
nav_panel(
|
||
"Our Studies",
|
||
layout_columns(
|
||
col_widths = c(-2, 8, -2),
|
||
div(
|
||
class = "py-3",
|
||
h4("Research", class = "mb-1"),
|
||
p(
|
||
class = "text-muted mb-4",
|
||
"The datasets and methodologies in this application are grounded in peer-reviewed research. The studies below document the normalization frameworks, data sources, and analytical approaches used throughout."
|
||
),
|
||
study_card(
|
||
title = "Normalized Hurricane Damage in the United States: 1900-2022",
|
||
authors = "Joanne Muller, Kaylee Mooney, Steven G. Bowen, Philip J. Klotzbach, Tynisha Martin, Tom J. Philp, Bhatt Dhruvkumar, Richard S. Dixon, Senthil B. Girimurugan",
|
||
journal = "Bulletin of the American Meteorological Society",
|
||
year = "2025",
|
||
abstract = "Since 1900, landfalling hurricanes have been the costliest of all weather-related disasters to afflict the contiguous United States. To provide a present-day (2022) reevaluation of this risk, this study employs an improved normalization approach to better understand potential economic event losses in the context of contemporary societal conditions. The updated methodology identifies impacted coastal counties using the newly available radius of maximum winds at landfall. Hurricane Katrina is the most expensive hurricane since 1900, with a likely 2022 normalized cost of $234 billion. Combined losses from the 50 most expensive hurricane events are ∼ $2.9 trillion in normalized economic losses. The study also explores some “analog storms” where comparisons can be made between two historic storms with similar landfall locations. For example, category 5 Andrew (1992) has lower 2022 normalized losses than category 4 Great Miami (1926), at $125 billion versus $178 billion, most likely due to the significantly different radius of maximum wind size (10 vs 20 n mi; 1 n mi = 1.852 km). As with previous studies, we conclude that increases in inflation, coastal population, regional wealth, and higher replacement costs remain the primary drivers of observed increases in hurricane-related damage. These upsurges are especially impactful for some coastal regions along the U.S. Gulf and Southeast Coasts that have seen exceptionally high rates of population/housing growth in comparison to countrywide growth. Exposure growth trends are likely to continue in the future and, independent of any influence of climate change on tropical cyclone behavior, are expected to result in greater hurricane-related damage costs than have been previously observed.",
|
||
doi = "https://doi.org/10.1175/BAMS-D-23-0280.1"
|
||
),
|
||
study_card(
|
||
title = "Continental United States direct Atlantic tropical cyclone fatalities: 1963-2024",
|
||
authors = "Joanne Muller, Abigail M. Idzik, Dylan Benzi, Philip J. Klotzbach, Heather Skaza Acosta, Daniel R. Chavas, Sebastian Aspron Urdaneta, Charles T. Gray, Jamie E. Morris, Senthil B. Girimurugan, Dhruvkumar Bhatt",
|
||
journal = "npj Natural Hazards",
|
||
year = "2026",
|
||
abstract = "Tropical cyclone (TC) fatality attribution is critical for understanding changing risk patterns, warning effectiveness, and informing emergency management strategies. Despite this, publicly available TC fatality time series data are incomplete. The last publication on TC fatalities, broken down by peril, spanned 1963–2012. To extend this record and capture more recent trends in TC mortality patterns, we present a publicly accessible fatalities database of direct continental United States TC fatalities spanning 1963–2024. We find that the leading cause of TC fatalities is freshwater flood (36%) followed by storm surge (33%). Freshwater flood fatalities are common across storms (10% of storms have >1 fatality), whereas surge fatalities are concentrated in a smaller number of high-impact events (3% of storms have >1 fatality). We also note that high fatality years tend to coincide with high seasonal Atlantic accumulated cyclone energy, with low fatality years coinciding with lower seasonal accumulated cyclone energy.",
|
||
doi = "https://doi.org/10.1038/s44304-026-00178-8"
|
||
),
|
||
study_card(
|
||
title = "Normalized Continental US Tropical Cyclone Damage Estimates from 1900-2023: An Updated Methodology and Expanded Dataset",
|
||
authors = "Kaylee Mooney, Joanne Muller, Philip Klotzbach, Senthil B Girimurugan, Dhruvkumar Bhatt, Steven G. Bowen, Dylan Benzi, Abigail Marie Idzik",
|
||
journal = "Earth and Space Science",
|
||
year = "TBD",
|
||
abstract = "This study presents expanded and updated normalized economic damage estimates for continental US landfalling hurricanes and tropical storms from 1900 to 2023. Here we refine our previously developed methodology by incorporating radius of maximum wind-based area weightings for population and housing unit adjustments through time. The updated methodology corrects for overestimation and underestimation issues found in previous models. Herein, two normalization paths are presented—Muller and Mooney Population and Muller and Mooney Housing—to account for changes in inflation, wealth, and population and housing unit changes, respectively. Additionally, this study extends our original 50-storm dataset to 201 storms, significantly improving the historical scope and analytical power of continental United States tropical cyclone normalized loss data. Older storms like the Great Miami Hurricane (1926) remain among the most economically damaging after 2023 normalization, surpassing even recent events such as Hurricane Katrina (2005) and Hurricane Harvey (2017). This research underscores the impact of increasing coastal exposure, emphasizing how continued population growth and development in vulnerable areas are key drivers of rising tropical cyclone-related economic losses.",
|
||
doi = "https://doi.org/10.22541/essoar.175710759.96236986/v1"
|
||
)
|
||
)
|
||
)
|
||
),
|
||
nav_panel("MMH/MMP Methodology")
|
||
)
|
||
)
|