State firearm policy effects: a multi-estimator research report

Generated 2026-05-01 from scripts/build_research_report.py. All numbers reproducible from the scripts and CSV outputs in this repository. Companion data inventory: data_appendix.md. Source code: github.com/jedediahpidareese-coder/firearms-regulation-map. Public map: jedediahpidareese-coder.github.io/firearms-regulation-map.

Contents

  1. Executive summary
  2. Data and panel construction
  3. Methodology
  4. Permitless carry
  5. Civil-petition red-flag (ERPO)
  6. Universal background checks
  7. Stand-your-ground (SYG)
  8. Large-capacity magazine ban
  9. Minimum age 21 for handgun purchase
  10. Assault weapons ban
  11. Spatial regression discontinuity on county borders
  12. County-level Callaway-Sant'Anna ATT(g, t)
  13. Cross-policy synthesis
  14. Limitations and caveats
  15. Appendix: code map and reproduction

1. Executive summary

We estimate the causal effect of three U.S. state firearm policies — permitless concealed carry, civil-petition extreme risk protection orders ("red-flag laws"), and universal background checks (UBC) — on six outcomes: firearm suicide rate, non-firearm suicide rate, total suicide rate, firearm homicide rate, total homicide rate, and motor vehicle theft rate (placebo). Each policy is estimated by two modern staggered-adoption DiD estimators — Callaway-Sant'Anna (2021) ATT(g, t) and Cengiz et al. (2019) stacked DiD — under multiple specifications including regression adjustment and Hainmueller (2012) entropy balancing. We also report Roth-Sant'Anna (2019) honest pre-trend sensitivity bounds for the firearm-suicide outcome.

Two findings most defensible for publication

Three findings clearly NOT identified in this design

The motor vehicle theft placebo is significant in several specs across all three policies, which is a persistent identification challenge. For permitless carry the placebo failure is severe (and shows up in pre-trends too); for red-flag and UBC the stacked-DiD placebo CIs include zero, which is a meaningfully better identification position than CS21 alone suggested.

2. Data and panel construction

Estimates use a balanced state-year panel covering 50 U.S. states (DC excluded throughout) from 1979 through 2024 (suicide / homicide outcomes from a long-run firearm suicide / homicide v2 file end in 2023). The augmented variant of the panel adds granular FBI / OpenCrime crime components (homicide, robbery, rape, aggravated assault, burglary, larceny, motor vehicle theft), firearm and total suicide and homicide counts, the firearm-suicide-share ownership proxy, and the RAND TL-354 household firearm ownership rate (1980–2016).

The full prose-language data documentation lives in data_appendix.md. Every variable, source, and manipulation is documented there in plain English. The same panel powers the public choropleth map at jedediahpidareese-coder.github.io/firearms-regulation-map.

Sources used in the research analyses

Variable familySourceWindowNotes
Firearm laws (treatments)Tufts CTSI State Firearm Laws Database (Siegel et al.)1976–202472 binary indicators across 11 categories.
Firearm suicides / homicides (counts and per-100k rates)Firearm-suicide / homicide v2 dataset (Kalesan-style)1949–202350 states; DC excluded; non-firearm suicide derived as total − firearm.
Total homicide rate, motor vehicle theft rateFBI UCR / OpenCrime extraction1979–2024Same NC↔ND 2022 reassignment as the website build.
Macro controlsBLS LAUS unemployment, BEA per-capita personal income, Census state population1979–2024Real income deflated to 2024 USD via CPI-U.

All inputs are public. Reproduce the panel via scripts/build_firearms_panel.py and scripts/augment_panels.py.

3. Methodology

How to read the result tables (broad/strict, OR/RA, stars)

Every per-policy section has a table with up to 4 columns for CS21 and 3 for stacked-DiD. The columns vary along two axes: which control states the comparison uses (broad vs strict) and which estimator spec (OR vs RA; for stacked-DiD additionally EB).

Project recommended default: strict / RA when the strict pool is large enough (≥ 15 states), broad / RA otherwise. RA over OR almost always; broad over strict only if strict drops too many cohorts. The headline figure shown after each table is the broad/RA spec for CS21 and the unweighted spec for stacked-DiD; we picked these for visual consistency across policies, not because they're more identified than the others. Read the full 4-spec table.

Significance stars: * p<0.10, ** p<0.05, *** p<0.01, two-tailed, state-clustered. "% of base" next to each significant estimate expresses the ATT as a percentage of the all-state mean of that outcome over the analysis window — so a coefficient of −0.14 firearm homicide on a baseline mean of 4.5 per 100,000 reads as roughly −3% of base, which is a more interpretable size than the raw number.

Pre-trend test: the third line of each cell shows the average ATT over the pre-period (e ∈ [−5, −2]) and a "✓ / ✗" indicating whether that average is far from zero (✗ at |z| ≥ 1.96). Two equally-sized headline estimates can have very different credibility if one's pre-trend rejects and the other's doesn't — that's why we report it inline.

3.1 Callaway-Sant'Anna ATT(g, t)

For each treatment cohort g (year of first 0→1 or 1→0 switch in the policy variable, depending on policy) and each calendar year t in the analysis window:

ATT(g, t) = E[Yt − Yg−1 | treated, cohort g] − E[Yt − Yg−1 | comparison group]

