medicaid

State-level panel of adult uninsurance rates from the American Community Survey, paired with the year each state adopted the ACA Medicaid expansion. It is the headline empirical example in the working paper: 51 states (including DC) observed annually from 2008 to 2021, with adoption staggered across 2014–2020 and twelve states never adopting. Because treatment turns on in different years for different states, it is a canonical staggered-adoption design — the setting the stacked estimator is built for.

Codebook

Variable Type Description
state character Two-letter state abbreviation
statefip integer State FIPS code
year integer Calendar year (2008–2021)
adopt_year integer Year the state adopted Medicaid expansion (NA if never adopted)
uninsured numeric Fraction of adults ages 18–60 without health insurance

Adoption timing: 2014 (25 states), 2015 (AK, IN, PA), 2016 (LA, MT), 2019 (ID, ME, NE, VA), 2020 (MO, OK), and 12 states not adopted by 2021.

Source and citation

American Community Survey via IPUMS USA (https://usa.ipums.org/).

Steven Ruggles, Sarah Flood, Matthew Sobek, Daniel Backman, Annie Chen, Grace Cooper, Stephanie Richards, Renae Rodgers, and Megan Schouweiler. IPUMS USA: Version 15.0. Minneapolis, MN: IPUMS, 2024. doi:10.18128/D010.V15.0

Method reference: Wing, C., Freedman, S., & Hollingsworth, A. (2024). Stacked Difference-in-Differences. Working paper.

The data

library(stacked)
data(medicaid, package = "stacked")
head(medicaid)
   state statefip year adopt_year uninsured
1:    AL        1 2008         NA 0.1964095
2:    AL        1 2009         NA 0.2141095
3:    AL        1 2010         NA 0.2300015
4:    AL        1 2011         NA 0.2250678
5:    AL        1 2012         NA 0.2159348
6:    AL        1 2013         NA 0.2218695
dim(medicaid)
[1] 714   5

Preview

source("../assets/style-web.R")

d <- copy(medicaid)
d[, cohort := fifelse(is.na(adopt_year), "Never adopted",
               fifelse(adopt_year == 2014L, "Adopted 2014", "Adopted later"))]
agg <- d[cohort != "Adopted later",
         .(uninsured = mean(uninsured)), by = .(year, cohort)]

p_preview <- ggplot(agg, aes(year, uninsured, color = cohort, fill = cohort, shape = cohort)) +
  geom_vline(xintercept = 2014, linetype = "dashed", color = "grey70") +
  geom_line(linewidth = 0.7) +
  geom_point(size = pt_size, stroke = pt_stroke, color = border_color) +
  scale_color_manual(values = c("Adopted 2014" = highlight_color,
                                "Never adopted" = grey_line)) +
  scale_fill_manual(values  = c("Adopted 2014" = highlight_color,
                                "Never adopted" = grey_fill)) +
  scale_shape_manual(values = c("Adopted 2014" = shp_primary,
                                "Never adopted" = shp_grey)) +
  labs(title = "Adult uninsurance by expansion cohort",
       subtitle = "Share of adults 18–60 uninsured; dashed line marks the 2014 expansion",
       x = "Year") +
  base_theme

Download

Load it

data(medicaid, package = "stacked")
stacked use medicaid, clear