← All studies · askamerica.ai

Ten-plus years out, severely disaster-hit counties are about the same size as they'd have been otherwise

FEMA disaster declarations 2010-13 vs. ACS county population 2010-2023 (2,209 counties); diff-in-diff estimate ≈ 0, not statistically distinguishable from zero

Long-run population effect of severe federal disasters on hit counties Counties with an Individual-Assistance major disaster declared 2010-13 vs. counties never severely hit (COVID excluded), ACS 5-yr county population Diff-in-diff effect on log population, 2010→2023 (13 yrs) -0.002 log points p = 0.98, not significant Equivalent to about a 0.2% difference — statistically indistinguishable from zero Counties in the comparison 889 treated / 1,423 clean control 889 counties had a DR disaster with Individual Assistance declared 2010-2013, non-COVID; 1,423 never had any non-COVID IH disaster… County population index, hit vs. not-hit counties (2010=100) 0 20 40 60 80 100 120 Year Population index 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 Severe-disaster counties (IH declared, 2010-13) Never-severe-disaster counties (control) Aggregate population summed across each group, indexed to 2010; series shown only through 2021 to avoid a 2022 Connecticut… Leave-one-state-out check Range: -1.3 to +0.4 log points 51 refits (each dropping one state); coefficient never significant, no state drives the null result AskAmerica · askamerica.ai
SVG

Summary

About the same. Comparing 889 U.S. counties that had a major (DR) federal disaster declaration with FEMA's Individual Assistance program activated in 2010-2013 against a clean control group of 1,423 counties that never had a severe federal disaster declared at all (2010-2026), their population growth from 2010 to 2023 (10-13 years later) tracked almost identically. A county-level difference-in-differences regression finds an effect of essentially zero: -0.002 log points (about -0.2%), with a standard error of 0.087 and p = 0.98 — nowhere close to statistically significant. A leave-one-state-out robustness check confirms no single state is driving this null result. This matches the weight of the academic literature: severe disasters do raise out-migration rates in the years right after they strike, but most studies find little to no significant long-run (multi-decade) effect on county population levels, except for the small subset of truly catastrophic events (Katrina-scale).

How 'hit' and 'otherwise' were defined, and what every exclusion in the SQL removed