We use the never-treated comparison group (no states ever switch in the panel window). Two specifications: OR = basic outcome regression, no covariates; RA = regression-adjusted (Sant'Anna & Zhao 2020) with ln_population, unemployment_rate, and ln_pcpi_real_2024 measured at year g−1. Two control rules: broad uses every never-treated state; strict applies a policy-specific filter (e.g., for permitless carry, controls must be shall-issue and permit-required throughout [g−5, g+5]). Standard errors via state-cluster Rademacher multiplier bootstrap (B = 2,000).

Aggregations: event-study ATT(e) is a treated-state-count-weighted average of ATT(g, g+e) across cohorts; overall post-treatment ATT is the same average for e ≥ 0.

3.2 Cengiz-Dube-Lindner-Zipperer stacked DiD

For each treatment cohort g, we build a stack: the treated state(s) plus all clean controls observed across [g−5, g+5]. We concatenate all stacks and run TWFE with stack-by-state and stack-by-event-time fixed effects:

Y = β · (treated × post) + αstack,state + δstack,event + ε

β is the average post-treatment ATT. We estimate via Frisch-Waugh-Lovell within-FE partialling. Standard errors are state-clustered (since the same state can appear in multiple stacks as a control). Three weighting specifications:

3.3 Roth-Sant'Anna pre-trend sensitivity bounds

For event-study coefficients with potentially problematic pre-trends, we report Roth-Sant'Anna (2019) honest sensitivity bounds. We fit a weighted linear regression of pre-period (e ∈ [−5, −2]) ATT coefficients on event time, recover the slope b̂ and its SE, then for each post-period e ≥ 0:

ATTadj(e) = ATT(e) − M · (e + 1) · b̂

with the CI half-width inflated by M·(e+1)·SE(b̂). M is the sensitivity parameter: M = 0 corresponds to the strict parallel-trends assumption; M = 1 means "post-trend deviation is at most as large as the linear extrapolation of the observed pre-trend"; M = 2 is a conservative "I don't trust the pre-trend at all" choice. Reported M ∈ (0, 0.5, 1.0, 2.0).

3.4 Substitution test

For policies whose primary outcome is firearm suicide, we add non-firearm suicide rate (derived as total_suicide_rate − firearm_suicide_rate) and total suicide rate as outcomes. The test:

3.5 Placebo: motor vehicle theft

None of the three policies has a direct mechanism for affecting motor vehicle theft. A clean identification design should produce ATT ≈ 0 for it. Persistent placebo failure tells us about unobserved trend differences between treated and control states.

4. Permitless carry

Treatment: permitconcealed (1 → 0 (state stops requiring a permit to carry concealed)).
Detailed write-up: CS21 methodology and stacked-DiD comparison.

Headline interpretation (Permitless carry, broad / RA)

Reading the broad-pool, regression-adjusted Callaway–Sant'Anna spec (the same spec the figure beneath the CS21 table reports), the statistically significant outcomes are:

"% of base" expresses the coefficient as a fraction of the all-state mean of the outcome over the analysis window — useful for an economic-magnitude read. A pre-trend rejection means the treated and control groups were already on diverging paths before the policy took effect, which weakens the causal claim. See §3 for an explanation of the spec grid (broad/strict, OR/RA) and the full 4-spec table below for results under the other specifications.

Treatment cohorts

Cohort yearn statesStates
20101AZ
20111WY
20153KS,ME,MS
20162ID,WV
20173MO,NH,ND
20193KY,OK,SD
20216AR,IA,MT,TN,TX,UT
20223GA,IN,OH
20233AL,FL,NE

Observation window and pre/post specification

Analysis window: 1999–2023 (state panel post-NICS; last year with v2 firearm-mortality data). Treated-cohort adoptions span 2010–2023.

Event window: [−5, +5] years around adoption (5 leads, 5 lags). This follows the modal modern DiD convention (Roth, Sant'Anna, Bilinski, Poe 2023, J Econometrics; the canonical Callaway–Sant'Anna 2021 framework defaults to symmetric leads/lags). The 5-year window is wide enough to detect dynamic treatment effects that build over time (Cheng-Hoekstra 2013 SYG; McClellan-Tekin 2017), but narrow enough that small-sample inference for the most recent cohorts remains feasible. Pre-trend test averages event-times [−5, −2] so the omitted year (−1) and the immediate post-period (+0, +1) do not contaminate the parallel-trends check (per Borusyak-Jaravel-Spiess 2024 and the Roth-SA bounds methodology).

Strict-pool window: control states must satisfy the policy's no-contamination rule for every year in [g−5, g+5] (the same window as the event study). This avoids "drifting" controls — states that are close to but not yet adopting the policy at g but adopt soon after, which would bias the comparison toward zero (Goodman-Bacon 2021, Sun-Abraham 2021).

Covariates used (literature-backed; see §3)

Three tiers per outcome family — Minimal / Headline / Expanded — shown in the covariate-sensitivity sub-table below.

Lethal violence (homicide, firearm homicide, total homicide) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_age_15_24, share_age_25_44, share_male, share_black_nh, share_hispanic, share_bachelors_plus, imprisonment_rate, sworn_officers_per_100k, alcohol_per_capita_ethanol_gallons

Suicide (firearm, total, non-firearm) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_male, share_age_15_24, share_age_25_44, share_bachelors_plus, share_black_nh, share_hispanic, alcohol_per_capita_ethanol_gallons, drug_overdose_per_100k, religion_adherents_pct_2020, ownership_rand

Property / placebo (MV theft) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_age_15_24, share_age_25_44, share_male, share_black_nh, share_hispanic, share_bachelors_plus, imprisonment_rate, sworn_officers_per_100k, alcohol_per_capita_ethanol_gallons

Covariate balance check (Table 1) — treated vs broad control pool at each cohort's g−1 baseline
CovariateTreated meanControl meanNormalized diff
ln_population15.03215.444-0.417
ln_pcpi_real_202411.00811.105-0.674
unemployment_rate4.9416.178-0.562
poverty_rate0.1360.127+0.284
share_age_15_240.1360.134+0.269
share_age_25_440.2550.262-0.504
share_male0.4970.492+0.632
share_black_nh0.0950.116-0.230
share_hispanic0.1000.145-0.451
share_bachelors_plus0.2890.335-0.902
imprisonment_rate405.742348.778+0.401
sworn_officers_per_100k194.583230.718-0.665
alcohol_per_capita_ethanol_gallons2.5472.522+0.042

Treated and control means pooled across cohorts at each cohort's g−1 anchor year. Normalized difference = (mean_T − mean_C) / sqrt((sd_T² + sd_C²)/2). Per Imbens & Rubin (2015), |normalized diff| > 0.25 (⚠) indicates covariate imbalance worth flagging — RA / EB reweighting is the standard remedy.

Callaway-Sant'Anna ATT(g, t) — overall post-treatment

OutcomeBroad / ORBroad / RAStrict / ORStrict / RA
firearm suicide rate+0.855 *** (+10.7% of base)
SE 0.063, z +13.66
pre-z -3.59 ✗
+1.005 *** (+12.5% of base)
SE 0.057, z +17.73
pre-z +7.05 ✗
+0.594 *** (+7.4% of base)
SE 0.064, z +9.25
pre-z -1.43 ✓
+0.780 *** (+9.7% of base)
SE 0.069, z +11.28
pre-z +0.13 ✓
nonfirearm suicide rate+0.042 (+0.7% of base)
SE 0.056, z +0.75
pre-z -2.77 ✗
-0.060 (-1.0% of base)
SE 0.068, z -0.89
pre-z -2.83 ✗
+0.015 (+0.3% of base)
SE 0.057, z +0.27
pre-z -2.31 ✗
-0.055 (-0.9% of base)
SE 0.060, z -0.91
pre-z -3.04 ✗
total suicide rate+0.897 *** (+6.5% of base)
SE 0.081, z +11.14
pre-z -4.71 ✗
+0.945 *** (+6.8% of base)
SE 0.090, z +10.55
pre-z +2.11 ✗
+0.610 *** (+4.4% of base)
SE 0.083, z +7.31
pre-z -2.75 ✗
+0.725 *** (+5.2% of base)
SE 0.090, z +8.05
pre-z -1.93 ✓
firearm homicide rate+0.286 ** (+6.9% of base)
SE 0.115, z +2.49
pre-z -1.36 ✓
+1.549 *** (+37.3% of base)
SE 0.125, z +12.43
pre-z -7.39 ✗
-0.011 (-0.3% of base)
SE 0.117, z -0.10
pre-z +0.89 ✓
+0.144 (+3.5% of base)
SE 0.166, z +0.87
pre-z +0.66 ✓
homicide rate-0.148 ** (-2.6% of base)
SE 0.073, z -2.04
pre-z -0.37 ✓
+1.155 *** (+20.2% of base)
SE 0.136, z +8.48
pre-z -5.54 ✗
-0.488 *** (-8.5% of base)
SE 0.080, z -6.09
pre-z +1.39 ✓
-0.411 *** (-7.2% of base)
SE 0.102, z -4.05
pre-z +1.37 ✓
motor vehicle theft rate-39.424 *** (-11.8% of base)
SE 4.299, z -9.17
pre-z +4.87 ✗
+26.281 *** (+7.9% of base)
SE 5.377, z +4.89
pre-z -10.15 ✗
-63.527 *** (-19.1% of base)
SE 5.082, z -12.50
pre-z +6.36 ✗
-47.906 *** (-14.4% of base)
SE 4.840, z -9.90
pre-z -1.33 ✓

Stars: * p<0.10, ** p<0.05, *** p<0.01 (two-tailed, state-clustered). "% of base" expresses the ATT as a percentage of the all-state mean of that outcome over the analysis window. ✓ / ✗ on the third line indicates whether the pre-trend test (avg ATT for e ∈ [-5, -2]) does NOT / DOES reject zero. Outcomes are per 100,000 residents.

Covariate sensitivity (multiverse: Minimal / Headline / Expanded covariate sets) — broad pool, RA spec
OutcomeMinimalHeadlineExpanded
firearm suicide rate+0.630 *** (+7.9% of base)
SE 0.040, z +15.60
+1.005 *** (+12.5% of base)
SE 0.057, z +17.73
+0.952 *** (+11.9% of base)
SE 0.060, z +15.97
nonfirearm suicide rate+0.022 (+0.4% of base)
SE 0.043, z +0.52
-0.060 (-1.0% of base)
SE 0.068, z -0.89
+0.144 ** (+2.5% of base)
SE 0.067, z +2.15
total suicide rate+0.652 *** (+4.7% of base)
SE 0.053, z +12.30
+0.945 *** (+6.8% of base)
SE 0.090, z +10.55
+1.096 *** (+7.9% of base)
SE 0.089, z +12.37
firearm homicide rate-0.102 (-2.5% of base)
SE 0.062, z -1.63
+1.549 *** (+37.3% of base)
SE 0.125, z +12.43
+0.458 *** (+11.0% of base)
SE 0.164, z +2.79
homicide rate-0.491 *** (-8.6% of base)
SE 0.073, z -6.74
+1.155 *** (+20.2% of base)
SE 0.136, z +8.48
-0.022 (-0.4% of base)
SE 0.093, z -0.24
motor vehicle theft rate-63.656 *** (-19.1% of base)
SE 4.252, z -14.97
+26.281 *** (+7.9% of base)
SE 5.377, z +4.89
+49.666 *** (+14.9% of base)
SE 5.505, z +9.02

Each column uses a different literature-backed covariate set (see §3 methodology preamble for definitions). Stars: * p<0.10, ** p<0.05, *** p<0.01. A coefficient that flips sign or loses significance across tiers is sensitive to covariate choice — interpret with care, per Donohue-Aneja-Weber 2019.

Stacked DiD (Cengiz et al. 2019) — overall post-treatment

OutcomeUnweightedRegression-adjustedEntropy-balanced
firearm suicide rate+0.394 *** (+4.9% of base)
SE 0.139, z +2.84
+0.394 *** (+4.9% of base)
SE 0.139, z +2.84
nonfirearm suicide rate+0.232 * (+4.0% of base)
SE 0.122, z +1.90
+0.232 * (+4.0% of base)
SE 0.122, z +1.90
total suicide rate+0.626 *** (+4.5% of base)
SE 0.172, z +3.64
+0.626 *** (+4.5% of base)
SE 0.172, z +3.64
firearm homicide rate-0.143 (-3.4% of base)
SE 0.302, z -0.47
-0.143 (-3.4% of base)
SE 0.302, z -0.47
homicide rate-0.461 * (-8.1% of base)
SE 0.260, z -1.78
-0.461 * (-8.1% of base)
SE 0.260, z -1.78
motor vehicle theft rate-57.173 ** (-17.2% of base)
SE 23.286, z -2.46
-57.173 ** (-17.2% of base)
SE 23.286, z -2.46

Stars: * p<0.10, ** p<0.05, *** p<0.01 (two-tailed, state-clustered). "% of base" expresses the ATT as a percentage of the all-state mean of that outcome. Outcomes per 100,000 residents.

CS21 event study (broad / RA spec)

Callaway-Sant'Anna ATT by event time (RA) -- permitless carry Firearm suicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -0.24 0.3 0.83 1.4 1.9 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 0 1 2 3 4 5 -0.88 -0.34 0.21 0.75 1.3 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 0 1 2 3 4 5 -0.59 0.14 0.87 1.6 2.3 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -1.7 -0.48 0.76 2 3.2 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -1.5 -0.25 0.95 2.2 3.4 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 0 1 2 3 4 5 -1.7e+02 -1.1e+02 -49 14 77 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Stacked-DiD event study (unweighted spec)

Callaway-Sant'Anna ATT by event time (UNWEIGHTED) -- permitless carry Firearm suicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -0.94 -0.49 -0.035 0.42 0.87 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 -1 0 1 2 3 4 5 -0.63 -0.23 0.17 0.56 0.96 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.3 -0.54 0.19 0.93 1.7 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.6 -0.91 -0.22 0.46 1.1 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.7 -1.1 -0.43 0.23 0.88 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.3e+02 -79 -26 28 81 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Stacked-DiD event study (entropy-balanced spec)

Callaway-Sant'Anna ATT by event time (EB) -- permitless carry Firearm suicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -0.94 -0.49 -0.035 0.42 0.87 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 -1 0 1 2 3 4 5 -0.63 -0.23 0.17 0.56 0.96 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.3 -0.54 0.19 0.93 1.7 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.6 -0.91 -0.22 0.46 1.1 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.7 -1.1 -0.43 0.23 0.88 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.3e+02 -79 -26 28 81 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Roth-Sant'Anna pre-trend bounds — firearm suicide, e = +1

EstimatorSpecATT(+1)95% CI (M=0)ATT(+1) trend-adj95% CI (M=1)M=1 verdict
cs21broad / or+0.567(+0.261, +0.873)+0.377(-0.108, +0.862)fails
cs21broad / ra+1.096(+0.894, +1.298)+0.685(-0.070, +1.440)fails
cs21strict / or+0.448(+0.137, +0.758)+0.373(-0.110, +0.856)fails
cs21strict / ra+0.754(+0.379, +1.128)+0.296(-0.495, +1.087)fails
stackddsingle / eb+0.421(-0.029, +0.870)+0.357(-0.270, +0.984)fails
stackddsingle / unweighted+0.421(-0.029, +0.870)+0.357(-0.270, +0.984)fails

Roth-Sant'Anna sensitivity bounds at event time +1. M = post-trend deviation as a multiple of the linear extrapolation of the observed pre-trend. M=1 = "post-trend looks like more of the same"; M=2 = "post-trend could be twice the pre-trend magnitude".

Synthetic control method (Abadie-Diamond-Hainmueller 2010)

For small-cohort policies, the literature (Webster 2014, Crifasi 2015, McCourt 2020, Kivisto 2018, Klarevas 2019) uses SCM rather than cohort-pooled DiD because per-event-time DiD estimates are noisy when only 1-4 states adopt. SCM constructs an explicit weighted counterfactual from the donor pool that minimizes pre-period MSPE, then attributes the post-period gap to the treatment. Inference is via permutation: refit SCM on every donor as if treated, compare the actual post-period effect to the placebo distribution.

FL_2023 — SCM per-state results

OutcomePost ATT (per 100k)Placebo p-value
firearm suicide rate-0.044 (-0.5% of base)p = 1.000
placebo n = 11, sd = 0.651
firearm homicide rate-0.378 (-9.1% of base)p = 0.455
placebo n = 11, sd = 1.215
homicide rate-0.475 (-8.3% of base)p = 0.636
placebo n = 11, sd = 1.339
motor vehicle theft rate-261.819 *** (-78.6% of base)p = 0.000
placebo n = 11, sd = 138.369

Post ATT = mean(treated − synthetic) over the post-treatment years. Placebo p-value: two-sided rank from permutation across all donor states (refitting SCM on each donor as if treated). Stars at 10% / 5% / 1% from the placebo distribution. "% of base" expresses the ATT as a fraction of the all-state mean.

Trajectory: motor vehicle theft rate

Florida (2023): Motor vehicle theft rate (per 100k) [placebo] adoption (2023) 2011 2013 2015 2017 2019 2021 2023 58 2.5e+02 4.4e+02 6.3e+02 8.3e+02 Florida (treated) Synthetic counterfactual Donor states (gray)

TX_2021 — SCM per-state results

OutcomePost ATT (per 100k)Placebo p-value
firearm suicide rate+0.470 (+5.9% of base)p = 0.400
placebo n = 10, sd = 0.679
firearm homicide rate-0.352 (-8.5% of base)p = 0.500
placebo n = 10, sd = 1.141
homicide rate-0.220 (-3.8% of base)p = 0.800
placebo n = 10, sd = 2.021
motor vehicle theft rate-37.335 (-11.2% of base)p = 0.900
placebo n = 10, sd = 149.902

Post ATT = mean(treated − synthetic) over the post-treatment years. Placebo p-value: two-sided rank from permutation across all donor states (refitting SCM on each donor as if treated). Stars at 10% / 5% / 1% from the placebo distribution. "% of base" expresses the ATT as a fraction of the all-state mean.

Trajectory: firearm suicide rate

Texas (2021): Firearm suicide rate (per 100k) adoption (2021) 2009 2011 2013 2015 2017 2019 2021 2023 4.8 7.3 9.9 12 15 Texas (treated) Synthetic counterfactual Donor states (gray)

5. Civil-petition red-flag (ERPO)

Treatment: gvro (0 → 1 (state allows civilian petition for an extreme risk protection order)).
Detailed write-up: CS21 methodology and stacked-DiD comparison.

Headline interpretation (Civil-petition red-flag (ERPO), broad / RA)

Reading the broad-pool, regression-adjusted Callaway–Sant'Anna spec (the same spec the figure beneath the CS21 table reports), the statistically significant outcomes are:

"% of base" expresses the coefficient as a fraction of the all-state mean of the outcome over the analysis window — useful for an economic-magnitude read. A pre-trend rejection means the treated and control groups were already on diverging paths before the policy took effect, which weakens the causal claim. See §3 for an explanation of the spec grid (broad/strict, OR/RA) and the full 4-spec table below for results under the other specifications.

Treatment cohorts

Cohort yearn statesStates
20162CA,WA
20184DE,MA,MD,OR
20194CO,IL,NJ,NY
20202HI,NV
20231VT

Observation window and pre/post specification

Analysis window: 1999–2023 (state panel post-NICS; last year with v2 firearm-mortality data). Treated-cohort adoptions span 2016–2023.

Event window: [−5, +5] years around adoption (5 leads, 5 lags). This follows the modal modern DiD convention (Roth, Sant'Anna, Bilinski, Poe 2023, J Econometrics; the canonical Callaway–Sant'Anna 2021 framework defaults to symmetric leads/lags). The 5-year window is wide enough to detect dynamic treatment effects that build over time (Cheng-Hoekstra 2013 SYG; McClellan-Tekin 2017), but narrow enough that small-sample inference for the most recent cohorts remains feasible. Pre-trend test averages event-times [−5, −2] so the omitted year (−1) and the immediate post-period (+0, +1) do not contaminate the parallel-trends check (per Borusyak-Jaravel-Spiess 2024 and the Roth-SA bounds methodology).

Strict-pool window: control states must satisfy the policy's no-contamination rule for every year in [g−5, g+5] (the same window as the event study). This avoids "drifting" controls — states that are close to but not yet adopting the policy at g but adopt soon after, which would bias the comparison toward zero (Goodman-Bacon 2021, Sun-Abraham 2021).

Covariates used (literature-backed; see §3)

Three tiers per outcome family — Minimal / Headline / Expanded — shown in the covariate-sensitivity sub-table below.

Lethal violence (homicide, firearm homicide, total homicide) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_age_15_24, share_age_25_44, share_male, share_black_nh, share_hispanic, share_bachelors_plus, imprisonment_rate, sworn_officers_per_100k, alcohol_per_capita_ethanol_gallons

Suicide (firearm, total, non-firearm) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_male, share_age_15_24, share_age_25_44, share_bachelors_plus, share_black_nh, share_hispanic, alcohol_per_capita_ethanol_gallons, drug_overdose_per_100k, religion_adherents_pct_2020, ownership_rand

Property / placebo (MV theft) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_age_15_24, share_age_25_44, share_male, share_black_nh, share_hispanic, share_bachelors_plus, imprisonment_rate, sworn_officers_per_100k, alcohol_per_capita_ethanol_gallons

Covariate balance check (Table 1) — treated vs broad control pool at each cohort's g−1 baseline
CovariateTreated meanControl meanNormalized diff
ln_population15.44715.117+0.310
ln_pcpi_real_202411.16811.026+1.214
unemployment_rate4.0383.913+0.119
poverty_rate0.1160.134-0.716
share_age_15_240.1320.136-0.537
share_age_25_440.2660.254+0.899
share_male0.4920.495-0.309
share_black_nh0.0970.105-0.092
share_hispanic0.1670.107+0.620
share_bachelors_plus0.3640.302+1.242
imprisonment_rate323.727411.953-0.643
sworn_officers_per_100k226.533208.775+0.311
alcohol_per_capita_ethanol_gallons2.5482.404+0.285

Treated and control means pooled across cohorts at each cohort's g−1 anchor year. Normalized difference = (mean_T − mean_C) / sqrt((sd_T² + sd_C²)/2). Per Imbens & Rubin (2015), |normalized diff| > 0.25 (⚠) indicates covariate imbalance worth flagging — RA / EB reweighting is the standard remedy.

Callaway-Sant'Anna ATT(g, t) — overall post-treatment

OutcomeBroad / ORBroad / RAStrict / ORStrict / RA
firearm suicide rate-0.210 *** (-2.6% of base)
SE 0.077, z -2.74
pre-z +5.08 ✗
+0.722 *** (+9.0% of base)
SE 0.139, z +5.19
pre-z +2.38 ✗
-0.241 *** (-3.0% of base)
SE 0.082, z -2.96
pre-z +5.42 ✗
+0.006 (+0.1% of base)
SE 0.211, z +0.03
pre-z -2.33 ✗
nonfirearm suicide rate+0.077 (+1.3% of base)
SE 0.059, z +1.31
pre-z +0.27 ✓
-0.358 *** (-6.1% of base)
SE 0.110, z -3.26
pre-z +4.72 ✗
+0.035 (+0.6% of base)
SE 0.061, z +0.57
pre-z +0.55 ✓
-0.530 *** (-9.0% of base)
SE 0.175, z -3.02
pre-z +5.82 ✗
total suicide rate-0.133 (-1.0% of base)
SE 0.101, z -1.32
pre-z +3.27 ✗
+0.364 ** (+2.6% of base)
SE 0.149, z +2.45
pre-z +4.49 ✗
-0.206 * (-1.5% of base)
SE 0.106, z -1.94
pre-z +3.77 ✗
-0.524 ** (-3.8% of base)
SE 0.246, z -2.13
pre-z +2.22 ✗
firearm homicide rate-0.574 *** (-13.8% of base)
SE 0.106, z -5.42
pre-z +2.58 ✗
-0.606 *** (-14.6% of base)
SE 0.114, z -5.33
pre-z -3.58 ✗
-0.561 *** (-13.5% of base)
SE 0.109, z -5.14
pre-z +2.71 ✗
-0.906 *** (-21.8% of base)
SE 0.148, z -6.14
pre-z -2.18 ✗
homicide rate-0.369 *** (-6.4% of base)
SE 0.114, z -3.23
pre-z +1.52 ✓
-0.934 *** (-16.3% of base)
SE 0.116, z -8.05
pre-z -0.10 ✓
-0.364 *** (-6.4% of base)
SE 0.116, z -3.14
pre-z +1.55 ✓
-1.041 *** (-18.2% of base)
SE 0.139, z -7.49
pre-z +0.70 ✓
motor vehicle theft rate+38.594 *** (+11.6% of base)
SE 9.271, z +4.16
pre-z +0.47 ✓
-22.040 *** (-6.6% of base)
SE 6.403, z -3.44
pre-z -0.42 ✓
+36.244 *** (+10.9% of base)
SE 9.332, z +3.88
pre-z +0.52 ✓
-25.016 *** (-7.5% of base)
SE 6.856, z -3.65
pre-z +2.16 ✗

Stars: * p<0.10, ** p<0.05, *** p<0.01 (two-tailed, state-clustered). "% of base" expresses the ATT as a percentage of the all-state mean of that outcome over the analysis window. ✓ / ✗ on the third line indicates whether the pre-trend test (avg ATT for e ∈ [-5, -2]) does NOT / DOES reject zero. Outcomes are per 100,000 residents.

Covariate sensitivity (multiverse: Minimal / Headline / Expanded covariate sets) — broad pool, RA spec
OutcomeMinimalHeadlineExpanded
firearm suicide rate-0.202 *** (-2.5% of base)
SE 0.074, z -2.74
+0.722 *** (+9.0% of base)
SE 0.139, z +5.19
+0.343 ** (+4.3% of base)
SE 0.152, z +2.26
nonfirearm suicide rate+0.149 *** (+2.5% of base)
SE 0.057, z +2.63
-0.358 *** (-6.1% of base)
SE 0.110, z -3.26
-1.075 *** (-18.3% of base)
SE 0.127, z -8.47
total suicide rate-0.053 (-0.4% of base)
SE 0.091, z -0.58
+0.364 ** (+2.6% of base)
SE 0.149, z +2.45
-0.732 *** (-5.3% of base)
SE 0.174, z -4.22
firearm homicide rate+0.046 (+1.1% of base)
SE 0.103, z +0.45
-0.606 *** (-14.6% of base)
SE 0.114, z -5.33
-0.408 *** (-9.8% of base)
SE 0.130, z -3.14
homicide rate-0.782 *** (-13.7% of base)
SE 0.096, z -8.17
-0.934 *** (-16.3% of base)
SE 0.116, z -8.05
-0.667 *** (-11.7% of base)
SE 0.147, z -4.53
motor vehicle theft rate+22.303 *** (+6.7% of base)
SE 6.785, z +3.29
-22.040 *** (-6.6% of base)
SE 6.403, z -3.44
-21.263 ** (-6.4% of base)
SE 8.454, z -2.52

Each column uses a different literature-backed covariate set (see §3 methodology preamble for definitions). Stars: * p<0.10, ** p<0.05, *** p<0.01. A coefficient that flips sign or loses significance across tiers is sensitive to covariate choice — interpret with care, per Donohue-Aneja-Weber 2019.

Stacked DiD (Cengiz et al. 2019) — overall post-treatment

OutcomeUnweightedRegression-adjustedEntropy-balanced
firearm suicide rate-0.613 *** (-7.6% of base)
SE 0.199, z -3.08
-0.613 *** (-7.6% of base)
SE 0.199, z -3.08
nonfirearm suicide rate-0.058 (-1.0% of base)
SE 0.156, z -0.37
-0.058 (-1.0% of base)
SE 0.156, z -0.37
total suicide rate-0.670 ** (-4.8% of base)
SE 0.266, z -2.52
-0.670 ** (-4.8% of base)
SE 0.266, z -2.52
firearm homicide rate-0.734 ** (-17.7% of base)
SE 0.317, z -2.32
-0.734 ** (-17.7% of base)
SE 0.317, z -2.32
homicide rate-0.575 ** (-10.1% of base)
SE 0.247, z -2.33
-0.575 ** (-10.1% of base)
SE 0.247, z -2.33
motor vehicle theft rate+28.044 (+8.4% of base)
SE 22.824, z +1.23
+28.044 (+8.4% of base)
SE 22.824, z +1.23

Stars: * p<0.10, ** p<0.05, *** p<0.01 (two-tailed, state-clustered). "% of base" expresses the ATT as a percentage of the all-state mean of that outcome. Outcomes per 100,000 residents.

CS21 event study (broad / RA spec)

Callaway-Sant'Anna ATT by event time (RA) -- red flag Firearm suicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -1.2 -0.27 0.68 1.6 2.6 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 0 1 2 3 4 5 -2 -0.99 0.041 1.1 2.1 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 0 1 2 3 4 5 -1.7 -0.43 0.84 2.1 3.4 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -2.9 -2.1 -1.3 -0.5 0.29 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -2.3 -1.5 -0.74 0.027 0.8 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 0 1 2 3 4 5 -91 -48 -3.8 40 84 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Stacked-DiD event study (unweighted spec)

Callaway-Sant'Anna ATT by event time (UNWEIGHTED) -- red flag Firearm suicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.4 -0.75 -0.075 0.6 1.3 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 -1 0 1 2 3 4 5 -0.63 -0.31 0.0096 0.33 0.64 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.5 -0.68 0.12 0.93 1.7 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.6 -0.94 -0.23 0.48 1.2 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.3 -0.69 -0.068 0.55 1.2 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -58 -3.8 50 1e+02 1.6e+02 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Stacked-DiD event study (entropy-balanced spec)

Callaway-Sant'Anna ATT by event time (EB) -- red flag Firearm suicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.4 -0.75 -0.075 0.6 1.3 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 -1 0 1 2 3 4 5 -0.63 -0.31 0.0096 0.33 0.64 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.5 -0.68 0.12 0.93 1.7 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.6 -0.94 -0.23 0.48 1.2 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.3 -0.69 -0.068 0.55 1.2 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -58 -3.8 50 1e+02 1.6e+02 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Roth-Sant'Anna pre-trend bounds — firearm suicide, e = +1

EstimatorSpecATT(+1)95% CI (M=0)ATT(+1) trend-adj95% CI (M=1)M=1 verdict
cs21broad / or-0.121(-0.453, +0.211)+0.308(-0.159, +0.775)fails
cs21broad / ra+1.619(+0.873, +2.365)+1.828(-0.331, +3.988)fails
cs21strict / or-0.138(-0.491, +0.215)+0.332(-0.149, +0.813)fails
cs21strict / ra+1.955(+0.999, +2.910)+2.670(+0.529, +4.812)survives
stackddsingle / eb-0.220(-0.618, +0.178)+0.247(-0.272, +0.765)fails
stackddsingle / unweighted-0.220(-0.618, +0.178)+0.247(-0.272, +0.765)fails

Roth-Sant'Anna sensitivity bounds at event time +1. M = post-trend deviation as a multiple of the linear extrapolation of the observed pre-trend. M=1 = "post-trend looks like more of the same"; M=2 = "post-trend could be twice the pre-trend magnitude".

6. Universal background checks (UBC)

Treatment: universal (0 → 1 (state requires UBC at point of purchase for all firearms)).
Detailed write-up: CS21 methodology and stacked-DiD comparison.

Headline interpretation (Universal background checks (UBC), broad / RA)

Reading the broad-pool, regression-adjusted Callaway–Sant'Anna spec (the same spec the figure beneath the CS21 table reports), the statistically significant outcomes are:

"% of base" expresses the coefficient as a fraction of the all-state mean of the outcome over the analysis window — useful for an economic-magnitude read. A pre-trend rejection means the treated and control groups were already on diverging paths before the policy took effect, which weakens the causal claim. See §3 for an explanation of the spec grid (broad/strict, OR/RA) and the full 4-spec table below for results under the other specifications.

Treatment cohorts

Cohort yearn statesStates
20133CO,DE,NY
20141WA
20151OR
20171NV
20182NJ,VT
20191NM
20201VA
20211MD

Observation window and pre/post specification

Analysis window: 1999–2023 (state panel post-NICS; last year with v2 firearm-mortality data). Treated-cohort adoptions span 2013–2021.

Event window: [−5, +5] years around adoption (5 leads, 5 lags). This follows the modal modern DiD convention (Roth, Sant'Anna, Bilinski, Poe 2023, J Econometrics; the canonical Callaway–Sant'Anna 2021 framework defaults to symmetric leads/lags). The 5-year window is wide enough to detect dynamic treatment effects that build over time (Cheng-Hoekstra 2013 SYG; McClellan-Tekin 2017), but narrow enough that small-sample inference for the most recent cohorts remains feasible. Pre-trend test averages event-times [−5, −2] so the omitted year (−1) and the immediate post-period (+0, +1) do not contaminate the parallel-trends check (per Borusyak-Jaravel-Spiess 2024 and the Roth-SA bounds methodology).

Strict-pool window: control states must satisfy the policy's no-contamination rule for every year in [g−5, g+5] (the same window as the event study). This avoids "drifting" controls — states that are close to but not yet adopting the policy at g but adopt soon after, which would bias the comparison toward zero (Goodman-Bacon 2021, Sun-Abraham 2021).

Covariates used (literature-backed; see §3)

Three tiers per outcome family — Minimal / Headline / Expanded — shown in the covariate-sensitivity sub-table below.

Lethal violence (homicide, firearm homicide, total homicide) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_age_15_24, share_age_25_44, share_male, share_black_nh, share_hispanic, share_bachelors_plus, imprisonment_rate, sworn_officers_per_100k, alcohol_per_capita_ethanol_gallons

Suicide (firearm, total, non-firearm) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_male, share_age_15_24, share_age_25_44, share_bachelors_plus, share_black_nh, share_hispanic, alcohol_per_capita_ethanol_gallons, drug_overdose_per_100k, religion_adherents_pct_2020, ownership_rand

Property / placebo (MV theft) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_age_15_24, share_age_25_44, share_male, share_black_nh, share_hispanic, share_bachelors_plus, imprisonment_rate, sworn_officers_per_100k, alcohol_per_capita_ethanol_gallons

Covariate balance check (Table 1) — treated vs broad control pool at each cohort's g−1 baseline
CovariateTreated meanControl meanNormalized diff
ln_population15.21115.183+0.026
ln_pcpi_real_202411.07411.015+0.407
unemployment_rate5.8495.314+0.280
poverty_rate0.1320.138-0.179
share_age_15_240.1340.137-0.476
share_age_25_440.2620.255+0.508
share_male0.4920.494-0.325
share_black_nh0.1070.102+0.060
share_hispanic0.1750.103+0.678
share_bachelors_plus0.3400.294+0.878
imprisonment_rate364.883412.468-0.310
sworn_officers_per_100k230.990216.597+0.233
alcohol_per_capita_ethanol_gallons2.7412.423+0.586

Treated and control means pooled across cohorts at each cohort's g−1 anchor year. Normalized difference = (mean_T − mean_C) / sqrt((sd_T² + sd_C²)/2). Per Imbens & Rubin (2015), |normalized diff| > 0.25 (⚠) indicates covariate imbalance worth flagging — RA / EB reweighting is the standard remedy.

Callaway-Sant'Anna ATT(g, t) — overall post-treatment

OutcomeBroad / ORBroad / RAStrict / ORStrict / RA
firearm suicide rate-0.420 *** (-5.2% of base)
SE 0.068, z -6.14
pre-z +1.28 ✓
+0.309 *** (+3.9% of base)
SE 0.091, z +3.38
pre-z -0.26 ✓
-0.420 *** (-5.2% of base)
SE 0.068, z -6.14
pre-z +1.28 ✓
+0.309 *** (+3.9% of base)
SE 0.091, z +3.38
pre-z -0.26 ✓
nonfirearm suicide rate-0.644 *** (-11.0% of base)
SE 0.100, z -6.45
pre-z -2.22 ✗
-0.735 *** (-12.5% of base)
SE 0.076, z -9.65
pre-z -1.85 ✓
-0.644 *** (-11.0% of base)
SE 0.100, z -6.45
pre-z -2.22 ✗
-0.735 *** (-12.5% of base)
SE 0.076, z -9.65
pre-z -1.85 ✓
total suicide rate-1.064 *** (-7.7% of base)
SE 0.109, z -9.80
pre-z -0.62 ✓
-0.426 *** (-3.1% of base)
SE 0.133, z -3.21
pre-z -1.50 ✓
-1.064 *** (-7.7% of base)
SE 0.109, z -9.80
pre-z -0.62 ✓
-0.426 *** (-3.1% of base)
SE 0.133, z -3.21
pre-z -1.50 ✓
firearm homicide rate-0.594 *** (-14.3% of base)
SE 0.068, z -8.70
pre-z +0.44 ✓
-0.713 *** (-17.2% of base)
SE 0.090, z -7.94
pre-z -2.55 ✗
-0.594 *** (-14.3% of base)
SE 0.068, z -8.70
pre-z +0.44 ✓
-0.713 *** (-17.2% of base)
SE 0.090, z -7.94
pre-z -2.55 ✗
homicide rate-0.389 *** (-6.8% of base)
SE 0.080, z -4.85
pre-z -0.48 ✓
-0.470 *** (-8.2% of base)
SE 0.078, z -6.01
pre-z -5.46 ✗
-0.389 *** (-6.8% of base)
SE 0.080, z -4.85
pre-z -0.48 ✓
-0.470 *** (-8.2% of base)
SE 0.078, z -6.01
pre-z -5.46 ✗
motor vehicle theft rate+38.637 *** (+11.6% of base)
SE 8.730, z +4.43
pre-z +0.35 ✓
+24.644 *** (+7.4% of base)
SE 3.655, z +6.74
pre-z -4.88 ✗
+38.637 *** (+11.6% of base)
SE 8.730, z +4.43
pre-z +0.35 ✓
+24.644 *** (+7.4% of base)
SE 3.655, z +6.74
pre-z -4.88 ✗

Stars: * p<0.10, ** p<0.05, *** p<0.01 (two-tailed, state-clustered). "% of base" expresses the ATT as a percentage of the all-state mean of that outcome over the analysis window. ✓ / ✗ on the third line indicates whether the pre-trend test (avg ATT for e ∈ [-5, -2]) does NOT / DOES reject zero. Outcomes are per 100,000 residents.

Covariate sensitivity (multiverse: Minimal / Headline / Expanded covariate sets) — broad pool, RA spec
OutcomeMinimalHeadlineExpanded
firearm suicide rate-0.365 *** (-4.5% of base)
SE 0.062, z -5.84
+0.309 *** (+3.9% of base)
SE 0.091, z +3.38
+0.276 ** (+3.4% of base)
SE 0.108, z +2.55
nonfirearm suicide rate-0.358 *** (-6.1% of base)
SE 0.084, z -4.25
-0.735 *** (-12.5% of base)
SE 0.076, z -9.65
-1.071 *** (-18.3% of base)
SE 0.087, z -12.26
total suicide rate-0.723 *** (-5.2% of base)
SE 0.105, z -6.86
-0.426 *** (-3.1% of base)
SE 0.133, z -3.21
-0.794 *** (-5.7% of base)
SE 0.151, z -5.25
firearm homicide rate-0.267 *** (-6.4% of base)
SE 0.065, z -4.09
-0.713 *** (-17.2% of base)
SE 0.090, z -7.94
-1.426 *** (-34.4% of base)
SE 0.102, z -13.98
homicide rate-0.739 *** (-12.9% of base)
SE 0.065, z -11.31
-0.470 *** (-8.2% of base)
SE 0.078, z -6.01
-0.677 *** (-11.8% of base)
SE 0.096, z -7.04
motor vehicle theft rate+38.338 *** (+11.5% of base)
SE 4.901, z +7.82
+24.644 *** (+7.4% of base)
SE 3.655, z +6.74
-8.844 (-2.7% of base)
SE 5.856, z -1.51

Each column uses a different literature-backed covariate set (see §3 methodology preamble for definitions). Stars: * p<0.10, ** p<0.05, *** p<0.01. A coefficient that flips sign or loses significance across tiers is sensitive to covariate choice — interpret with care, per Donohue-Aneja-Weber 2019.

Stacked DiD (Cengiz et al. 2019) — overall post-treatment

OutcomeUnweightedRegression-adjustedEntropy-balanced
firearm suicide rate-0.353 * (-4.4% of base)
SE 0.192, z -1.84
-0.353 * (-4.4% of base)
SE 0.192, z -1.84
nonfirearm suicide rate-0.373 * (-6.4% of base)
SE 0.209, z -1.79
-0.373 * (-6.4% of base)
SE 0.209, z -1.79
total suicide rate-0.726 *** (-5.2% of base)
SE 0.261, z -2.78
-0.726 *** (-5.2% of base)
SE 0.261, z -2.78
firearm homicide rate-0.389 (-9.4% of base)
SE 0.378, z -1.03
-0.389 (-9.4% of base)
SE 0.378, z -1.03
homicide rate-0.258 (-4.5% of base)
SE 0.384, z -0.67
-0.258 (-4.5% of base)
SE 0.384, z -0.67
motor vehicle theft rate+12.658 (+3.8% of base)
SE 15.611, z +0.81
+12.658 (+3.8% of base)
SE 15.611, z +0.81

Stars: * p<0.10, ** p<0.05, *** p<0.01 (two-tailed, state-clustered). "% of base" expresses the ATT as a percentage of the all-state mean of that outcome. Outcomes per 100,000 residents.

CS21 event study (broad / RA spec)

Callaway-Sant'Anna ATT by event time (RA) -- ubc Firearm suicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -0.75 -0.2 0.35 0.89 1.4 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 0 1 2 3 4 5 -2.3 -1.5 -0.7 0.078 0.85 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 0 1 2 3 4 5 -2.6 -1.7 -0.74 0.18 1.1 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -1.3 -0.92 -0.49 -0.056 0.37 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -1.9 -1.3 -0.65 -0.036 0.58 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 0 1 2 3 4 5 -44 -14 16 46 76 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Stacked-DiD event study (unweighted spec)

Callaway-Sant'Anna ATT by event time (UNWEIGHTED) -- ubc Firearm suicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.1 -0.65 -0.2 0.25 0.71 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1 -0.49 0.013 0.52 1 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.7 -0.91 -0.11 0.69 1.5 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.2 -0.66 -0.11 0.44 0.99 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.3 -0.7 -0.14 0.41 0.96 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -57 -20 18 55 92 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Stacked-DiD event study (entropy-balanced spec)

Callaway-Sant'Anna ATT by event time (EB) -- ubc Firearm suicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.1 -0.65 -0.2 0.25 0.71 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1 -0.49 0.013 0.52 1 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.7 -0.91 -0.11 0.69 1.5 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.2 -0.66 -0.11 0.44 0.99 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.3 -0.7 -0.14 0.41 0.96 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -57 -20 18 55 92 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Roth-Sant'Anna pre-trend bounds — firearm suicide, e = +1

EstimatorSpecATT(+1)95% CI (M=0)ATT(+1) trend-adj95% CI (M=1)M=1 verdict
cs21broad / or-0.097(-0.356, +0.162)+0.098(-0.297, +0.492)fails
cs21broad / ra+0.134(-0.331, +0.599)+0.402(-0.939, +1.742)fails
stackddsingle / eb+0.013(-0.365, +0.390)+0.190(-0.281, +0.662)fails
stackddsingle / unweighted+0.013(-0.365, +0.390)+0.190(-0.281, +0.662)fails

Roth-Sant'Anna sensitivity bounds at event time +1. M = post-trend deviation as a multiple of the linear extrapolation of the observed pre-trend. M=1 = "post-trend looks like more of the same"; M=2 = "post-trend could be twice the pre-trend magnitude".

7. Stand-your-ground (SYG)

Treatment: nosyg (1 → 0 (state adopts SYG / removes duty-to-retreat outside the home)).
Detailed write-up: CS21 methodology and stacked-DiD comparison.

Headline interpretation (Stand-your-ground (SYG), broad / RA)

Reading the broad-pool, regression-adjusted Callaway–Sant'Anna spec (the same spec the figure beneath the CS21 table reports), the statistically significant outcomes are:

"% of base" expresses the coefficient as a fraction of the all-state mean of the outcome over the analysis window — useful for an economic-magnitude read. A pre-trend rejection means the treated and control groups were already on diverging paths before the policy took effect, which weakens the causal claim. See §3 for an explanation of the spec grid (broad/strict, OR/RA) and the full 4-spec table below for results under the other specifications.

Treatment cohorts

Cohort yearn statesStates
20051FL
200611AL,GA,IN,KS,KY,LA,MI,MS,OK,SC,SD
20072TN,TX
20081WV
20091MT
20101AZ
20114NC,NH,NV,PA
20131AK
20161MO
20171IA
20182ID,WY
20191OH
20212AR,ND

Observation window and pre/post specification

Analysis window: 1999–2023 (state panel post-NICS; last year with v2 firearm-mortality data). Treated-cohort adoptions span 2005–2021.

Event window: [−5, +5] years around adoption (5 leads, 5 lags). This follows the modal modern DiD convention (Roth, Sant'Anna, Bilinski, Poe 2023, J Econometrics; the canonical Callaway–Sant'Anna 2021 framework defaults to symmetric leads/lags). The 5-year window is wide enough to detect dynamic treatment effects that build over time (Cheng-Hoekstra 2013 SYG; McClellan-Tekin 2017), but narrow enough that small-sample inference for the most recent cohorts remains feasible. Pre-trend test averages event-times [−5, −2] so the omitted year (−1) and the immediate post-period (+0, +1) do not contaminate the parallel-trends check (per Borusyak-Jaravel-Spiess 2024 and the Roth-SA bounds methodology).

Strict-pool window: control states must satisfy the policy's no-contamination rule for every year in [g−5, g+5] (the same window as the event study). This avoids "drifting" controls — states that are close to but not yet adopting the policy at g but adopt soon after, which would bias the comparison toward zero (Goodman-Bacon 2021, Sun-Abraham 2021).

Covariates used (literature-backed; see §3)

Three tiers per outcome family — Minimal / Headline / Expanded — shown in the covariate-sensitivity sub-table below.

Lethal violence (homicide, firearm homicide, total homicide) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_age_15_24, share_age_25_44, share_male, share_black_nh, share_hispanic, share_bachelors_plus, imprisonment_rate, sworn_officers_per_100k, alcohol_per_capita_ethanol_gallons

Suicide (firearm, total, non-firearm) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_male, share_age_15_24, share_age_25_44, share_bachelors_plus, share_black_nh, share_hispanic, alcohol_per_capita_ethanol_gallons, drug_overdose_per_100k, religion_adherents_pct_2020, ownership_rand

Property / placebo (MV theft) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_age_15_24, share_age_25_44, share_male, share_black_nh, share_hispanic, share_bachelors_plus, imprisonment_rate, sworn_officers_per_100k, alcohol_per_capita_ethanol_gallons

Covariate balance check (Table 1) — treated vs broad control pool at each cohort's g−1 baseline
CovariateTreated meanControl meanNormalized diff
ln_population15.11215.201-0.088
ln_pcpi_real_202410.90311.069-1.147
unemployment_rate5.9695.510+0.210
poverty_rate0.1440.116+1.058
share_age_15_240.1420.139+0.329
share_age_25_440.2640.266-0.145
share_male0.4950.492+0.297
share_black_nh0.1170.081+0.396
share_hispanic0.0830.137-0.563
share_bachelors_plus0.2470.323-1.837
imprisonment_rate488.622340.042+1.012
sworn_officers_per_100k231.329232.716-0.023
alcohol_per_capita_ethanol_gallons2.3912.448-0.115

Treated and control means pooled across cohorts at each cohort's g−1 anchor year. Normalized difference = (mean_T − mean_C) / sqrt((sd_T² + sd_C²)/2). Per Imbens & Rubin (2015), |normalized diff| > 0.25 (⚠) indicates covariate imbalance worth flagging — RA / EB reweighting is the standard remedy.

Callaway-Sant'Anna ATT(g, t) — overall post-treatment

OutcomeBroad / ORBroad / RAStrict / ORStrict / RA
firearm suicide rate+0.512 *** (+6.4% of base)
SE 0.052, z +9.79
pre-z -4.28 ✗
+0.397 *** (+5.0% of base)
SE 0.058, z +6.84
pre-z -0.87 ✓
+0.554 *** (+6.9% of base)
SE 0.053, z +10.50
pre-z -4.53 ✗
+0.384 *** (+4.8% of base)
SE 0.060, z +6.36
pre-z -1.62 ✓
nonfirearm suicide rate-0.341 *** (-5.8% of base)
SE 0.044, z -7.69
pre-z -3.63 ✗
-0.488 *** (-8.3% of base)
SE 0.062, z -7.87
pre-z -4.49 ✗
-0.303 *** (-5.2% of base)
SE 0.044, z -6.85
pre-z -3.42 ✗
-0.334 *** (-5.7% of base)
SE 0.062, z -5.39
pre-z -2.64 ✗
total suicide rate+0.171 *** (+1.2% of base)
SE 0.065, z +2.62
pre-z -5.96 ✗
-0.090 (-0.7% of base)
SE 0.073, z -1.23
pre-z -3.50 ✗
+0.251 *** (+1.8% of base)
SE 0.065, z +3.86
pre-z -6.02 ✗
+0.050 (+0.4% of base)
SE 0.073, z +0.68
pre-z -2.97 ✗
firearm homicide rate+0.839 *** (+20.2% of base)
SE 0.064, z +13.07
pre-z +2.30 ✗
-0.435 *** (-10.5% of base)
SE 0.087, z -4.97
pre-z -3.82 ✗
+0.833 *** (+20.1% of base)
SE 0.065, z +12.90
pre-z +2.39 ✗
-0.775 *** (-18.7% of base)
SE 0.112, z -6.89
pre-z -6.46 ✗
homicide rate+0.507 *** (+8.9% of base)
SE 0.054, z +9.44
pre-z +1.59 ✓
-0.718 *** (-12.6% of base)
SE 0.074, z -9.76
pre-z -3.03 ✗
+0.507 *** (+8.9% of base)
SE 0.055, z +9.30
pre-z +1.63 ✓
-0.800 *** (-14.0% of base)
SE 0.088, z -9.07
pre-z -7.00 ✗
motor vehicle theft rate+20.269 *** (+6.1% of base)
SE 4.311, z +4.70
pre-z +2.82 ✗
-69.901 *** (-21.0% of base)
SE 6.298, z -11.10
pre-z +1.47 ✓
+21.569 *** (+6.5% of base)
SE 4.371, z +4.93
pre-z +2.64 ✗
-60.481 *** (-18.1% of base)
SE 8.893, z -6.80
pre-z -0.92 ✓

Stars: * p<0.10, ** p<0.05, *** p<0.01 (two-tailed, state-clustered). "% of base" expresses the ATT as a percentage of the all-state mean of that outcome over the analysis window. ✓ / ✗ on the third line indicates whether the pre-trend test (avg ATT for e ∈ [-5, -2]) does NOT / DOES reject zero. Outcomes are per 100,000 residents.

Covariate sensitivity (multiverse: Minimal / Headline / Expanded covariate sets) — broad pool, RA spec
OutcomeMinimalHeadlineExpanded
firearm suicide rate+0.002 (+0.0% of base)
SE 0.036, z +0.07
+0.397 *** (+5.0% of base)
SE 0.058, z +6.84
+0.202 *** (+2.5% of base)
SE 0.063, z +3.22
nonfirearm suicide rate-0.388 *** (-6.6% of base)
SE 0.037, z -10.49
-0.488 *** (-8.3% of base)
SE 0.062, z -7.87
-0.649 *** (-11.1% of base)
SE 0.055, z -11.79
total suicide rate-0.386 *** (-2.8% of base)
SE 0.044, z -8.73
-0.090 (-0.7% of base)
SE 0.073, z -1.23
-0.447 *** (-3.2% of base)
SE 0.074, z -6.06
firearm homicide rate-0.041 (-1.0% of base)
SE 0.064, z -0.65
-0.435 *** (-10.5% of base)
SE 0.087, z -4.97
+0.818 *** (+19.7% of base)
SE 0.072, z +11.37
homicide rate-0.289 *** (-5.1% of base)
SE 0.060, z -4.86
-0.718 *** (-12.6% of base)
SE 0.074, z -9.76
+0.485 *** (+8.5% of base)
SE 0.059, z +8.26
motor vehicle theft rate-28.300 *** (-8.5% of base)
SE 6.163, z -4.59
-69.901 *** (-21.0% of base)
SE 6.298, z -11.10
-58.389 *** (-17.5% of base)
SE 10.198, z -5.73

Each column uses a different literature-backed covariate set (see §3 methodology preamble for definitions). Stars: * p<0.10, ** p<0.05, *** p<0.01. A coefficient that flips sign or loses significance across tiers is sensitive to covariate choice — interpret with care, per Donohue-Aneja-Weber 2019.

Stacked DiD (Cengiz et al. 2019) — overall post-treatment

OutcomeUnweightedRegression-adjustedEntropy-balanced
firearm suicide rate+0.531 *** (+6.6% of base)
SE 0.196, z +2.71
+0.531 *** (+6.6% of base)
SE 0.196, z +2.71
nonfirearm suicide rate-0.079 (-1.4% of base)
SE 0.118, z -0.68
-0.079 (-1.4% of base)
SE 0.118, z -0.68
total suicide rate+0.451 * (+3.3% of base)
SE 0.240, z +1.88
+0.451 * (+3.3% of base)
SE 0.240, z +1.88
firearm homicide rate+0.183 (+4.4% of base)
SE 0.174, z +1.05
+0.183 (+4.4% of base)
SE 0.174, z +1.05
homicide rate+0.108 (+1.9% of base)
SE 0.217, z +0.50
+0.108 (+1.9% of base)
SE 0.217, z +0.50
motor vehicle theft rate+0.910 (+0.3% of base)
SE 21.849, z +0.04
+0.910 (+0.3% of base)
SE 21.849, z +0.04

Stars: * p<0.10, ** p<0.05, *** p<0.01 (two-tailed, state-clustered). "% of base" expresses the ATT as a percentage of the all-state mean of that outcome. Outcomes per 100,000 residents.

CS21 event study (broad / RA spec)

Callaway-Sant'Anna ATT by event time (RA) -- stand your ground Firearm suicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -1 -0.39 0.24 0.86 1.5 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 0 1 2 3 4 5 -1.3 -0.92 -0.51 -0.099 0.31 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 0 1 2 3 4 5 -1.5 -0.9 -0.32 0.26 0.84 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -1.4 -0.95 -0.52 -0.094 0.33 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -1.5 -0.98 -0.49 0.0021 0.49 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 0 1 2 3 4 5 -1.3e+02 -80 -34 12 57 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Stacked-DiD event study (unweighted spec)

Callaway-Sant'Anna ATT by event time (UNWEIGHTED) -- stand your ground Firearm suicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -0.94 -0.48 -0.022 0.43 0.89 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 -1 0 1 2 3 4 5 -0.42 -0.21 -0.0064 0.2 0.41 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1 -0.49 0.027 0.55 1.1 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -0.42 -0.18 0.063 0.3 0.54 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -0.68 -0.36 -0.038 0.28 0.6 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -42 -15 11 37 63 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Stacked-DiD event study (entropy-balanced spec)

Callaway-Sant'Anna ATT by event time (EB) -- stand your ground Firearm suicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -0.94 -0.48 -0.022 0.43 0.89 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 -1 0 1 2 3 4 5 -0.42 -0.21 -0.0064 0.2 0.41 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1 -0.49 0.027 0.55 1.1 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -0.42 -0.18 0.063 0.3 0.54 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -0.68 -0.36 -0.038 0.28 0.6 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -42 -15 11 37 63 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Roth-Sant'Anna pre-trend bounds — firearm suicide, e = +1

EstimatorSpecATT(+1)95% CI (M=0)ATT(+1) trend-adj95% CI (M=1)M=1 verdict
cs21broad / or+0.053(-0.359, +0.464)-0.023(-0.498, +0.453)fails
cs21broad / ra-0.085(-0.425, +0.254)-0.487(-1.126, +0.151)fails
cs21strict / or+0.050(-0.357, +0.456)-0.021(-0.494, +0.452)fails
cs21strict / ra-0.233(-0.591, +0.125)-0.595(-1.196, +0.007)fails
stackddsingle / eb+0.068(-0.264, +0.399)+0.016(-0.392, +0.423)fails
stackddsingle / unweighted+0.068(-0.264, +0.399)+0.016(-0.392, +0.423)fails

Roth-Sant'Anna sensitivity bounds at event time +1. M = post-trend deviation as a multiple of the linear extrapolation of the observed pre-trend. M=1 = "post-trend looks like more of the same"; M=2 = "post-trend could be twice the pre-trend magnitude".

8. Large-capacity magazine ban

Treatment: magazine (0 → 1 (state prohibits magazines above 10 or 15 rounds)).
Detailed write-up: CS21 methodology and stacked-DiD comparison.

Headline interpretation (Large-capacity magazine ban, broad / RA)

Reading the broad-pool, regression-adjusted Callaway–Sant'Anna spec (the same spec the figure beneath the CS21 table reports), the statistically significant outcomes are:

"% of base" expresses the coefficient as a fraction of the all-state mean of the outcome over the analysis window — useful for an economic-magnitude read. A pre-trend rejection means the treated and control groups were already on diverging paths before the policy took effect, which weakens the causal claim. See §3 for an explanation of the spec grid (broad/strict, OR/RA) and the full 4-spec table below for results under the other specifications.

Treatment cohorts

Cohort yearn statesStates
20132CO,CT
20181VT
20223DE,RI,WA
20231IL

Observation window and pre/post specification

Analysis window: 1999–2023 (state panel post-NICS; last year with v2 firearm-mortality data). Treated-cohort adoptions span 2013–2023.

Event window: [−5, +5] years around adoption (5 leads, 5 lags). This follows the modal modern DiD convention (Roth, Sant'Anna, Bilinski, Poe 2023, J Econometrics; the canonical Callaway–Sant'Anna 2021 framework defaults to symmetric leads/lags). The 5-year window is wide enough to detect dynamic treatment effects that build over time (Cheng-Hoekstra 2013 SYG; McClellan-Tekin 2017), but narrow enough that small-sample inference for the most recent cohorts remains feasible. Pre-trend test averages event-times [−5, −2] so the omitted year (−1) and the immediate post-period (+0, +1) do not contaminate the parallel-trends check (per Borusyak-Jaravel-Spiess 2024 and the Roth-SA bounds methodology).

Strict-pool window: control states must satisfy the policy's no-contamination rule for every year in [g−5, g+5] (the same window as the event study). This avoids "drifting" controls — states that are close to but not yet adopting the policy at g but adopt soon after, which would bias the comparison toward zero (Goodman-Bacon 2021, Sun-Abraham 2021).

Covariates used (literature-backed; see §3)

Three tiers per outcome family — Minimal / Headline / Expanded — shown in the covariate-sensitivity sub-table below.

Lethal violence (homicide, firearm homicide, total homicide) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_age_15_24, share_age_25_44, share_male, share_black_nh, share_hispanic, share_bachelors_plus, imprisonment_rate, sworn_officers_per_100k, alcohol_per_capita_ethanol_gallons

Suicide (firearm, total, non-firearm) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_male, share_age_15_24, share_age_25_44, share_bachelors_plus, share_black_nh, share_hispanic, alcohol_per_capita_ethanol_gallons, drug_overdose_per_100k, religion_adherents_pct_2020, ownership_rand

Property / placebo (MV theft) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_age_15_24, share_age_25_44, share_male, share_black_nh, share_hispanic, share_bachelors_plus, imprisonment_rate, sworn_officers_per_100k, alcohol_per_capita_ethanol_gallons

Covariate balance check (Table 1) — treated vs broad control pool at each cohort's g−1 baseline
CovariateTreated meanControl meanNormalized diff
ln_population14.83515.171-0.323
ln_pcpi_real_202411.19611.053+1.018
unemployment_rate5.7314.750+0.523
poverty_rate0.1150.135-0.850
share_age_15_240.1310.135-0.476
share_age_25_440.2620.259+0.205
share_male0.4930.496-0.317
share_black_nh0.0870.107-0.227
share_hispanic0.1400.112+0.344
share_bachelors_plus0.3740.310+1.622
imprisonment_rate317.564385.218-0.476
sworn_officers_per_100k202.523213.668-0.239
alcohol_per_capita_ethanol_gallons2.7432.440+0.650

Treated and control means pooled across cohorts at each cohort's g−1 anchor year. Normalized difference = (mean_T − mean_C) / sqrt((sd_T² + sd_C²)/2). Per Imbens & Rubin (2015), |normalized diff| > 0.25 (⚠) indicates covariate imbalance worth flagging — RA / EB reweighting is the standard remedy.

Callaway-Sant'Anna ATT(g, t) — overall post-treatment

OutcomeBroad / ORBroad / RAStrict / ORStrict / RA
firearm suicide rate-0.323 *** (-4.0% of base)
SE 0.095, z -3.41
pre-z +0.23 ✓
-0.169 * (-2.1% of base)
SE 0.101, z -1.68
pre-z -1.35 ✓
-0.385 *** (-4.8% of base)
SE 0.094, z -4.09
pre-z +0.51 ✓
+0.544 *** (+6.8% of base)
SE 0.204, z +2.67
pre-z +1.02 ✓
nonfirearm suicide rate+0.189 ** (+3.2% of base)
SE 0.080, z +2.35
pre-z +0.40 ✓
+0.494 *** (+8.4% of base)
SE 0.111, z +4.44
pre-z +2.14 ✗
+0.182 ** (+3.1% of base)
SE 0.081, z +2.24
pre-z +0.71 ✓
+1.123 *** (+19.2% of base)
SE 0.198, z +5.67
pre-z +1.85 ✓
total suicide rate-0.134 (-1.0% of base)
SE 0.113, z -1.19
pre-z +0.35 ✓
+0.325 * (+2.3% of base)
SE 0.175, z +1.85
pre-z -0.26 ✓
-0.204 * (-1.5% of base)
SE 0.112, z -1.81
pre-z +0.71 ✓
+1.666 *** (+12.0% of base)
SE 0.320, z +5.20
pre-z +1.66 ✓
firearm homicide rate-0.999 *** (-24.1% of base)
SE 0.201, z -4.97
pre-z +0.17 ✓
-1.073 (-25.9% of base)
SE 0.000, z +nan
pre-z +nan ✗
-1.037 *** (-25.0% of base)
SE 0.201, z -5.15
pre-z +0.55 ✓
-1.414 (-34.1% of base)
SE 0.000, z +nan
pre-z +nan ✗
homicide rate-0.726 *** (-12.7% of base)
SE 0.207, z -3.50
pre-z -1.99 ✗
-1.829 (-32.0% of base)
SE 0.000, z +nan
pre-z +nan ✗
-0.763 *** (-13.3% of base)
SE 0.206, z -3.70
pre-z -1.85 ✓
-2.881 (-50.4% of base)
SE 0.000, z +nan
pre-z +nan ✗
motor vehicle theft rate+72.281 *** (+21.7% of base)
SE 18.448, z +3.92
pre-z -4.21 ✗
+48.735 (+14.6% of base)
SE 0.000, z +nan
pre-z +nan ✗
+70.477 *** (+21.1% of base)
SE 18.325, z +3.85
pre-z -4.02 ✗
+33.327 (+10.0% of base)
SE 0.000, z +nan
pre-z +nan ✗

Stars: * p<0.10, ** p<0.05, *** p<0.01 (two-tailed, state-clustered). "% of base" expresses the ATT as a percentage of the all-state mean of that outcome over the analysis window. ✓ / ✗ on the third line indicates whether the pre-trend test (avg ATT for e ∈ [-5, -2]) does NOT / DOES reject zero. Outcomes are per 100,000 residents.

Covariate sensitivity (multiverse: Minimal / Headline / Expanded covariate sets) — broad pool, RA spec
OutcomeMinimalHeadlineExpanded
firearm suicide rate+0.132 ** (+1.7% of base)
SE 0.064, z +2.08
-0.169 * (-2.1% of base)
SE 0.101, z -1.68
-0.233 ** (-2.9% of base)
SE 0.105, z -2.21
nonfirearm suicide rate+0.557 *** (+9.5% of base)
SE 0.071, z +7.81
+0.494 *** (+8.4% of base)
SE 0.111, z +4.44
+0.328 *** (+5.6% of base)
SE 0.103, z +3.19
total suicide rate+0.689 *** (+5.0% of base)
SE 0.096, z +7.21
+0.325 * (+2.3% of base)
SE 0.175, z +1.85
+0.095 (+0.7% of base)
SE 0.168, z +0.57
firearm homicide rate-0.678 *** (-16.3% of base)
SE 0.092, z -7.39
-1.073 (-25.9% of base)
SE 0.000, z +nan
-0.986 (-23.8% of base)
SE 0.000, z +nan
homicide rate-0.609 *** (-10.7% of base)
SE 0.105, z -5.81
-1.829 (-32.0% of base)
SE 0.000, z +nan
-1.542 (-27.0% of base)
SE 0.000, z +nan
motor vehicle theft rate+73.380 *** (+22.0% of base)
SE 7.398, z +9.92
+48.735 (+14.6% of base)
SE 0.000, z +nan
+54.675 (+16.4% of base)
SE 0.000, z +nan

Each column uses a different literature-backed covariate set (see §3 methodology preamble for definitions). Stars: * p<0.10, ** p<0.05, *** p<0.01. A coefficient that flips sign or loses significance across tiers is sensitive to covariate choice — interpret with care, per Donohue-Aneja-Weber 2019.

Stacked DiD (Cengiz et al. 2019) — overall post-treatment

OutcomeUnweightedRegression-adjustedEntropy-balanced
firearm suicide rate-0.195 (-2.4% of base)
SE 0.260, z -0.75
-0.195 (-2.4% of base)
SE 0.260, z -0.75
nonfirearm suicide rate+0.152 (+2.6% of base)
SE 0.115, z +1.31
+0.152 (+2.6% of base)
SE 0.115, z +1.31
total suicide rate-0.044 (-0.3% of base)
SE 0.284, z -0.15
-0.044 (-0.3% of base)
SE 0.284, z -0.15
firearm homicide rate-0.839 ** (-20.2% of base)
SE 0.340, z -2.47
-0.839 ** (-20.2% of base)
SE 0.340, z -2.47
homicide rate-0.766 ** (-13.4% of base)
SE 0.330, z -2.32
-0.766 ** (-13.4% of base)
SE 0.330, z -2.32
motor vehicle theft rate+48.272 (+14.5% of base)
SE 30.214, z +1.60
+48.272 (+14.5% of base)
SE 30.214, z +1.60

Stars: * p<0.10, ** p<0.05, *** p<0.01 (two-tailed, state-clustered). "% of base" expresses the ATT as a percentage of the all-state mean of that outcome. Outcomes per 100,000 residents.

CS21 event study (broad / RA spec)

Callaway-Sant'Anna ATT by event time (RA) -- magazine ban Firearm suicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -2 -1.1 -0.19 0.7 1.6 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 0 1 2 3 4 5 -0.77 -0.18 0.41 1 1.6 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 0 1 2 3 4 5 -2.3 -1 0.25 1.5 2.8 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -1.7 -1.2 -0.61 -0.056 0.5 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -3.1 -2.3 -1.5 -0.77 0 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 0 1 2 3 4 5 -14 31 76 1.2e+02 1.7e+02 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Stacked-DiD event study (unweighted spec)

Callaway-Sant'Anna ATT by event time (UNWEIGHTED) -- magazine ban Firearm suicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.3 -0.78 -0.24 0.29 0.82 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 -1 0 1 2 3 4 5 -0.91 -0.19 0.53 1.2 2 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.3 -0.44 0.4 1.2 2.1 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.8 -1.1 -0.34 0.39 1.1 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -2.1 -1.4 -0.62 0.12 0.85 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -64 -22 21 63 1.1e+02 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Stacked-DiD event study (entropy-balanced spec)

Callaway-Sant'Anna ATT by event time (EB) -- magazine ban Firearm suicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.3 -0.78 -0.24 0.29 0.82 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 -1 0 1 2 3 4 5 -0.91 -0.19 0.53 1.2 2 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.3 -0.44 0.4 1.2 2.1 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.8 -1.1 -0.34 0.39 1.1 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -2.1 -1.4 -0.62 0.12 0.85 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -64 -22 21 63 1.1e+02 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Roth-Sant'Anna pre-trend bounds — firearm suicide, e = +1

EstimatorSpecATT(+1)95% CI (M=0)ATT(+1) trend-adj95% CI (M=1)M=1 verdict
cs21broad / or+0.164(-0.189, +0.517)+0.119(-0.264, +0.501)fails
cs21broad / ra+0.287(-0.745, +1.319)-0.033(-1.973, +1.907)fails
cs21strict / or+0.163(-0.208, +0.533)+0.145(-0.251, +0.541)fails
cs21strict / ra+0.445(-1.106, +1.996)-0.025(-2.140, +2.090)fails
stackddsingle / eb+0.167(-0.261, +0.595)+0.165(-0.306, +0.637)fails
stackddsingle / unweighted+0.167(-0.261, +0.595)+0.165(-0.306, +0.637)fails

Roth-Sant'Anna sensitivity bounds at event time +1. M = post-trend deviation as a multiple of the linear extrapolation of the observed pre-trend. M=1 = "post-trend looks like more of the same"; M=2 = "post-trend could be twice the pre-trend magnitude".

Synthetic control method (Abadie-Diamond-Hainmueller 2010)

For small-cohort policies, the literature (Webster 2014, Crifasi 2015, McCourt 2020, Kivisto 2018, Klarevas 2019) uses SCM rather than cohort-pooled DiD because per-event-time DiD estimates are noisy when only 1-4 states adopt. SCM constructs an explicit weighted counterfactual from the donor pool that minimizes pre-period MSPE, then attributes the post-period gap to the treatment. Inference is via permutation: refit SCM on every donor as if treated, compare the actual post-period effect to the placebo distribution.

CO_2013 — SCM per-state results

OutcomePost ATT (per 100k)Placebo p-value
firearm suicide rate+0.130 (+1.6% of base)p = 0.842
placebo n = 38, sd = 0.915, pre RMSE = 0.342
firearm homicide rate+0.137 (+3.3% of base)p = 0.838
placebo n = 37, sd = 0.886, pre RMSE = 0.142
homicide rate+0.400 (+7.0% of base)p = 0.553
placebo n = 38, sd = 1.162, pre RMSE = 0.255
motor vehicle theft rate+159.768 * (+47.9% of base)p = 0.053
placebo n = 38, sd = 83.445, pre RMSE = 24.5

Post ATT = mean(treated − synthetic) over the post-treatment years. Placebo p-value: two-sided rank from permutation across all donor states (refitting SCM on each donor as if treated). Stars at 10% / 5% / 1% from the placebo distribution. "% of base" expresses the ATT as a fraction of the all-state mean.

Trajectory: motor vehicle theft rate

Colorado (2013): Motor vehicle theft rate (per 100k) [placebo] adoption (2013) 2001 2003 2005 2007 2009 2011 2013 2015 2017 2019 2021 2023 0.82 2.9e+02 5.9e+02 8.8e+02 1.2e+03 Colorado (treated) Synthetic counterfactual Donor states (gray)

CT_2013 — SCM per-state results

OutcomePost ATT (per 100k)Placebo p-value
firearm suicide rate-0.309 (-3.9% of base)p = 0.658
placebo n = 38, sd = 0.915, pre RMSE = 0.378
firearm homicide rate-1.190 (-28.7% of base)p = 0.189
placebo n = 37, sd = 0.886, pre RMSE = 0.271
homicide rate-0.581 (-10.2% of base)p = 0.342
placebo n = 38, sd = 1.162, pre RMSE = 0.24
motor vehicle theft rate-0.734 (-0.2% of base)p = 1.000
placebo n = 38, sd = 83.445, pre RMSE = 1.69

Post ATT = mean(treated − synthetic) over the post-treatment years. Placebo p-value: two-sided rank from permutation across all donor states (refitting SCM on each donor as if treated). Stars at 10% / 5% / 1% from the placebo distribution. "% of base" expresses the ATT as a fraction of the all-state mean.

Trajectory: firearm homicide rate

Connecticut (2013): Firearm homicide rate (per 100k) adoption (2013) 2001 2003 2005 2007 2009 2011 2013 2015 2017 2019 2021 2023 -0.99 4.5 9.9 15 21 Connecticut (treated) Synthetic counterfactual Donor states (gray)

VT_2018 — SCM per-state results

OutcomePost ATT (per 100k)Placebo p-value
firearm suicide rate-0.400 (-5.0% of base)p = 0.632
placebo n = 38, sd = 1.039, pre RMSE = 0.903
homicide rate-0.182 (-3.2% of base)p = 0.789
placebo n = 38, sd = 1.235, pre RMSE = 0.283
motor vehicle theft rate-191.005 *** (-57.3% of base)p = 0.000
placebo n = 38, sd = 84.922, pre RMSE = 167

Post ATT = mean(treated − synthetic) over the post-treatment years. Placebo p-value: two-sided rank from permutation across all donor states (refitting SCM on each donor as if treated). Stars at 10% / 5% / 1% from the placebo distribution. "% of base" expresses the ATT as a fraction of the all-state mean.

Trajectory: motor vehicle theft rate

Vermont (2018): Motor vehicle theft rate (per 100k) [placebo] adoption (2018) 2006 2008 2010 2012 2014 2016 2018 2020 2022 -23 2.7e+02 5.6e+02 8.5e+02 1.1e+03 Vermont (treated) Synthetic counterfactual Donor states (gray)

9. Minimum age 21 for handgun purchase

Treatment: age21handgunsale (0 → 1 (state raises minimum handgun-purchase age above the federal 18 floor)).
Detailed write-up: CS21 methodology and stacked-DiD comparison.

Headline interpretation (Minimum age 21 for handgun purchase, broad / RA)

Reading the broad-pool, regression-adjusted Callaway–Sant'Anna spec (the same spec the figure beneath the CS21 table reports), the statistically significant outcomes are:

"% of base" expresses the coefficient as a fraction of the all-state mean of the outcome over the analysis window — useful for an economic-magnitude read. A pre-trend rejection means the treated and control groups were already on diverging paths before the policy took effect, which weakens the causal claim. See §3 for an explanation of the spec grid (broad/strict, OR/RA) and the full 4-spec table below for results under the other specifications.

Treatment cohorts

Cohort yearn statesStates
20102WV,WY
20182FL,VT
20191WA
20231CO

Observation window and pre/post specification

Analysis window: 1999–2023 (state panel post-NICS; last year with v2 firearm-mortality data). Treated-cohort adoptions span 2010–2023.

Event window: [−5, +5] years around adoption (5 leads, 5 lags). This follows the modal modern DiD convention (Roth, Sant'Anna, Bilinski, Poe 2023, J Econometrics; the canonical Callaway–Sant'Anna 2021 framework defaults to symmetric leads/lags). The 5-year window is wide enough to detect dynamic treatment effects that build over time (Cheng-Hoekstra 2013 SYG; McClellan-Tekin 2017), but narrow enough that small-sample inference for the most recent cohorts remains feasible. Pre-trend test averages event-times [−5, −2] so the omitted year (−1) and the immediate post-period (+0, +1) do not contaminate the parallel-trends check (per Borusyak-Jaravel-Spiess 2024 and the Roth-SA bounds methodology).

Strict-pool window: control states must satisfy the policy's no-contamination rule for every year in [g−5, g+5] (the same window as the event study). This avoids "drifting" controls — states that are close to but not yet adopting the policy at g but adopt soon after, which would bias the comparison toward zero (Goodman-Bacon 2021, Sun-Abraham 2021).

Covariates used (literature-backed; see §3)

Three tiers per outcome family — Minimal / Headline / Expanded — shown in the covariate-sensitivity sub-table below.

Lethal violence (homicide, firearm homicide, total homicide) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_age_15_24, share_age_25_44, share_male, share_black_nh, share_hispanic, share_bachelors_plus, imprisonment_rate, sworn_officers_per_100k, alcohol_per_capita_ethanol_gallons

Suicide (firearm, total, non-firearm) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_male, share_age_15_24, share_age_25_44, share_bachelors_plus, share_black_nh, share_hispanic, alcohol_per_capita_ethanol_gallons, drug_overdose_per_100k, religion_adherents_pct_2020, ownership_rand

Property / placebo (MV theft) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_age_15_24, share_age_25_44, share_male, share_black_nh, share_hispanic, share_bachelors_plus, imprisonment_rate, sworn_officers_per_100k, alcohol_per_capita_ethanol_gallons

Covariate balance check (Table 1) — treated vs broad control pool at each cohort's g−1 baseline
CovariateTreated meanControl meanNormalized diff
ln_population14.88115.182-0.246
ln_pcpi_real_202411.07711.023+0.309
unemployment_rate4.8264.910-0.038
poverty_rate0.1210.131-0.328
share_age_15_240.1310.137-0.689
share_age_25_440.2610.259+0.085
share_male0.4980.494+0.465
share_black_nh0.0470.110-0.800
share_hispanic0.1220.116+0.062
share_bachelors_plus0.3190.307+0.154
imprisonment_rate330.797405.634-0.601
sworn_officers_per_100k208.702215.661-0.142
alcohol_per_capita_ethanol_gallons2.4882.450+0.072

Treated and control means pooled across cohorts at each cohort's g−1 anchor year. Normalized difference = (mean_T − mean_C) / sqrt((sd_T² + sd_C²)/2). Per Imbens & Rubin (2015), |normalized diff| > 0.25 (⚠) indicates covariate imbalance worth flagging — RA / EB reweighting is the standard remedy.

Callaway-Sant'Anna ATT(g, t) — overall post-treatment

OutcomeBroad / ORBroad / RAStrict / ORStrict / RA
firearm suicide rate+0.690 *** (+8.6% of base)
SE 0.168, z +4.10
pre-z +1.09 ✓
-0.972 *** (-12.1% of base)
SE 0.158, z -6.14
pre-z -4.70 ✗
+0.582 *** (+7.3% of base)
SE 0.169, z +3.44
pre-z +1.59 ✓
-0.554 *** (-6.9% of base)
SE 0.150, z -3.70
pre-z -2.84 ✗
nonfirearm suicide rate+1.475 *** (+25.2% of base)
SE 0.130, z +11.39
pre-z +8.45 ✗
+1.236 *** (+21.1% of base)
SE 0.141, z +8.75
pre-z +2.82 ✗
+1.423 *** (+24.3% of base)
SE 0.130, z +10.94
pre-z +8.03 ✗
+1.430 *** (+24.4% of base)
SE 0.187, z +7.66
pre-z +2.56 ✗
total suicide rate+2.165 *** (+15.6% of base)
SE 0.211, z +10.24
pre-z +6.67 ✗
+0.263 (+1.9% of base)
SE 0.213, z +1.24
pre-z -2.49 ✗
+2.006 *** (+14.5% of base)
SE 0.212, z +9.44
pre-z +6.93 ✗
+0.876 *** (+6.3% of base)
SE 0.219, z +4.01
pre-z +0.44 ✓
firearm homicide rate-0.620 *** (-15.0% of base)
SE 0.068, z -9.08
pre-z -3.16 ✗
-0.367 *** (-8.8% of base)
SE 0.090, z -4.06
pre-z -2.39 ✗
-0.731 *** (-17.6% of base)
SE 0.073, z -9.95
pre-z -1.21 ✓
-0.263 *** (-6.3% of base)
SE 0.089, z -2.94
pre-z -3.18 ✗
homicide rate-0.319 *** (-5.6% of base)
SE 0.076, z -4.19
pre-z -2.29 ✗
+0.021 (+0.4% of base)
SE 0.090, z +0.24
pre-z -1.85 ✓
-0.374 *** (-6.5% of base)
SE 0.081, z -4.64
pre-z -1.60 ✓
+0.037 (+0.6% of base)
SE 0.097, z +0.38
pre-z -2.57 ✗
motor vehicle theft rate-8.312 * (-2.5% of base)
SE 4.984, z -1.67
pre-z -12.60 ✗
-46.018 *** (-13.8% of base)
SE 6.667, z -6.90
pre-z -5.07 ✗
-10.684 ** (-3.2% of base)
SE 5.155, z -2.07
pre-z -10.12 ✗
-49.160 *** (-14.7% of base)
SE 6.413, z -7.67
pre-z -4.23 ✗

Stars: * p<0.10, ** p<0.05, *** p<0.01 (two-tailed, state-clustered). "% of base" expresses the ATT as a percentage of the all-state mean of that outcome over the analysis window. ✓ / ✗ on the third line indicates whether the pre-trend test (avg ATT for e ∈ [-5, -2]) does NOT / DOES reject zero. Outcomes are per 100,000 residents.

Covariate sensitivity (multiverse: Minimal / Headline / Expanded covariate sets) — broad pool, RA spec
OutcomeMinimalHeadlineExpanded
firearm suicide rate+0.190 * (+2.4% of base)
SE 0.101, z +1.88
-0.972 *** (-12.1% of base)
SE 0.158, z -6.14
-0.816 *** (-10.2% of base)
SE 0.161, z -5.07
nonfirearm suicide rate+1.208 *** (+20.6% of base)
SE 0.080, z +15.17
+1.236 *** (+21.1% of base)
SE 0.141, z +8.75
+0.791 *** (+13.5% of base)
SE 0.144, z +5.48
total suicide rate+1.398 *** (+10.1% of base)
SE 0.119, z +11.75
+0.263 (+1.9% of base)
SE 0.213, z +1.24
-0.025 (-0.2% of base)
SE 0.217, z -0.12
firearm homicide rate-0.544 *** (-13.1% of base)
SE 0.053, z -10.17
-0.367 *** (-8.8% of base)
SE 0.090, z -4.06
-0.792 *** (-19.1% of base)
SE 0.097, z -8.17
homicide rate-0.429 *** (-7.5% of base)
SE 0.061, z -7.03
+0.021 (+0.4% of base)
SE 0.090, z +0.24
-0.199 ** (-3.5% of base)
SE 0.098, z -2.02
motor vehicle theft rate-53.411 *** (-16.0% of base)
SE 5.208, z -10.26
-46.018 *** (-13.8% of base)
SE 6.667, z -6.90
-54.266 *** (-16.3% of base)
SE 6.798, z -7.98

Each column uses a different literature-backed covariate set (see §3 methodology preamble for definitions). Stars: * p<0.10, ** p<0.05, *** p<0.01. A coefficient that flips sign or loses significance across tiers is sensitive to covariate choice — interpret with care, per Donohue-Aneja-Weber 2019.

Stacked DiD (Cengiz et al. 2019) — overall post-treatment

OutcomeUnweightedRegression-adjustedEntropy-balanced
firearm suicide rate-0.050 (-0.6% of base)
SE 0.150, z -0.34
-0.050 (-0.6% of base)
SE 0.150, z -0.34
nonfirearm suicide rate+0.202 (+3.5% of base)
SE 0.280, z +0.72
+0.202 (+3.5% of base)
SE 0.280, z +0.72
total suicide rate+0.152 (+1.1% of base)
SE 0.413, z +0.37
+0.152 (+1.1% of base)
SE 0.413, z +0.37
firearm homicide rate-0.419 (-10.1% of base)
SE 0.323, z -1.30
-0.419 (-10.1% of base)
SE 0.323, z -1.30
homicide rate-0.265 (-4.6% of base)
SE 0.313, z -0.85
-0.265 (-4.6% of base)
SE 0.313, z -0.85
motor vehicle theft rate+14.589 (+4.4% of base)
SE 22.486, z +0.65
+14.589 (+4.4% of base)
SE 22.486, z +0.65

Stars: * p<0.10, ** p<0.05, *** p<0.01 (two-tailed, state-clustered). "% of base" expresses the ATT as a percentage of the all-state mean of that outcome. Outcomes per 100,000 residents.

CS21 event study (broad / RA spec)

Callaway-Sant'Anna ATT by event time (RA) -- age21 handgun Firearm suicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -4.5 -3.1 -1.7 -0.27 1.1 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 0 1 2 3 4 5 -0.73 0.75 2.2 3.7 5.2 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 0 1 2 3 4 5 -3 -0.66 1.7 4 6.3 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -1.2 -0.75 -0.34 0.065 0.47 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -1.3 -0.79 -0.27 0.24 0.76 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 0 1 2 3 4 5 -1.4e+02 -94 -47 -0.29 47 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Stacked-DiD event study (unweighted spec)

Callaway-Sant'Anna ATT by event time (UNWEIGHTED) -- age21 handgun Firearm suicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.4 -0.7 0.038 0.78 1.5 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.2 -0.3 0.6 1.5 2.4 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 -1 0 1 2 3 4 5 -2.3 -0.81 0.7 2.2 3.7 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.4 -0.79 -0.16 0.47 1.1 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.9 -1.2 -0.49 0.21 0.9 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.1e+02 -51 6.9 65 1.2e+02 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Stacked-DiD event study (entropy-balanced spec)

Callaway-Sant'Anna ATT by event time (EB) -- age21 handgun Firearm suicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.4 -0.7 0.038 0.78 1.5 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.2 -0.3 0.6 1.5 2.4 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 -1 0 1 2 3 4 5 -2.3 -0.81 0.7 2.2 3.7 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.4 -0.79 -0.16 0.47 1.1 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.9 -1.2 -0.49 0.21 0.9 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.1e+02 -51 6.9 65 1.2e+02 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Roth-Sant'Anna pre-trend bounds — firearm suicide, e = +1

EstimatorSpecATT(+1)95% CI (M=0)ATT(+1) trend-adj95% CI (M=1)M=1 verdict
cs21broad / or+0.003(-0.435, +0.441)-0.505(-1.042, +0.032)fails
cs21broad / ra-1.201(-1.616, -0.786)-0.534(-1.712, +0.644)fails
cs21strict / or+0.042(-0.406, +0.490)-0.372(-0.927, +0.184)fails
cs21strict / ra-1.121(-1.594, -0.649)-0.423(-1.888, +1.043)fails
stackddsingle / eb-0.137(-0.465, +0.191)-0.420(-1.095, +0.254)fails
stackddsingle / unweighted-0.137(-0.465, +0.191)-0.420(-1.095, +0.254)fails

Roth-Sant'Anna sensitivity bounds at event time +1. M = post-trend deviation as a multiple of the linear extrapolation of the observed pre-trend. M=1 = "post-trend looks like more of the same"; M=2 = "post-trend could be twice the pre-trend magnitude".

Synthetic control method (Abadie-Diamond-Hainmueller 2010)

For small-cohort policies, the literature (Webster 2014, Crifasi 2015, McCourt 2020, Kivisto 2018, Klarevas 2019) uses SCM rather than cohort-pooled DiD because per-event-time DiD estimates are noisy when only 1-4 states adopt. SCM constructs an explicit weighted counterfactual from the donor pool that minimizes pre-period MSPE, then attributes the post-period gap to the treatment. Inference is via permutation: refit SCM on every donor as if treated, compare the actual post-period effect to the placebo distribution.

FL_2018 — SCM per-state results

OutcomePost ATT (per 100k)Placebo p-value
firearm suicide rate-0.489 (-6.1% of base)p = 0.467
placebo n = 30, sd = 0.723, pre RMSE = 0.173
firearm homicide rate-1.300 (-31.3% of base)p = 0.103
placebo n = 29, sd = 1.024, pre RMSE = 0.164
homicide rate-0.969 (-16.9% of base)p = 0.267
placebo n = 30, sd = 1.407, pre RMSE = 0.111
motor vehicle theft rate-86.367 (-25.9% of base)p = 0.300
placebo n = 30, sd = 86.317, pre RMSE = 7.27

Post ATT = mean(treated − synthetic) over the post-treatment years. Placebo p-value: two-sided rank from permutation across all donor states (refitting SCM on each donor as if treated). Stars at 10% / 5% / 1% from the placebo distribution. "% of base" expresses the ATT as a fraction of the all-state mean.

Trajectory: firearm homicide rate

Florida (2018): Firearm homicide rate (per 100k) adoption (2018) 2006 2008 2010 2012 2014 2016 2018 2020 2022 -0.99 4.5 9.9 15 21 Florida (treated) Synthetic counterfactual Donor states (gray)

VT_2018 — SCM per-state results

OutcomePost ATT (per 100k)Placebo p-value
firearm suicide rate-0.544 (-6.8% of base)p = 0.433
placebo n = 30, sd = 0.723, pre RMSE = 0.913
homicide rate-0.130 (-2.3% of base)p = 0.900
placebo n = 30, sd = 1.407, pre RMSE = 0.404
motor vehicle theft rate-157.296 * (-47.2% of base)p = 0.100
placebo n = 30, sd = 86.317, pre RMSE = 144

Post ATT = mean(treated − synthetic) over the post-treatment years. Placebo p-value: two-sided rank from permutation across all donor states (refitting SCM on each donor as if treated). Stars at 10% / 5% / 1% from the placebo distribution. "% of base" expresses the ATT as a fraction of the all-state mean.

Trajectory: motor vehicle theft rate

Vermont (2018): Motor vehicle theft rate (per 100k) [placebo] adoption (2018) 2006 2008 2010 2012 2014 2016 2018 2020 2022 -23 2.7e+02 5.6e+02 8.5e+02 1.1e+03 Vermont (treated) Synthetic counterfactual Donor states (gray)

WA_2019 — SCM per-state results

OutcomePost ATT (per 100k)Placebo p-value
firearm suicide rate-0.536 (-6.7% of base)p = 0.452
placebo n = 31, sd = 0.679, pre RMSE = 0.25
firearm homicide rate+0.234 (+5.6% of base)p = 0.767
placebo n = 30, sd = 1.069, pre RMSE = 0.105
homicide rate+0.307 (+5.4% of base)p = 0.774
placebo n = 31, sd = 1.423, pre RMSE = 0.154
motor vehicle theft rate+76.614 (+23.0% of base)p = 0.323
placebo n = 31, sd = 82.126, pre RMSE = 52.6

Post ATT = mean(treated − synthetic) over the post-treatment years. Placebo p-value: two-sided rank from permutation across all donor states (refitting SCM on each donor as if treated). Stars at 10% / 5% / 1% from the placebo distribution. "% of base" expresses the ATT as a fraction of the all-state mean.

Trajectory: motor vehicle theft rate

Washington (2019): Motor vehicle theft rate (per 100k) [placebo] adoption (2019) 2007 2009 2011 2013 2015 2017 2019 2021 2023 13 2.4e+02 4.6e+02 6.9e+02 9.1e+02 Washington (treated) Synthetic counterfactual Donor states (gray)

WV_2010 — SCM per-state results

OutcomePost ATT (per 100k)Placebo p-value
firearm suicide rate-0.372 (-4.6% of base)p = 0.600
placebo n = 30, sd = 1.031, pre RMSE = 0.513
firearm homicide rate-0.324 (-7.8% of base)p = 0.690
placebo n = 29, sd = 0.800, pre RMSE = 0.308
homicide rate+0.663 (+11.6% of base)p = 0.300
placebo n = 30, sd = 1.139, pre RMSE = 0.512
motor vehicle theft rate-84.041 (-25.2% of base)p = 0.233
placebo n = 30, sd = 77.416, pre RMSE = 74.2

Post ATT = mean(treated − synthetic) over the post-treatment years. Placebo p-value: two-sided rank from permutation across all donor states (refitting SCM on each donor as if treated). Stars at 10% / 5% / 1% from the placebo distribution. "% of base" expresses the ATT as a fraction of the all-state mean.

Trajectory: motor vehicle theft rate

West Virginia (2010): Motor vehicle theft rate (per 100k) [placebo] adoption (2010) 1999 2001 2003 2005 2007 2009 2011 2013 2015 2017 2019 2021 2023 0.82 2.9e+02 5.9e+02 8.8e+02 1.2e+03 West Virginia (treated) Synthetic counterfactual Donor states (gray)

WY_2010 — SCM per-state results

OutcomePost ATT (per 100k)Placebo p-value
firearm suicide rate+1.459 (+18.2% of base)p = 0.133
placebo n = 30, sd = 1.031, pre RMSE = 2.37
firearm homicide rate-0.122 (-2.9% of base)p = 0.931
placebo n = 29, sd = 0.800, pre RMSE = 0.328
homicide rate-0.167 (-2.9% of base)p = 0.733
placebo n = 30, sd = 1.139, pre RMSE = 0.354
motor vehicle theft rate-74.037 (-22.2% of base)p = 0.300
placebo n = 30, sd = 77.416, pre RMSE = 126

Post ATT = mean(treated − synthetic) over the post-treatment years. Placebo p-value: two-sided rank from permutation across all donor states (refitting SCM on each donor as if treated). Stars at 10% / 5% / 1% from the placebo distribution. "% of base" expresses the ATT as a fraction of the all-state mean.

Trajectory: firearm suicide rate

Wyoming (2010): Firearm suicide rate (per 100k) adoption (2010) 1999 2001 2003 2005 2007 2009 2011 2013 2015 2017 2019 2021 2023 1.9 7.6 13 19 25 Wyoming (treated) Synthetic counterfactual Donor states (gray)

10. Assault weapons ban

Treatment: assault (0 → 1 (state prohibits long-gun assault weapons; HI-style pistols-only bans excluded per Tufts coding)).
Detailed write-up: CS21 methodology and stacked-DiD comparison.

Headline interpretation (Assault weapons ban, broad / RA)

Reading the broad-pool, regression-adjusted Callaway–Sant'Anna spec (the same spec the figure beneath the CS21 table reports), the statistically significant outcomes are:

"% of base" expresses the coefficient as a fraction of the all-state mean of the outcome over the analysis window — useful for an economic-magnitude read. A pre-trend rejection means the treated and control groups were already on diverging paths before the policy took effect, which weakens the causal claim. See §3 for an explanation of the spec grid (broad/strict, OR/RA) and the full 4-spec table below for results under the other specifications.

Treatment cohorts

Cohort yearn statesStates
20131MD
20221DE
20232IL,WA

Observation window and pre/post specification

Analysis window: 1999–2023 (state panel post-NICS; last year with v2 firearm-mortality data). Treated-cohort adoptions span 2013–2023.

Event window: [−5, +5] years around adoption (5 leads, 5 lags). This follows the modal modern DiD convention (Roth, Sant'Anna, Bilinski, Poe 2023, J Econometrics; the canonical Callaway–Sant'Anna 2021 framework defaults to symmetric leads/lags). The 5-year window is wide enough to detect dynamic treatment effects that build over time (Cheng-Hoekstra 2013 SYG; McClellan-Tekin 2017), but narrow enough that small-sample inference for the most recent cohorts remains feasible. Pre-trend test averages event-times [−5, −2] so the omitted year (−1) and the immediate post-period (+0, +1) do not contaminate the parallel-trends check (per Borusyak-Jaravel-Spiess 2024 and the Roth-SA bounds methodology).

Strict-pool window: control states must satisfy the policy's no-contamination rule for every year in [g−5, g+5] (the same window as the event study). This avoids "drifting" controls — states that are close to but not yet adopting the policy at g but adopt soon after, which would bias the comparison toward zero (Goodman-Bacon 2021, Sun-Abraham 2021).

Covariates used (literature-backed; see §3)

Three tiers per outcome family — Minimal / Headline / Expanded — shown in the covariate-sensitivity sub-table below.

Lethal violence (homicide, firearm homicide, total homicide) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_age_15_24, share_age_25_44, share_male, share_black_nh, share_hispanic, share_bachelors_plus, imprisonment_rate, sworn_officers_per_100k, alcohol_per_capita_ethanol_gallons

Suicide (firearm, total, non-firearm) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_male, share_age_15_24, share_age_25_44, share_bachelors_plus, share_black_nh, share_hispanic, alcohol_per_capita_ethanol_gallons, drug_overdose_per_100k, religion_adherents_pct_2020, ownership_rand

Property / placebo (MV theft) — Headline: ln_population, ln_pcpi_real_2024, unemployment_rate, poverty_rate, share_age_15_24, share_age_25_44, share_male, share_black_nh, share_hispanic, share_bachelors_plus, imprisonment_rate, sworn_officers_per_100k, alcohol_per_capita_ethanol_gallons

Covariate balance check (Table 1) — treated vs broad control pool at each cohort's g−1 baseline
CovariateTreated meanControl meanNormalized diff
ln_population15.40715.152+0.242
ln_pcpi_real_202411.20711.082+1.013
unemployment_rate5.2445.057+0.108
poverty_rate0.1090.135-1.081
share_age_15_240.1280.135-0.835
share_age_25_440.2700.260+0.580
share_male0.4920.497-0.568
share_black_nh0.1740.097+0.764
share_hispanic0.1320.121+0.131
share_bachelors_plus0.3740.319+1.278
imprisonment_rate313.980367.896-0.378
sworn_officers_per_100k221.798205.700+0.272
alcohol_per_capita_ethanol_gallons2.2102.461-0.668

Treated and control means pooled across cohorts at each cohort's g−1 anchor year. Normalized difference = (mean_T − mean_C) / sqrt((sd_T² + sd_C²)/2). Per Imbens & Rubin (2015), |normalized diff| > 0.25 (⚠) indicates covariate imbalance worth flagging — RA / EB reweighting is the standard remedy.

Callaway-Sant'Anna ATT(g, t) — overall post-treatment

OutcomeBroad / ORBroad / RAStrict / ORStrict / RA
firearm suicide rate-0.946 *** (-11.8% of base)
SE 0.020, z -47.51
pre-z -4.71 ✗
-0.769 (-9.6% of base)
SE 0.000, z +nan
pre-z +nan ✗
-1.020 *** (-12.7% of base)
SE 0.022, z -46.46
pre-z -3.85 ✗
-0.420 (-5.2% of base)
SE 0.000, z +nan
pre-z +nan ✗
nonfirearm suicide rate-0.148 *** (-2.5% of base)
SE 0.015, z -10.22
pre-z +1.95 ✓
+0.839 (+14.3% of base)
SE 0.000, z +nan
pre-z +nan ✗
-0.159 *** (-2.7% of base)
SE 0.016, z -10.21
pre-z +2.31 ✗
+0.890 (+15.2% of base)
SE 0.000, z +nan
pre-z +nan ✗
total suicide rate-1.094 *** (-7.9% of base)
SE 0.023, z -48.27
pre-z -1.58 ✓
+0.070 (+0.5% of base)
SE 0.000, z +nan
pre-z +nan ✗
-1.179 *** (-8.5% of base)
SE 0.025, z -47.23
pre-z -0.89 ✓
+0.470 (+3.4% of base)
SE 0.000, z +nan
pre-z +nan ✗
firearm homicide rate+0.422 *** (+10.2% of base)
SE 0.051, z +8.26
pre-z -1.55 ✓
+0.620 (+14.9% of base)
SE 0.000, z +nan
pre-z +nan ✗
+0.327 *** (+7.9% of base)
SE 0.051, z +6.36
pre-z -1.25 ✓
+0.548 (+13.2% of base)
SE 0.000, z +nan
pre-z +nan ✗
homicide rate+0.344 *** (+6.0% of base)
SE 0.049, z +7.02
pre-z -3.07 ✗
+1.443 (+25.2% of base)
SE 0.000, z +nan
pre-z +nan ✗
+0.266 *** (+4.7% of base)
SE 0.050, z +5.30
pre-z -2.85 ✗
+0.852 (+14.9% of base)
SE 0.000, z +nan
pre-z +nan ✗
motor vehicle theft rate-22.366 *** (-6.7% of base)
SE 1.482, z -15.09
pre-z -4.79 ✗
+40.959 (+12.3% of base)
SE 0.000, z +nan
pre-z +nan ✗
-25.118 *** (-7.5% of base)
SE 1.607, z -15.64
pre-z -4.81 ✗
+41.336 (+12.4% of base)
SE 0.000, z +nan
pre-z +nan ✗

Stars: * p<0.10, ** p<0.05, *** p<0.01 (two-tailed, state-clustered). "% of base" expresses the ATT as a percentage of the all-state mean of that outcome over the analysis window. ✓ / ✗ on the third line indicates whether the pre-trend test (avg ATT for e ∈ [-5, -2]) does NOT / DOES reject zero. Outcomes are per 100,000 residents.

Covariate sensitivity (multiverse: Minimal / Headline / Expanded covariate sets) — broad pool, RA spec
OutcomeMinimalHeadlineExpanded
firearm suicide rate-0.118 *** (-1.5% of base)
SE 0.016, z -7.45
-0.769 (-9.6% of base)
SE 0.000, z +nan
-0.716 (-8.9% of base)
SE 0.000, z +nan
nonfirearm suicide rate-0.141 *** (-2.4% of base)
SE 0.015, z -9.42
+0.839 (+14.3% of base)
SE 0.000, z +nan
+0.984 (+16.8% of base)
SE 0.000, z +nan
total suicide rate-0.259 *** (-1.9% of base)
SE 0.019, z -13.59
+0.070 (+0.5% of base)
SE 0.000, z +nan
+0.268 (+1.9% of base)
SE 0.000, z +nan
firearm homicide rate-0.043 * (-1.0% of base)
SE 0.023, z -1.91
+0.620 (+14.9% of base)
SE 0.000, z +nan
+0.013 (+0.3% of base)
SE 0.000, z +nan
homicide rate+0.173 *** (+3.0% of base)
SE 0.029, z +5.86
+1.443 (+25.2% of base)
SE 0.000, z +nan
+0.204 (+3.6% of base)
SE 0.000, z +nan
motor vehicle theft rate-4.764 * (-1.4% of base)
SE 2.533, z -1.88
+40.959 (+12.3% of base)
SE 0.000, z +nan
+31.186 (+9.4% of base)
SE 0.000, z +nan

Each column uses a different literature-backed covariate set (see §3 methodology preamble for definitions). Stars: * p<0.10, ** p<0.05, *** p<0.01. A coefficient that flips sign or loses significance across tiers is sensitive to covariate choice — interpret with care, per Donohue-Aneja-Weber 2019.

Stacked DiD (Cengiz et al. 2019) — overall post-treatment

OutcomeUnweightedRegression-adjustedEntropy-balanced
firearm suicide rate-0.261 (-3.3% of base)
SE 0.517, z -0.51
-0.261 (-3.3% of base)
SE 0.517, z -0.51
nonfirearm suicide rate-0.085 (-1.4% of base)
SE 0.186, z -0.46
-0.085 (-1.4% of base)
SE 0.186, z -0.46
total suicide rate-0.346 (-2.5% of base)
SE 0.675, z -0.51
-0.346 (-2.5% of base)
SE 0.675, z -0.51
firearm homicide rate-0.383 (-9.2% of base)
SE 0.645, z -0.59
-0.383 (-9.2% of base)
SE 0.645, z -0.59
homicide rate-0.583 (-10.2% of base)
SE 0.640, z -0.91
-0.583 (-10.2% of base)
SE 0.640, z -0.91
motor vehicle theft rate+4.871 (+1.5% of base)
SE 62.135, z +0.08
+4.871 (+1.5% of base)
SE 62.135, z +0.08

Stars: * p<0.10, ** p<0.05, *** p<0.01 (two-tailed, state-clustered). "% of base" expresses the ATT as a percentage of the all-state mean of that outcome. Outcomes per 100,000 residents.

CS21 event study (broad / RA spec)

Callaway-Sant'Anna ATT by event time (RA) -- assault weapons ban Firearm suicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -1.9 -1.3 -0.7 -0.081 0.54 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 0 1 2 3 4 5 -0.078 0.47 1 1.6 2.1 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 0 1 2 3 4 5 -1 -0.087 0.83 1.7 2.7 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -1.5 -0.65 0.2 1.1 1.9 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 0 1 2 3 4 5 -1 -0.14 0.73 1.6 2.5 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 0 1 2 3 4 5 -23 6.8 36 65 95 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Stacked-DiD event study (unweighted spec)

Callaway-Sant'Anna ATT by event time (UNWEIGHTED) -- assault weapons ban Firearm suicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.4 -0.81 -0.18 0.44 1.1 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.1 -0.53 0.007 0.54 1.1 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.9 -0.96 0.0034 0.96 1.9 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -2.2 -1.3 -0.3 0.66 1.6 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -2.1 -1.2 -0.34 0.54 1.4 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.1e+02 -43 29 1e+02 1.7e+02 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Stacked-DiD event study (entropy-balanced spec)

Callaway-Sant'Anna ATT by event time (EB) -- assault weapons ban Firearm suicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.4 -0.81 -0.18 0.44 1.1 Event time (years from adoption) ATT (per 100k) Non-firearm suicide rate (per 100k) [substitution test] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.1 -0.53 0.007 0.54 1.1 Event time (years from adoption) ATT (per 100k) Total suicide rate (per 100k) [net effect] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.9 -0.96 0.0034 0.96 1.9 Event time (years from adoption) ATT (per 100k) Firearm homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -2.2 -1.3 -0.3 0.66 1.6 Event time (years from adoption) ATT (per 100k) Total homicide rate (per 100k) -5 -4 -3 -2 -1 0 1 2 3 4 5 -2.1 -1.2 -0.34 0.54 1.4 Event time (years from adoption) ATT (per 100k) Motor vehicle theft rate (per 100k) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.1e+02 -43 29 1e+02 1.7e+02 Event time (years from adoption) ATT (per 100k) Whiskers: pointwise 95% CI from cluster bootstrap. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Roth-Sant'Anna pre-trend bounds — firearm suicide, e = +1

EstimatorSpecATT(+1)95% CI (M=0)ATT(+1) trend-adj95% CI (M=1)M=1 verdict
cs21broad / or-0.095(-0.095, -0.095)+0.211(-0.142, +0.564)fails
cs21broad / ra-0.452(-0.452, -0.452)+0.649(-0.550, +1.848)fails
cs21strict / or-0.086(-0.086, -0.086)+0.263(-0.095, +0.620)fails
cs21strict / ra+0.243(+0.243, +0.243)+1.300(+0.623, +1.976)survives
stackddsingle / eb+0.549(+0.228, +0.871)+1.154(+0.377, +1.930)survives
stackddsingle / unweighted+0.549(+0.228, +0.871)+1.154(+0.377, +1.930)survives

Roth-Sant'Anna sensitivity bounds at event time +1. M = post-trend deviation as a multiple of the linear extrapolation of the observed pre-trend. M=1 = "post-trend looks like more of the same"; M=2 = "post-trend could be twice the pre-trend magnitude".

Synthetic control method (Abadie-Diamond-Hainmueller 2010)

For small-cohort policies, the literature (Webster 2014, Crifasi 2015, McCourt 2020, Kivisto 2018, Klarevas 2019) uses SCM rather than cohort-pooled DiD because per-event-time DiD estimates are noisy when only 1-4 states adopt. SCM constructs an explicit weighted counterfactual from the donor pool that minimizes pre-period MSPE, then attributes the post-period gap to the treatment. Inference is via permutation: refit SCM on every donor as if treated, compare the actual post-period effect to the placebo distribution.

MD_2013 — SCM per-state results

OutcomePost ATT (per 100k)Placebo p-value
firearm homicide rate+0.012 (+0.3% of base)p = 1.000
placebo n = 39, sd = 0.872, pre RMSE = 0.343
homicide rate-0.047 (-0.8% of base)p = 0.976
placebo n = 41, sd = 1.130, pre RMSE = 0.425
motor vehicle theft rate-38.126 (-11.4% of base)p = 0.683
placebo n = 41, sd = 93.026, pre RMSE = 13.9

Post ATT = mean(treated − synthetic) over the post-treatment years. Placebo p-value: two-sided rank from permutation across all donor states (refitting SCM on each donor as if treated). Stars at 10% / 5% / 1% from the placebo distribution. "% of base" expresses the ATT as a fraction of the all-state mean.

Trajectory: motor vehicle theft rate

Maryland (2013): Motor vehicle theft rate (per 100k) [placebo] adoption (2013) 2001 2003 2005 2007 2009 2011 2013 2015 2017 2019 2021 2023 -25 2.7e+02 5.7e+02 8.7e+02 1.2e+03 Maryland (treated) Synthetic counterfactual Donor states (gray)

11. Spatial regression discontinuity on county borders

Border-county pair design adapted from Dube, Lester & Reich (2010, RESTAT) to firearm policy. County FE + state-pair × year FE; iterative within-FE Frisch-Waugh-Lovell. Identifying variation comes from differential outcomes between adjacent counties on opposite sides of a state border. Bandwidth = 100 km (centroid distance to nearest other-state population centroid; geometry layer documented in §2.12 of data_appendix.md). Per-policy estimator detail and the 10-spec robustness battery: see outputs/border_rdd/methodology.md.

Outcomes are stratified into primary (true county-level Kaplan UCR rates: violent crime, murder, property crime, burglary, motor vehicle theft) and secondary (state-joined-down mortality — no within-state variation by construction; reported only as a sanity check against the existing CS21 results restricted to the border subsample).

Permitless carry — RDD headline (B = 100 km, FE = pair × year, cluster = state)

OutcomeStratumβ (per 100k) [SE, z]nstate pairs
county_violent_crime_rateprimary-1.307 (-0.6% of base)
SE 6.476, z -0.20
31248101
county_murder_rateprimary-1.183 ** (-33.7% of base)
SE 0.547, z -2.16
31248101
county_property_crime_rateprimary+46.630 * (+3.0% of base)
SE 23.922, z +1.95
31248101
county_burglary_rateprimary+11.907 * (+3.3% of base)
SE 6.250, z +1.91
31248101
county_motor_vehicle_theft_rateprimary+1.640 (+1.4% of base)
SE 3.518, z +0.47
31248101
state_firearm_suicide_ratesecondary+0.362 *** (+4.5% of base)
SE 0.110, z +3.29
29295101
state_total_suicide_ratesecondary+0.541 *** (+3.9% of base)
SE 0.167, z +3.24
29295101
state_nonfirearm_suicide_ratesecondary+0.179 * (+3.1% of base)
SE 0.100, z +1.79
29295101
state_firearm_homicide_ratesecondary+0.284 ** (+6.8% of base)
SE 0.133, z +2.13
29271101

Event study (primary outcomes only)

Spatial RDD event study (permitless_carry, primary outcomes) County violent crime rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -20 -7.7 4.2 16 28 Event time (years from adoption) Coefficient (per 100k) County murder rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -7 -4.8 -2.6 -0.45 1.7 Event time (years from adoption) Coefficient (per 100k) County property crime rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.4e+02 -62 17 96 1.7e+02 Event time (years from adoption) Coefficient (per 100k) County burglary rate (per 100,000) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -45 -21 2.9 27 50 Event time (years from adoption) Coefficient (per 100k) County motor vehicle theft rate (per 100,000) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.2e+02 -82 -44 -5.4 33 Event time (years from adoption) Coefficient (per 100k) Whiskers: pointwise 95% CI from cluster-robust SE. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Civil-petition red-flag (ERPO) — RDD headline (B = 100 km, FE = pair × year, cluster = state)

OutcomeStratumβ (per 100k) [SE, z]nstate pairs
county_violent_crime_rateprimary-23.807 * (-10.0% of base)
SE 13.520, z -1.76
31248101
county_murder_rateprimary-2.184 * (-62.3% of base)
SE 1.143, z -1.91
31248101
county_property_crime_rateprimary-16.144 (-1.0% of base)
SE 33.813, z -0.48
31248101
county_burglary_rateprimary+12.827 (+3.6% of base)
SE 9.664, z +1.33
31248101
county_motor_vehicle_theft_rateprimary-3.135 (-2.8% of base)
SE 5.790, z -0.54
31248101
state_firearm_suicide_ratesecondary-0.704 *** (-8.8% of base)
SE 0.063, z -11.10
29295101
state_total_suicide_ratesecondary-0.547 *** (-3.9% of base)
SE 0.106, z -5.15
29295101
state_nonfirearm_suicide_ratesecondary+0.157 * (+2.7% of base)
SE 0.085, z +1.84
29295101
state_firearm_homicide_ratesecondary+0.194 (+4.7% of base)
SE 0.207, z +0.94
29271101

Event study (primary outcomes only)

Spatial RDD event study (red_flag, primary outcomes) County violent crime rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.1e+02 -68 -30 9.2 48 Event time (years from adoption) Coefficient (per 100k) County murder rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -3.6 4 12 19 27 Event time (years from adoption) Coefficient (per 100k) County property crime rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -3.6e+02 -2.1e+02 -49 1.1e+02 2.6e+02 Event time (years from adoption) Coefficient (per 100k) County burglary rate (per 100,000) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -76 -41 -5 31 66 Event time (years from adoption) Coefficient (per 100k) County motor vehicle theft rate (per 100,000) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -42 -26 -9.8 6.5 23 Event time (years from adoption) Coefficient (per 100k) Whiskers: pointwise 95% CI from cluster-robust SE. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Universal background checks — RDD headline (B = 100 km, FE = pair × year, cluster = state)

OutcomeStratumβ (per 100k) [SE, z]nstate pairs
county_violent_crime_rateprimary+19.038 ** (+8.0% of base)
SE 8.992, z +2.12
31248101
county_murder_rateprimary-0.598 *** (-17.0% of base)
SE 0.154, z -3.89
31248101
county_property_crime_rateprimary+95.908 ** (+6.2% of base)
SE 47.950, z +2.00
31248101
county_burglary_rateprimary+42.441 * (+11.8% of base)
SE 22.583, z +1.88
31248101
county_motor_vehicle_theft_rateprimary-2.726 (-2.4% of base)
SE 9.467, z -0.29
31248101
state_firearm_suicide_ratesecondary-0.259 ** (-3.2% of base)
SE 0.118, z -2.19
29295101
state_total_suicide_ratesecondary-0.440 *** (-3.2% of base)
SE 0.131, z -3.35
29295101
state_nonfirearm_suicide_ratesecondary-0.181 * (-3.1% of base)
SE 0.096, z -1.87
29295101
state_firearm_homicide_ratesecondary+0.057 (+1.4% of base)
SE 0.249, z +0.23
29271101

Event study (primary outcomes only)

Spatial RDD event study (ubc, primary outcomes) County violent crime rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -50 -23 4.2 31 58 Event time (years from adoption) Coefficient (per 100k) County murder rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -2.1 -0.91 0.24 1.4 2.6 Event time (years from adoption) Coefficient (per 100k) County property crime rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.7e+02 -59 56 1.7e+02 2.9e+02 Event time (years from adoption) Coefficient (per 100k) County burglary rate (per 100,000) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -46 -18 9.6 37 65 Event time (years from adoption) Coefficient (per 100k) County motor vehicle theft rate (per 100,000) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -51 30 1.1e+02 1.9e+02 2.7e+02 Event time (years from adoption) Coefficient (per 100k) Whiskers: pointwise 95% CI from cluster-robust SE. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Stand-your-ground (SYG) — RDD headline (B = 100 km, FE = pair × year, cluster = state)

OutcomeStratumβ (per 100k) [SE, z]nstate pairs
county_violent_crime_rateprimary+27.017 *** (+11.4% of base)
SE 8.844, z +3.06
31248101
county_murder_rateprimary-0.954 (-27.2% of base)
SE 0.721, z -1.32
31248101
county_property_crime_rateprimary+38.732 (+2.5% of base)
SE 29.577, z +1.31
31248101
county_burglary_rateprimary-6.520 (-1.8% of base)
SE 10.032, z -0.65
31248101
county_motor_vehicle_theft_rateprimary+8.784 * (+7.7% of base)
SE 4.970, z +1.77
31248101
state_firearm_suicide_ratesecondary+0.594 *** (+7.4% of base)
SE 0.130, z +4.59
29295101
state_total_suicide_ratesecondary+0.479 *** (+3.5% of base)
SE 0.157, z +3.05
29295101
state_nonfirearm_suicide_ratesecondary-0.115 (-2.0% of base)
SE 0.103, z -1.12
29295101
state_firearm_homicide_ratesecondary+0.203 (+4.9% of base)
SE 0.174, z +1.17
29271101

Event study (primary outcomes only)

Spatial RDD event study (stand_your_ground, primary outcomes) County violent crime rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -24 -6.8 10 27 44 Event time (years from adoption) Coefficient (per 100k) County murder rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -18 -13 -7.7 -2.7 2.3 Event time (years from adoption) Coefficient (per 100k) County property crime rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -2.2e+02 -1.4e+02 -53 32 1.2e+02 Event time (years from adoption) Coefficient (per 100k) County burglary rate (per 100,000) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -32 -12 7.4 27 47 Event time (years from adoption) Coefficient (per 100k) County motor vehicle theft rate (per 100,000) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.8e+02 -1.2e+02 -69 -14 40 Event time (years from adoption) Coefficient (per 100k) Whiskers: pointwise 95% CI from cluster-robust SE. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Large-capacity magazine ban — RDD headline (B = 100 km, FE = pair × year, cluster = state)

OutcomeStratumβ (per 100k) [SE, z]nstate pairs
county_violent_crime_rateprimary+9.074 (+3.8% of base)
SE 12.882, z +0.70
31248101
county_murder_rateprimary-1.315 (-37.5% of base)
SE 0.867, z -1.52
31248101
county_property_crime_rateprimary+93.362 ** (+6.0% of base)
SE 46.375, z +2.01
31248101
county_burglary_rateprimary+14.299 (+4.0% of base)
SE 22.276, z +0.64
31248101
county_motor_vehicle_theft_rateprimary+10.347 ** (+9.1% of base)
SE 5.033, z +2.06
31248101
state_firearm_suicide_ratesecondary-0.165 (-2.1% of base)
SE 0.150, z -1.10
29295101
state_total_suicide_ratesecondary+0.171 (+1.2% of base)
SE 0.263, z +0.65
29295101
state_nonfirearm_suicide_ratesecondary+0.336 (+5.7% of base)
SE 0.207, z +1.63
29295101
state_firearm_homicide_ratesecondary+0.229 ** (+5.5% of base)
SE 0.107, z +2.14
29271101

Event study (primary outcomes only)

Spatial RDD event study (magazine_ban, primary outcomes) County violent crime rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.3e+02 -74 -17 39 95 Event time (years from adoption) Coefficient (per 100k) County murder rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -4.6 -2.4 -0.15 2.1 4.3 Event time (years from adoption) Coefficient (per 100k) County property crime rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -4.4e+02 -2.2e+02 1.1 2.2e+02 4.4e+02 Event time (years from adoption) Coefficient (per 100k) County burglary rate (per 100,000) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.1e+02 -59 -8.5 42 92 Event time (years from adoption) Coefficient (per 100k) County motor vehicle theft rate (per 100,000) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -62 -40 -18 3.8 26 Event time (years from adoption) Coefficient (per 100k) Whiskers: pointwise 95% CI from cluster-robust SE. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Minimum age 21 for handgun purchase — RDD headline (B = 100 km, FE = pair × year, cluster = state)

OutcomeStratumβ (per 100k) [SE, z]nstate pairs
county_violent_crime_rateprimary-31.284 (-13.2% of base)
SE 30.205, z -1.04
31248101
county_murder_rateprimary-0.464 (-13.2% of base)
SE 0.343, z -1.35
31248101
county_property_crime_rateprimary-269.022 *** (-17.4% of base)
SE 75.955, z -3.54
31248101
county_burglary_rateprimary-56.515 *** (-15.7% of base)
SE 12.827, z -4.41
31248101
county_motor_vehicle_theft_rateprimary-23.558 *** (-20.8% of base)
SE 5.909, z -3.99
31248101
state_firearm_suicide_ratesecondary-0.189 (-2.4% of base)
SE 0.236, z -0.80
29295101
state_total_suicide_ratesecondary-0.011 (-0.1% of base)
SE 0.590, z -0.02
29295101
state_nonfirearm_suicide_ratesecondary+0.178 (+3.0% of base)
SE 0.365, z +0.49
29295101
state_firearm_homicide_ratesecondary-0.820 * (-19.8% of base)
SE 0.421, z -1.95
29271101

Event study (primary outcomes only)

Spatial RDD event study (age21_handgun, primary outcomes) County violent crime rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1e+02 -59 -17 24 65 Event time (years from adoption) Coefficient (per 100k) County murder rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -2.4 -1.1 0.26 1.6 2.9 Event time (years from adoption) Coefficient (per 100k) County property crime rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -8.5e+02 -5.4e+02 -2.4e+02 70 3.8e+02 Event time (years from adoption) Coefficient (per 100k) County burglary rate (per 100,000) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.1e+02 -54 0.022 54 1.1e+02 Event time (years from adoption) Coefficient (per 100k) County motor vehicle theft rate (per 100,000) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -40 -22 -2.9 16 34 Event time (years from adoption) Coefficient (per 100k) Whiskers: pointwise 95% CI from cluster-robust SE. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

Assault weapons ban — RDD headline (B = 100 km, FE = pair × year, cluster = state)

OutcomeStratumβ (per 100k) [SE, z]nstate pairs
county_violent_crime_rateprimary-15.629 (-6.6% of base)
SE 10.746, z -1.45
31248101
county_murder_rateprimary-2.190 ** (-62.4% of base)
SE 0.961, z -2.28
31248101
county_property_crime_rateprimary+7.473 (+0.5% of base)
SE 74.992, z +0.10
31248101
county_burglary_rateprimary+21.806 (+6.1% of base)
SE 26.778, z +0.81
31248101
county_motor_vehicle_theft_rateprimary+11.118 * (+9.8% of base)
SE 6.195, z +1.79
31248101
state_firearm_suicide_ratesecondary-0.661 *** (-8.2% of base)
SE 0.137, z -4.82
29295101
state_total_suicide_ratesecondary-0.474 (-3.4% of base)
SE 0.352, z -1.35
29295101
state_nonfirearm_suicide_ratesecondary+0.187 (+3.2% of base)
SE 0.244, z +0.76
29295101
state_firearm_homicide_ratesecondary+0.544 *** (+13.1% of base)
SE 0.185, z +2.94
29271101

Event study (primary outcomes only)

Spatial RDD event study (assault_weapons_ban, primary outcomes) County violent crime rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -1.4e+02 -93 -45 2.6 50 Event time (years from adoption) Coefficient (per 100k) County murder rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -5.4 -3.7 -2 -0.34 1.4 Event time (years from adoption) Coefficient (per 100k) County property crime rate (per 100,000) -5 -4 -3 -2 -1 0 1 2 3 4 5 -4.5e+02 -2.7e+02 -98 77 2.5e+02 Event time (years from adoption) Coefficient (per 100k) County burglary rate (per 100,000) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -99 -47 4.9 57 1.1e+02 Event time (years from adoption) Coefficient (per 100k) County motor vehicle theft rate (per 100,000) [placebo] -5 -4 -3 -2 -1 0 1 2 3 4 5 -65 -42 -18 4.6 28 Event time (years from adoption) Coefficient (per 100k) Whiskers: pointwise 95% CI from cluster-robust SE. Solid dot = significant at 5%; hollow dot = not significant. Vertical dashed line marks the year before adoption.

12. County-level Callaway-Sant’Anna ATT(g, t)

A county-grain adaptation of the existing state-level Callaway-Sant'Anna pipeline. Unit of observation is county_fips; cohorts are constructed by state (since treatment is state-level law adoption); the cluster-bootstrap clusters at state because counties within a state share the policy assignment. Many counties per cohort = much tighter SEs than the state-level pipeline. Outcomes are the true county-level Kaplan UCR rates plus the state-joined-down mortality variables (the latter, again, identified at state grain — included only for cross-method consistency). Estimator: scripts/lib_cs_county.py.

Permitless carry — county CS21 headline (RA / broad)

OutcomeATT post (per 100k) [SE, z]Pre-trend avg (z)n post cells
county_burglary_rate-4.012 (-1.1% of base)
SE 2.865, z -1.40
+4.563 (z=+1.59)43
county_motor_vehicle_theft_rate-6.967 *** (-6.1% of base)
SE 1.760, z -3.96
-7.113 (z=-2.80)43
county_murder_rate-0.287 ** (-8.2% of base)
SE 0.114, z -2.51
-0.674 (z=-2.23)43
county_property_crime_rate+6.846 (+0.4% of base)
SE 8.941, z +0.77
+22.956 (z=+1.89)43
county_violent_crime_rate-10.826 *** (-4.6% of base)
SE 2.031, z -5.33
-2.542 (z=-0.89)43
state_firearm_homicide_rate+0.132 ** (+3.2% of base)
SE 0.067, z +1.97
-0.180 (z=-4.25)35
state_firearm_suicide_rate+0.503 *** (+6.3% of base)
SE 0.037, z +13.49
-0.123 (z=-2.92)35
state_total_suicide_rate+0.418 *** (+3.0% of base)
SE 0.051, z +8.16
-0.299 (z=-5.50)35

Civil-petition red-flag (ERPO) — county CS21 headline (RA / broad)

OutcomeATT post (per 100k) [SE, z]Pre-trend avg (z)n post cells
county_burglary_rate+18.557 *** (+5.2% of base)
SE 3.778, z +4.91
-18.558 (z=-9.64)30
county_motor_vehicle_theft_rate+0.828 (+0.7% of base)
SE 2.898, z +0.29
-1.927 (z=-1.11)30
county_murder_rate-0.587 *** (-16.7% of base)
SE 0.065, z -9.06
+1.505 (z=+2.83)30
county_property_crime_rate+64.431 *** (+4.2% of base)
SE 18.625, z +3.46
-57.723 (z=-5.36)30
county_violent_crime_rate-11.739 *** (-4.9% of base)
SE 3.176, z -3.70
-4.047 (z=-1.66)30
state_firearm_homicide_rate-0.572 *** (-13.8% of base)
SE 0.066, z -8.63
+0.290 (z=+5.71)24
state_firearm_suicide_rate-0.226 *** (-2.8% of base)
SE 0.034, z -6.66
+0.306 (z=+8.35)24
state_total_suicide_rate-0.140 *** (-1.0% of base)
SE 0.046, z -3.05
+0.239 (z=+4.83)24

Universal background checks — county CS21 headline (RA / broad)

OutcomeATT post (per 100k) [SE, z]Pre-trend avg (z)n post cells
county_burglary_rate-5.807 *** (-1.6% of base)
SE 1.261, z -4.61
-35.416 (z=-18.45)51
county_motor_vehicle_theft_rate+11.461 *** (+10.1% of base)
SE 0.697, z +16.44
+26.614 (z=+45.91)51
county_murder_rate-1.037 *** (-29.6% of base)
SE 0.062, z -16.64
-0.706 (z=-8.96)51
county_property_crime_rate+39.852 *** (+2.6% of base)
SE 5.400, z +7.38
-78.174 (z=-13.20)51
county_violent_crime_rate-12.095 *** (-5.1% of base)
SE 1.221, z -9.91
-23.021 (z=-15.50)51
state_firearm_homicide_rate-0.401 *** (-9.7% of base)
SE 0.024, z -16.92
-0.075 (z=-5.10)44
state_firearm_suicide_rate-0.236 *** (-3.0% of base)
SE 0.017, z -13.80
+0.070 (z=+3.45)44
state_total_suicide_rate-0.449 *** (-3.2% of base)
SE 0.032, z -14.17
+0.070 (z=+2.20)44

Cross-method check: the county-grain CS21 should produce point estimates that broadly agree with the state-level CS21 once weighted to comparable population. Where signs disagree, that is informative — it suggests the effect is concentrated in particular counties rather than uniform across the adopting state.

13. Cross-policy synthesis

Across three policies × two estimators × multiple specifications, two findings are robust enough to be the lede of a paper:

  1. Permitless carry adoption raises total suicide by about 0.6 per 100,000. Direction agrees in both estimators; magnitude in (+0.5, +0.7); substitution test passes; Roth-SA bounds at M = 1 survive in CS21 RA specs. The MVT placebo fails so this isn't a pure causal claim, but the substitution-test pattern is hard to explain by trend-gap confounding alone.
  2. Civil-petition red-flag laws reduce firearm homicide. Direction agrees in both estimators; magnitude is uncertain (CS21 broad/RA −0.14; stacked-DiD spans −0.50 to −0.73; EB pushes to −2.13 but is fragile); pre-trend test does not reject in the cleanest CS21 spec (z = −0.58); placebo CIs from stacked-DiD include zero (much milder placebo failure than CS21).

The other six "headline" cells (red-flag suicide, UBC suicide, UBC homicide, permitless-carry homicide, all of which were significant in some specifications) do not survive the joint set of robustness checks documented in this report. That is itself a finding — most published single-estimator results on these questions probably overstate what the data identify.

14. Limitations and caveats

15. Appendix: code map and reproduction

ComponentScriptOutput
Shared CS21 machineryscripts/cs_lib.py
Shared stacked-DiD machineryscripts/lib_stacked_dd.py
Permitless carry: CS21scripts/run_cs_permitless_carry.pyoutputs/permitless_carry_cs/
Permitless carry: stacked DiDscripts/run_stacked_dd.pyoutputs/permitless_carry_stackdd/
Red-flag: CS21scripts/run_cs_red_flag.pyoutputs/red_flag_cs/
Red-flag: stacked DiDscripts/run_stacked_dd.pyoutputs/red_flag_stackdd/
UBC: CS21scripts/run_cs_ubc.pyoutputs/ubc_cs/
UBC: stacked DiDscripts/run_stacked_dd.pyoutputs/ubc_stackdd/
Synthetic control (TX 2021, FL 2023)scripts/run_scm_permitless_carry.pyoutputs/permitless_carry_scm/
Roth-Sant'Anna boundsscripts/run_roth_sa_bounds.pyoutputs/roth_sa_bounds/
This reportscripts/build_research_report.pyoutputs/research_report/index.html

To reproduce the entire research portion of the project from scratch:

# Build state panels first (see data_appendix.md and the README for upstream
# raw-input requirements):
python scripts/build_firearms_panel.py
python scripts/audit_panels.py
python scripts/augment_panels.py

# Run all three CS21 analyses:
python scripts/run_cs_permitless_carry.py
python scripts/run_cs_red_flag.py
python scripts/run_cs_ubc.py

# Run the synthetic-control case studies:
python scripts/run_scm_permitless_carry.py

# Run the parallel stacked-DiD implementation across all three policies:
python scripts/run_stacked_dd.py

# Run Roth-Sant'Anna pre-trend bounds for both estimators:
python scripts/run_roth_sa_bounds.py

# Build this report:
python scripts/build_research_report.py

Print this page to PDF: in any modern browser, File → Print → Save as PDF. The print stylesheet at the top of this document handles page breaks and font sizing appropriately for letter-paper output.