Treated group (889 counties): counties with at least one FEMA major disaster declaration (declaration_type='DR') with the Individuals and Households Program activated (ih_program_declared=true, FEMA's real Individual Assistance signal — the ia_program_declared field is dead at the source) in 2010-2013, excluding COVID/'Biological' declarations. This targets disasters severe enough to trigger direct federal aid to households, following the 'severe disaster' definition used in the literature (Boustan, Kahn, Rhode & Yanguas 2020).

The incident_type <> 'Biological' exclusion: applied to both the treatment and the control definitions, this predicate removed every 2020 COVID 'Biological' IH declaration from consideration — 3,272 of the roughly 3,221 US counties had one, i.e. essentially every county in the country. Without this exclusion there would be no possible control group at all (every county would count as 'hit' by COVID's nationwide Individual Assistance declaration), so the exclusion is necessary and is disclosed here explicitly, next to the number it removed.

The s.county_fips IS NOT NULL, e.county_fips IS NOT NULL, and i.county_fips IS NOT NULL join-null guards: these three predicates, used when joining the disaster tables to the population panel, removed exactly 0 rows in every run of this analysis — confirmed directly by querying SELECT COUNT(*) FROM disasters.disaster_declarations WHERE county_fips IS NULL, which returned 0. They are defensive SQL guards against a join-nullability case that, in this table, never actually occurs; they excluded nothing.

The 897 counties dropped as a 'contaminated' control: starting from all 2,320 non-treated counties (2,312 of which had valid 2010 and 2023 population data), 897 of them had a non-COVID Individual-Assistance disaster declared at some other point between 2010 and 2026 (outside the 2010-13 treatment window). These 897 were dropped from the headline control group, leaving 1,423 as the 'clean, never-severely-hit' control. This exclusion matters: with the 897 left in (i.e., comparing all 889 treated against all 2,320 non-treated regardless of whether the latter were later hit), the comparison group's own disaster experience would blend into the estimate. The direction of the headline finding (no significant effect) is unlikely to reverse under that alternative specification, since the excluded counties are themselves disaster-affected and would, if anything, pull the control average's growth rate toward the treated group's rather than away from it — but the alternative specification was not separately re-run here, so this is a directional argument, not a second measured number.

Why 2010-2013 for treatment: FEMA's declaration data starts in 2010. Requiring the disaster to have struck by 2013 guarantees at least 10 years of follow-up against the ACS county population series, which runs through 2023.

Result: diff-in-differences

Running treated × post as the effect of interest in a panel of (2010, 2023) observations for both groups: coefficient = -0.00188 log points, SE = 0.0872, t = -0.02, p = 0.983, n = 4,624 county-year observations (2,312 counties × 2 years). This is the estimated average effect of having been hit by a severe federal disaster in 2010-13 on a county's population 10+ years later, relative to the trend in similar never-hit counties — and it is not distinguishable from zero.

A leave-one-state-out sensitivity check (51 refits, each excluding one state) found the coefficient ranged only from -0.0125 to +0.0039 log points across every possible state exclusion — never significant in any refit, confirming the null is not an artifact of one outlier state (e.g., Texas, Florida, or Puerto Rico).

Other caveats

What the published literature says

Boustan, Kahn, Rhode & Yanguas, 'The Effect of Natural Disasters on Economic Activity in US Counties: A Century of Data' (NBER Working Paper 23410 / Journal of Urban Economics): using the universe of US federal disaster declarations 1920-2010, they find severe disasters raise a county's out-migration rate by about 1.5 percentage points in the decade of the disaster, and lower housing prices/rents 2.5-5.0%, consistent with reduced local labor demand. They emphasize this is a migration-rate response, largely because disasters lower local productivity, not a wholesale long-run collapse in population level for the typical severe disaster.

A separate strand of the literature (e.g., the Annals of Regional Science study on disasters and county population density growth, 1960-2000) finds no significant adverse long-run population-density growth effect from natural disasters at the county level in most cases — reinforcing the 'about the same' finding here.

Case studies of individual catastrophic events (Hurricane Katrina, the 1927 Mississippi Flood, the Dust Bowl) do find large, lasting population losses for the specific hardest-hit places, but these are the extreme tail, not the typical severe federally declared disaster this analysis's broader panel captures.

Every query behind this report

10 warehouse calls ran in this session, in order. Each is reproducible against the same snapshot.

query — 500 rows — 4778 ms

WITH severe AS (
  SELECT DISTINCT county_fips
  FROM disasters.disaster_declarations
  WHERE declaration_type = 'DR' AND ih_program_declared = true
    AND EXTRACT(YEAR FROM declaration_date) BETWEEN 2010 AND 2013
    AND county_fips IS NOT NULL
),
ever_dr AS (
  SELECT DISTINCT county_fips
  FROM disasters.disaster_declarations
  WHERE declaration_type = 'DR' AND county_fips IS NOT NULL
)
SELECT
  CASE WHEN s.county_fips IS NOT NULL THEN 1 ELSE 0 END AS treated,
  CASE WHEN e.county_fips IS NOT NULL AND s.county_fips IS NULL THEN 1 ELSE 0 END AS other_dr_excluded
FROM (SELECT DISTINCT county_fips FROM census.acs_population WHERE county_fips IS NOT NULL) a
LEFT JOIN severe s ON a.county_fips = s.county_fips
LEFT JOIN ever_dr e ON a.county_fips = e.county_fips
query — 2 rows — 5927 ms

WITH severe AS (
  SELECT DISTINCT county_fips
  FROM disasters.disaster_declarations
  WHERE declaration_type = 'DR' AND ih_program_declared = true
    AND EXTRACT(YEAR FROM declaration_date) BETWEEN 2010 AND 2013
    AND county_fips IS NOT NULL
),
ever_dr AS (
  SELECT DISTINCT county_fips
  FROM disasters.disaster_declarations
  WHERE declaration_type = 'DR' AND county_fips IS NOT NULL
),
pop2010 AS (
  SELECT county_fips, total_population AS pop2010
  FROM census.acs_population WHERE "year" = '2010' AND geography = 'county'
),
pop2023 AS (
  SELECT county_fips, total_population AS pop2023
  FROM census.acs_population WHERE "year" = '2023' AND geography = 'county'
)
SELECT
  CASE WHEN s.county_fips IS NOT NULL THEN 1 ELSE 0 END AS treated,
  COUNT(*) AS n,
  COUNT(CASE WHEN e.county_fips IS NOT NULL AND s.county_fips IS NULL THEN 1 END) AS other_dr_n
FROM pop2010 p10
JOIN pop2023 p23 ON p10.county_fips = p23.county_fips
LEFT JOIN severe s ON p10.county_fips = s.county_fips
LEFT JOIN ever_dr e ON p10.county_fips = e.county_fips
GROUP BY CASE WHEN s.county_fips IS NOT NULL THEN 1 ELSE 0 END
query — 1 rows — 3170 ms

WITH ever_dr AS (
  SELECT DISTINCT county_fips
  FROM disasters.disaster_declarations
  WHERE declaration_type = 'DR' AND county_fips IS NOT NULL
),
pop2010 AS (
  SELECT DISTINCT county_fips
  FROM census.acs_population WHERE "year" = '2010' AND geography = 'county'
)
SELECT COUNT(*) AS total_counties,
  COUNT(CASE WHEN e.county_fips IS NOT NULL THEN 1 END) AS ever_dr_counties
FROM pop2010 p LEFT JOIN ever_dr e ON p.county_fips = e.county_fips
query — 2 rows — 6201 ms

WITH severe AS (
  SELECT DISTINCT county_fips
  FROM disasters.disaster_declarations
  WHERE declaration_type = 'DR' AND ih_program_declared = true
    AND EXTRACT(YEAR FROM declaration_date) BETWEEN 2010 AND 2013
    AND county_fips IS NOT NULL
),
ever_ih AS (
  SELECT DISTINCT county_fips
  FROM disasters.disaster_declarations
  WHERE ih_program_declared = true AND county_fips IS NOT NULL
),
pop2010 AS (
  SELECT county_fips, total_population AS pop2010
  FROM census.acs_population WHERE "year" = '2010' AND geography = 'county'
),
pop2023 AS (
  SELECT county_fips, total_population AS pop2023
  FROM census.acs_population WHERE "year" = '2023' AND geography = 'county'
)
SELECT
  CASE WHEN s.county_fips IS NOT NULL THEN 1 ELSE 0 END AS treated,
  COUNT(*) AS n,
  COUNT(CASE WHEN i.county_fips IS NOT NULL AND s.county_fips IS NULL THEN 1 END) AS control_but_ih_elsewhere
FROM pop2010 p10
JOIN pop2023 p23 ON p10.county_fips = p23.county_fips
LEFT JOIN severe s ON p10.county_fips = s.county_fips
LEFT JOIN ever_ih i ON p10.county_fips = i.county_fips
GROUP BY CASE WHEN s.county_fips IS NOT NULL THEN 1 ELSE 0 END
query — 17 rows — 3868 ms
SELECT incident_type, COUNT(DISTINCT county_fips) AS counties, COUNT(*) AS n
FROM disasters.disaster_declarations
WHERE ih_program_declared = true
GROUP BY incident_type ORDER BY n DESC
query — 2 rows — 6809 ms

WITH severe AS (
  SELECT DISTINCT county_fips
  FROM disasters.disaster_declarations
  WHERE declaration_type = 'DR' AND ih_program_declared = true
    AND incident_type <> 'Biological'
    AND EXTRACT(YEAR FROM declaration_date) BETWEEN 2010 AND 2013
    AND county_fips IS NOT NULL
),
ever_ih_nonc19 AS (
  SELECT DISTINCT county_fips
  FROM disasters.disaster_declarations
  WHERE ih_program_declared = true AND incident_type <> 'Biological' AND county_fips IS NOT NULL
),
pop2010 AS (
  SELECT county_fips, total_population AS pop2010
  FROM census.acs_population WHERE "year" = '2010' AND geography = 'county'
),
pop2023 AS (
  SELECT county_fips, total_population AS pop2023
  FROM census.acs_population WHERE "year" = '2023' AND geography = 'county'
)
SELECT
  CASE WHEN s.county_fips IS NOT NULL THEN 1 ELSE 0 END AS treated,
  COUNT(*) AS n,
  COUNT(CASE WHEN i.county_fips IS NOT NULL AND s.county_fips IS NULL THEN 1 END) AS control_but_ih_elsewhere_excl_covid
FROM pop2010 p10
JOIN pop2023 p23 ON p10.county_fips = p23.county_fips
LEFT JOIN severe s ON p10.county_fips = s.county_fips
LEFT JOIN ever_ih_nonc19 i ON p10.county_fips = i.county_fips
GROUP BY CASE WHEN s.county_fips IS NOT NULL THEN 1 ELSE 0 END
diff_in_diff — 41299 ms

WITH severe AS (
  SELECT DISTINCT county_fips
  FROM disasters.disaster_declarations
  WHERE declaration_type = 'DR' AND ih_program_declared = true
    AND incident_type <> 'Biological'
    AND EXTRACT(YEAR FROM declaration_date) BETWEEN 2010 AND 2013
    AND county_fips IS NOT NULL
),
ever_ih_nonc19 AS (
  SELECT DISTINCT county_fips
  FROM disasters.disaster_declarations
  WHERE ih_program_declared = true AND incident_type <> 'Biological' AND county_fips IS NOT NULL
),
pop2010 AS (
  SELECT county_fips, total_population AS pop2010
  FROM census.acs_population WHERE "year" = '2010' AND geography = 'county'
),
pop2023 AS (
  SELECT county_fips, total_population AS pop2023
  FROM census.acs_population WHERE "year" = '2023' AND geography = 'county'
),
base AS (
  SELECT p10.county_fips, p10.pop2010, p23.pop2023,
    CASE WHEN s.county_fips IS NOT NULL THEN 1 ELSE 0 END AS treated,
    CASE WHEN i.county_fips IS NOT NULL AND s.county_fips IS NULL THEN 1 ELSE 0 END AS contaminated_control
  FROM pop2010 p10
  JOIN pop2023 p23 ON p10.county_fips = p23.county_fips
  LEFT JOIN severe s ON p10.county_fips = s.county_fips
  LEFT JOIN ever_ih_nonc19 i ON p10.county_fips = i.county_fips
  WHERE p10.pop2010 > 0 AND p23.pop2023 > 0
)
SELECT county_fips, treated, ln(pop2010) AS logpop, 0 AS post FROM base WHERE contaminated_control = 0
UNION ALL
SELECT county_fips, treated, ln(pop2023) AS logpop, 1 AS post FROM base WHERE contaminated_control = 0
query — 30 rows — 12149 ms

WITH severe AS (
  SELECT DISTINCT county_fips
  FROM disasters.disaster_declarations
  WHERE declaration_type = 'DR' AND ih_program_declared = true
    AND incident_type <> 'Biological'
    AND EXTRACT(YEAR FROM declaration_date) BETWEEN 2010 AND 2013
    AND county_fips IS NOT NULL
),
ever_ih_nonc19 AS (
  SELECT DISTINCT county_fips
  FROM disasters.disaster_declarations
  WHERE ih_program_declared = true AND incident_type <> 'Biological' AND county_fips IS NOT NULL
),
groups AS (
  SELECT a.county_fips,
    CASE WHEN s.county_fips IS NOT NULL THEN 1 ELSE 0 END AS treated,
    CASE WHEN i.county_fips IS NOT NULL AND s.county_fips IS NULL THEN 1 ELSE 0 END AS contaminated
  FROM (SELECT DISTINCT county_fips FROM census.acs_population WHERE geography='county') a
  LEFT JOIN severe s ON a.county_fips = s.county_fips
  LEFT JOIN ever_ih_nonc19 i ON a.county_fips = i.county_fips
)
SELECT p."year", g.treated, SUM(p.total_population) AS total_pop, COUNT(*) AS n_counties
FROM census.acs_population p
JOIN groups g ON p.county_fips = g.county_fips
WHERE p.geography = 'county' AND g.contaminated = 0
GROUP BY p."year", g.treated
ORDER BY p."year", g.treated
sensitivity_analysis — 14901 ms

WITH severe AS (
  SELECT DISTINCT county_fips
  FROM disasters.disaster_declarations
  WHERE declaration_type = 'DR' AND ih_program_declared = true
    AND incident_type <> 'Biological'
    AND EXTRACT(YEAR FROM declaration_date) BETWEEN 2010 AND 2013
    AND county_fips IS NOT NULL
),
ever_ih_nonc19 AS (
  SELECT DISTINCT county_fips
  FROM disasters.disaster_declarations
  WHERE ih_program_declared = true AND incident_type <> 'Biological' AND county_fips IS NOT NULL
),
pop2010 AS (
  SELECT county_fips, total_population AS pop2010
  FROM census.acs_population WHERE "year" = '2010' AND geography = 'county'
),
pop2023 AS (
  SELECT county_fips, total_population AS pop2023
  FROM census.acs_population WHERE "year" = '2023' AND geography = 'county'
),
base AS (
  SELECT p10.county_fips, p10.pop2010, p23.pop2023,
    LEFT(p10.county_fips,2) AS state_fips,
    CASE WHEN s.county_fips IS NOT NULL THEN 1 ELSE 0 END AS treated,
    CASE WHEN i.county_fips IS NOT NULL AND s.county_fips IS NULL THEN 1 ELSE 0 END AS contaminated_control
  FROM pop2010 p10
  JOIN pop2023 p23 ON p10.county_fips = p23.county_fips
  LEFT JOIN severe s ON p10.county_fips = s.county_fips
  LEFT JOIN ever_ih_nonc19 i ON p10.county_fips = i.county_fips
  WHERE p10.pop2010 > 0 AND p23.pop2023 > 0
),
panel AS (
  SELECT county_fips, state_fips, treated, ln(pop2010) AS logpop, 0 AS post FROM base WHERE contaminated_control = 0
  UNION ALL
  SELECT county_fips, state_fips, treated, ln(pop2023) AS logpop, 1 AS post FROM base WHERE contaminated_control = 0
)
SELECT logpop, treated, post, treated*post AS treatment_x_post, state_fips FROM panel
query — 1 rows — 1471 ms
SELECT COUNT(*) AS null_county_fips_rows FROM disasters.disaster_declarations WHERE county_fips IS NULL

Sources

  1. FEMA disaster declarations (Individual Assistance activated, DR type)
    Show SQL
    SELECT DISTINCT county_fips FROM disasters.disaster_declarations WHERE declaration_type = 'DR' AND ih_program_declared = true AND incident_type <> 'Biological' AND EXTRACT(YEAR FROM declaration_date) BETWEEN 2010 AND 2013
  2. ACS 5-year county total population, 2010 and 2023
    Show SQL
    SELECT county_fips, total_population FROM census.acs_population WHERE "year" IN ('2010','2023') AND geography = 'county'
  3. Diff-in-diff estimate (treated x post on log population)
    Show tool call
    diff_in_diff(outcome="logpop", treatment="treated", post="post")
  4. Leave-one-state-out sensitivity check on the diff-in-diff coefficient
    Show tool call
    sensitivity_analysis(outcome="logpop", predictors="['treated','post','treatment_x_post']", group_col="state_fips", term="treatment_x_post")
  5. Boustan, Kahn, Rhode & Yanguas, 'The Effect of Natural Disasters on Economic Activity in US Counties: A Century of Data', NBER Working Paper 23410 — fetched 2026-09-14
  6. Did natural disasters affect population density growth in US counties?, Annals of Regional Science — search summary only, not independently fetched
  7. The Local Economic Impact of Natural Disasters, Federal Reserve Bank of San Francisco Working Paper 2020-34 — fetched 2026-09-14, referenced for context