Some Stronger Evidence that the Affordable Care Act Worsened the Opioid Crisis

Over the last few posts, I’ve offered a few hypotheses regarding how full Affordable Care Act implementation in states that accepted the Medicaid expansion may have contributed to rising opioid overdose rates. But this is perhaps ancillary to the questions of did the Affordable Care Act contribute to the opioid crisis. I think the answer is yes.

In this post, I’ll offer some somewhat stronger evidence that counties in states that accepted the Medicaid expansion had faster rises in overdose rates since 2010 than states in holdout states, or than you would expect from the characteristics of those counties in 2010. That is, it’s not just that counties in “blue” Medicaid expansion states are different in some fundamental way that would have pushed opioid abuse higher in these states in the absence of the Affordable Care Act, relative to counties in “red” holdout states. It’s not just correlational. Instead, we can find a group of counties that are quite closely comparable to each other across the red/blue divide, and find that there was a dramatic divergence that is not explained by the characteristics of these counties at baseline, in 2010.

To do this, let’s start with the group of 427 counties in the Medicaid expansion states and 289 counties in the holdouts for which drug-related death rates are available from CDC Wonder in both 2010 and 2015. Comparing these, we see that the unweighted average increase in Medicaid expansion states was 6.5 per 100,000 and the unweighted average increase in holdout states was 2 per 100,000- counties in Medicaid expansion states increased their overdose rate by 4.5 per 100,000 more than counties in holdout states.


Now let’s examine the demographic characteristics of these counties. Were the “blue” Medicaid expansion counties very different in 2010 from the “red” holdout counties? Using the 2010 1-year-estimates from Census’s American Community Survey, here are the average values for several demographic variables in the Medicaid expansion and holdout counties:

  Medicaid Expansion States Holdout States
Variable Obs Mean Std.Dev. Obs Mean Std.Dev.
Rate of Supplementary Security Income Receipt in 2010 530 5.183 2.272 419 4.752 2.243
White Employment Rate in 2010 530 57.71 6.142 419 57.40 7.030
County Population in 2010 530 330963 627137 419 232262 347308
Overall employment rate in 2010 530 56.94 6.328 419 56.69 7.007
County Percent White in 2010 498 80.24 14.95 386 78.37 15.03
Overall Median Income in 2010 530 51784 13656 419 48591 12423
Median White Income in 2010 530 55853 14554 419 53278 13145
Overdose Rate per 100,000 in 2010 (from CDC Wonder) 467 19.54 15.07 337 17.65 9.003


I didn’t choose these variables arbitrarily. Instead, they are county characteristics that are closely associated with overdose rates at baseline. Here, for example, is a county-level regression of the 2010 overdose rate on these ACS variables:


VARIABLES 2010 Overdose Rate per 100,000
Median White Income in 2010 (in thousands) -0.249***
Overall Median Income in 2010 (in thousands) 0.191***
Percent of 16 year olds and over employed. -0.469***
Percent of County White 0.0696***
White Employment Rate 0.200
Rate of SSI Receipt 0.481***
Constant 26.35***
Observations 632
R-squared 0.265

Standard errors in parentheses

*** p<0.01, ** p<0.05, * p<0.1


Another way of looking at this is that if we took these sociodemographic variables from the 2010 ACS as a group, we could predict the 2010 overdose rate pretty well, and still better if we use the logs of variables:


These 2010 characteristics of counties, along with the 2010 overdose rate, are also associated pretty closely with the 2015 overdose rate:


But if we divide these into Medicaid expansion and holdout counties, we can see the “blue” counties are more likely to have had higher than expected 2015 overdose rates, based on their sociodemographic characteristics and on their 2010 overdose rate, and the “red” counties are more likely to have had lower than expected 2015 overdose rates.


It looks as though there are more blue dots above the line (higher 2015 overdose rates than you would predict from their 2010 characteristics and overdose rates) and more red dots below the line (lower 2015 overdose rates than you would predict from their 2010 characteristics and overdose rates.)

We can average that comparison up- how much the overall regression misses the mark for Medicaid expansion states versus holdouts:

Percent Error

The actual 2015 overdose rates of counties in Medicaid holdout states were around 20 percent higher than counties in holdout states, when you adjusted for their 2010 characteristics. (The difference in logs is approximately equal to the percent difference.)

We can also just look at this as Ordinary Least Squares regression coefficients instead of graphically:

(1) (2) (3) (4)
VARIABLES Overdose Rate 2015 Overdose Rate 2015 Overdose Rate 2015 Overdose Rate 2015
Overdose Rate 2010 0.861*** 0.847***
(0.0888) (0.102)
County in Medicaid Expansion State? 5.753** 4.765*** 4.501***
(2.392) (1.399) (1.308)
Population in 2010 (in 100,000s) -0.93***
White Income in 2010 ($1000s) 0.0279
Median Income in 2010 ($1000s) -0.0541
Percent White in 2010 0.0416
Rate of SSI Receipt in 2010 0.525
Propensity Score Matching Estimate 5.839***
Constant 19.20*** 4.272** 0.430
(1.532) (1.661) (5.893)
Observations 914 716 613 613
R-squared 0.048 0.596 0.551

Robust standard errors in parentheses. Standard Errors adjust for Clustering at State Level

*** p<0.01, ** p<0.05, * p<0.1


There are large and statistically significant differences in county-level overdose rates between Medicaid expansion states and holdout states, even after adjusting for the characteristics of these counties as well as the 2010 overdose rates, and clustering standard errors at the state level.

(As the immortal haiku by Keisuke Hirano goes:

T-stat looks too good.
Use clustered standard errors.
Significance gone.

But not this time!)

You can download the cleaned OLS sample of counties here. ols-sample

You’ll also note the line marked “Propensity Score Matching Estimate.” The details of propensity score matching are complicated (and I’d screw it up worse than Wikipedia if I tried to explain it), but the basic idea is that rather than just “controlling” for differences between the two groups of counties, you match individual counties in the Medicaid Expansion states with individual counties in the Holdout states, based on their baseline characteristics. This gives you a smaller sample of counties that are much more comparable to each other. (You can download the Matched Comparison Dataset matchedcomparisonsample1.) So whereas before matching, we had a little over 600 counties with both our American Community Survey variables and our 2010 and 2015 overdose variables, after matching, we have 260 Medicaid expansion counties matched to 260 holdout counties:


Group Before matching After matching
Medicaid Expansion Counties 372 260
Holdout state counties 260 260


Here’s a graphic that shows what the matching algorithm does: after matching, the two samples are more similar in the matching characteristics- the dark blue dots below– than they were before matching– the light blue dots below. (This shows difference in “effect size” units: a difference of less than 0.05 standard deviations is considered very small.)


The propensity score matching algorithm then compares the Medicaid expansion to the holdout counties. You’ll notice from above that the propensity score matched estimate is even larger, about 6 per 100,000, than the Ordinary Least Squares estimate. I think we can take that as saying that if we only look at the subset of counties that are more directly comparable, the difference between what you see in the Medicaid expansion counties and in the holdout counties is even larger.


As Gabriel Rossman previously observed, a significant portion of the jump happened between 2010 and 2013: was this ACA expansion states “rushing” to sign people up before the Medicaid expansion and the exchanges went into effect, or was this partially the result of the extension of employer-provided coverage to under-26-year-olds? In any case, it’s worth noting that the estimated effect of Medicaid expansion is still about 60% as large, even if you control for the 2013 overdose rate:

VARIABLES OLS Estimate (only rates as controls) OLS Estimate (using 2010 ACS county characteristics) Propensity Score Estimate
Drug Related Death Rate in 0.315*** 0.202***
(0.0928) (0.0663)
medicaidexpansion 2.877*** 2.043**
(0.931) (0.837)
Population in 2010 -8.97e-08
White Income in 2010 -0.00687
Median Income in 2010 -0.000294
Percent White in 2010 0.0333
SSI Receipt in 2010 0.00207
Drug Related Death Rate in 2013 0.765*** 0.880***
(0.0541) (0.0746)
Propensity Score Match Estimate of Medicaid Expansion 2.984***
Constant 0.692 -1.246
(1.136) (3.848)
Observations 676 596 596
R-squared 0.719 0.607

Robust standard errors in parentheses. Standard Errors adjust for clustering at the state level.

*** p<0.01, ** p<0.05, * p<0.1

This doesn’t “prove” that it was the Affordable Care Act that caused this jump upwards in overdose rates in counties in “blue” Medicaid expansion states. As I’ve said before, I don’t think it was purely the Medicaid expansion itself that did it- more the full-court press to enroll young people in these states, with the knock-on effect of a subset of young people realizing they could use their insurance for pills (whether to resell or to use themselves.)  Nor, needless to say, does this mean that the Affordable Care Act was a “bad idea”- it just means there are costs and benefits to the policy, and some of the biggest costs were those not scoped out in advance.

Even so, however, I do believe that it was insurance-not some unobserved corollary of having a more liberal state government in 2010-2012- that brought this about: again, the percent of white uninsured by 2015 is a great predictor of where overdose rates rose from 2010 to 2015, with places with fewer white residents uninsured also where overdose rates rose the fastest:



Within the ACA states, too, the counties that decreased the percentage of uninsured the most were the ones that had the largest increases in overdose rates.

decreaseversus2015expansiononly (1)

So this is reasonably strong evidence that something went wrong, and also that, even if the majority of overdoses are now from heroin and fentanyl, prescriptions for opiates still need to be looked at very carefully- and pushing comprehensive insurance on a population potentially prone to risky behavior is more dangerous than policymakers wanted to think.

And it’s a reminder, of course, that public policy, like Janus, always has two faces.



I don’t have the best practice for Stata coding, but I’m including my Stata code below. I renamed some of the ACS variables and datasets before importing them, because the ACS variable naming conventions are a pain to work with. In any case, I’m putting all the files for the county-level impact analysis- both clean and raw, and a few things I didn’t include above- in this zip folder MedicaidDrugAnalysisAllFiles.



set more off


*County-level analysis of Drug use and Medicaid Expansion- Spotted Toad 03/27/2017

capture log using ACAdrugs.log, replace

*Generate the dataset with overdose rates from CDC Wonder

gen year=.

save drugs20102015.dta, replace

disp 2010

insheet using drugs2010.txt, clear

append using drugs20102015.dta, force

recode year .=2010

save drugs20102015, replace

disp 2015

insheet using drugs2015.txt, clear

append using drugs20102015.dta, force

recode year .=2015

drop if county==””


*Turn it into a Panel dataset

reshape wide notes countycode deaths population cruderate , i(county) j(year)

gen stateabb=substr(county,-2,2)

save drugs20102015, replace



*Get the list of Medicaid holdouts

insheet using medicaidholdouts.txt, clear

ren v1 stateabb

save medicaidholdouts.dta, replace

use medicaidholdouts, clear

merge 1:m stateabb using drugs20102015

ren _merge medicaidexpansion

recode medicaidexpansion 2=1 3=0

gen medstatus=”Holdouts”

replace medstatus=”Medicaid Expansion” if medicaidexpansion==1

save drugs20102015wide, replace

*Generate the Overdose rates

gen rate2010=deaths2010/population2010*100000

gen rate2015=deaths2015/population2015*100000

gen ratechange=rate2015-rate2010

rename countycode2010 countycode


graph bar (mean) ratechange, over(medicaidexp,relabel(1 “Holdout States” 2 “Medicaid Expansion”)) ytitle(Change from 2010 to 2015 in OD Rate per 100000) title(Average County-Level Change in OD Rates)


graph save countyaverage, replace

graph export countyaverage.png, replace

*Start importing the American Community Survey variables, first Median Income and white non-Hispanic income

insheet using medianincome2010.csv, clear

save medianincome2010, replace

rename id2 countycode

merge m:m countycode using drugs20102015wide, gen(m4)

rename medianincomedollarsestimatehouse medianincome

rename medianincomedollarsestimatewhite whiteincome

drop v*

drop total*

save drugsmedian, replace

*Now Percent of 18-24 year olds with bachelors degrees- this turned out not to be a good predictor

insheet using bachelors.csv, clear

rename totalestimatebach bachelors


save bachelors2010, replace

rename id2 countycode

merge m:m countycode using drugsmedian, gen(m5)

save drugsmedianeduc, replace

*Now Percent of County with Race White

insheet using percentwhite.csv, clear

save percentwhite, replace

rename id2 countycode

merge m:m countycode using drugsmedianeduc, gen(m6)

save drugsmedianeducwhite, replace

*Now Percent of County 16 and over Employed

insheet using employed16andover.csv, clear

save employed16andover, replace

rename id2 countycode

merge m:m countycode using drugsmedianeducwhite, gen(m7)

save drugsmedianeducwhite, replace

*Now Population of County – I wanted to use the ACS values rather than CDC’s values for the ACS based regression

insheet using acspop2010.csv, clear

save acspop2010, replace

rename id2 countycode

merge m:m countycode using drugsmedianeducwhite, gen(m8)

save drugsmedianeducwhite, replace

*Now White employment rate 16 and over- also didn’t use this since it wasn’t a good predictor and I didn’t want to overwhelm the matching algorithm

insheet using whiteemploymentrate.csv, clear

save whiteemploymentrate, replace

rename id2 countycode

merge m:m countycode using drugsmedianeducwhite, gen(m9)

save drugsmedianeducwhite, replace

*Now SSI rate- from Quinones’s book we knew that qualifying for SSI was frequently used to get Medicaid which you could use to get opiates.

insheet using ssirate.csv, clear

save ssirate, replace

rename id2 countycode

keep countycode ssirate

merge m:m countycode using drugsmedianeducwhite, gen(m10)

save fullsample, replace

gen treatment=1 if medicaidexp==1

replace treatment=0 if medicaidexp==0

*Put income in $1000s

replace medianincome=medianincome/1000

replace whiteincome=whiteincome/1000

*Simplify the dataset

keep bachelors treatment acspop2010 county countycode stateabb whiteemploymentrate ssirate rate2015 rate2010 ratechange medianincome percentwhite employed16 whiteincome population2010 deaths2010 population2015 deaths2015 medicaidexpansion

save OLSsample, replace

export delimited using formatching.csv, replace

*Baseline regression- how well do these variables predict the 2010 Overdose Rate?

reg  rate2010 whiteincome medianincome employed percentwhite  ssirate

outreg2 using baselineregression.doc, replace


predict baselineprediction

twoway (scatter rate2010 baselineprediction) (lfit rate2010 baselineprediction), ytitle (2010 Drug-related Crude Death Rate per 100000)

graph export baselineprediction.png, replace

*Summarizing Characteristics by Medicaid and holdout counties


drop if medicaidexp==0

*Keeping Medicaid expansion states

logout, save(summarystatsMedicaid) excel word replace: sum



drop if medicaidexp==1

*Keeping Holdout states

logout, save(summarystatsHoldouts) excel word replace: sum


*Now our OLS estimates

reg rate2015 medicaidexpansion, vce(cluster stateabb)

outreg2 using medicaidexpansionopiates.doc, replace

reg rate2015 medicaidexpansion rate2010,vce(cluster stateabb)

outreg2 using medicaidexpansionopiates.doc, append

reg rate2015  rate2010  population2010 whiteincome medianincome percentwhite ssirate, vce(cluster stateabb)

predict predicted

reg rate2015  rate2010  medicaidexpansion population2010 whiteincome medianincome percentwhite ssirate [aw=population2015], vce(cluster stateabb)


outreg2 using medicaidexpansionopiates.doc, append


*Now the propensity score matching estimate

teffects psmatch (rate2015) (treatment rate2010 whiteincome medianincome employed percentwhite ssirate), atet

outreg2 using medicaidexpansionopiates.doc, append

*More Graphs below

reg rate2010 whiteincome medianincome employed percentwhite whiteemploymentrate ssirate

predict predicted2

twoway (scatter rate2010 predicted) (lfit rate2010 predicted), ytitle(Rate per 100000 Drug-Related Deaths in 2010) xtitle(Predicted Death Rate from Sociodemographic Variables)

*Generating the Log-based graphs for 2010

gen lograte2010=log(rate2010)

gen logmedian=log(medianincome)

gen logwhiteincome=log(whiteincome)

gen logssi=log(ssirate)

reg lograte2010 logwhiteincome logmedian employed percentwhite whiteemploymentrate logssi

predict predictlog2010

twoway (scatter lograte2010 predictlog2010) (lfit lograte2010 predictlog2010),ytitle (Log of Rate per 100000 Drug-Related Deaths in 2010) xtitle(Predicted Log of Death Rate from Sociodemographic Variables)

graph export predictlograte2010.png, replace

*Generating the Log-based graphs for 2015


gen lograte2015=log(rate2015)

reg lograte2015 lograte2010 predictlog2010, nocons

predict predictlog2015

twoway (scatter lograte2015 predictlog2015) (lfit lograte2015 predictlog2015),ytitle(Log Rate/100000 2015 County-Level Overdoses, size(vsmall)) xtitle(Predicted Log 2015 Death Rate from 2010 Sociodemographic Variables Overdose Rate,size(vsmall)) title(Predicted 2015 Log Death Rate versus Actual)

graph export predictlograte2015.png, replace

gen exp2015=rate2015 if medicaidexp

gen logexp2015=log(exp2015)

gen noexp2015=rate2015 if medicaidexp==0

gen lognoexp2015=log(noexp2015)

twoway (scatter logexp2015 predictlog2015) (scatter lognoexp2015 predictlog2015)(lfit lograte2015 predictlog2015),ytitle(Log Rate/100000 2015 County-Level Overdoses, size(vsmall)) xtitle(Predicted Log 2015 Death Rate from 2010 Sociodemographic Variables Overdose Rate,size(vsmall)) title(Predicted 2015 Log Death Rate versus Actual)

*Generating the log/percent impact graph

gen error=lograte2015-predictlog2015

replace error=error*100MedicaidDrugAnalysisAllFiles

graph bar (mean) error, over(medicaidexp,relabel(1 “Holdouts” 2 “Medicaid expansion”)) ytitle(Relative Percent Error of Prediction from 2010 Characteristics, size(small)) title(OLS Impact Estimate)

graph export error.png, replace

*have a nice day


20 thoughts on “Some Stronger Evidence that the Affordable Care Act Worsened the Opioid Crisis

  1. The KFF has some data on “Trends in Medicaid Income Eligibility Limits” and Medicaid-to-Medicare doctor fee ratios. You can use that to see if the various Democratic Party / blue states were expanding eligibility for Medicaid prior to the PPACA being passed. Many states that widened Medicaid eligibility prior to the PPACA made up for it by shrinking Medicaid physician reimbursement relative to Medicare (thus causing doctors to reject.) They had to in order to expand eligibility, due to the federal formula.


  2. it’s almost as if counties and states could make a decision whether or not to sign up for the Medicaid expansion, and in some cases partisan actors went against party lines because the situations in their states and/or counties were particularly dire.

    This strikes me as analogous (though not as obvious as) a study finding surgeons who do more risky surguries have higher mortality rates. That is, you can’t discard the effect of a sample selection bias, because the policy being tested in not in fact exogenous to the model.


    1. But in 2010, the overdose rates were similar overall between these states, and essentially identical for the matched comparison subsample. Moreover, the Medicaid expansion states had slightly higher incomes and employment rates. I agree that you might be interested in pre-2010 trends in economic variables (so maybe introducing 2005 controls or 2005-2010 trend indicators as well might help?) but given that there seems to be a significant acceleration just since 2013 in the expansion states it seems unlikely that (unless you completely overfit the model) it makes the effect evaporate. At the very least, would you agree that the surgeons we hired didn’t do a whole lot of good for their patients?


    1. Yeah, there’s always the likelihood of unobserved variation causing this divergence, but given that it’s unobserved, we have to go with what we’ve got. What are the particular variables that you’d like to see that would help you believe there really was an effect?


      1. I don’t have anything definitive in mind at the moment as it takes time to dig through the data, but the fact that the trend starts before the change suggest something other than a direct causal relation.

        Perhaps the presence of certain demographic groups and circumstances that favor more liberal policies alongside communities with economic hardship. E.g. industrial and tech centers which favor more liberal policies and perhaps provide more means of distribution of drugs or more willingness to declare a death an overdose instead of some other cause such as suicide or alcohol.

        Also are there regional variations in how deaths are recorded and reported and censored in the data. I took a quick look and saw Wonder censored many data points due to fewer than 5 deaths. That would cause exclusion of less populated counties. Are some opiate deaths recorded in other categories and is that subject to regional and cultural variations?


      2. Generally speaking, those censored counties should appear in the state-level estimates. My sense is that the CDC does a very good job tracking mortality even in small and rural counties. I would like to look at opiates specifically (rather than overdoses in general), though my sense is that that data isn’t as consistently available. I did discuss the liberal/conservative question a little here ( ); even if you don’t buy that marriage itself is driving anything, it should be a good enough proxy for political/socially liberal tendencies that if that were the real story, it should make the effect of Medicaid expansion go away. Note that in some of the graphs I post in the newer piece, the divergence among white women appears to be more specifically in 2014. (Among black women, the overdoses appear to also differ between Medicaid and non-Medicaid counties prior to 2010, but because they are smaller cells with more stochastic variation and which are much more often censored, and less likely to be opiates/more likely to be other drugs, I’m not sure what to make of it.


      3. Good points. One detail: the CDC collects the information; local medical people record the deaths and their causes. For example, my mom and my father inlaw both passed away in their homes . No government officials were involved . My mom’s cause of death was put in the certificate by her physician.

        An example of confounding effects: one study shows that Medicaid saves lives; however the result is almost entirely determined by the experiences of New York and Pennsylvania and the breakpoint occurs around the time new AIDS drugs were introduced.

        Another example: a study claims plastic bag bans cause gastrointestinal illnesses, however a deeper dive shoes the additional deaths are due to an illness that is not food borne, but associated with nursing homes.

        Liked by 1 person

    2. Here is an example of one of the problems with this type of data, an article describing how opiod death rates may be underestimated and giving an example of how a overdosages may end up as other causes.

      It is possible that how well regions track the increasing opiod death rates is correlated with their willingness to extend Medicaid. Such a correlation would account for the fact that the opiod death rate increase differential leads the Medicaid expansion instead of lagging it.


      1. It’s an interesting possibility, although this is “Drug-related deaths” in general- mostly but not entirely opioids. I can concede that diagnosing as heart failure versus overdose might be a bigger issue in some places than others, though i think given the size of the problem nationwide in the last ten years, i have trouble believing coroners in 2011-2015 weren’t identifying overdoses correctly.


  3. Scattering population percentage change on overdose rate change – strongly positive rate changes were associated with stagnant counties. Growing counties did not increase overdoses as strongly. And, by treatment, population percent changes were much greater in the untreated sample. This plus the very incomplete data, causes wierdness


    1. Sorry, you’re saying- a) overdose increases in population stagnant counties (and not just for the mechanical reason that mortality reduces population), b) Holdout states grew more in population? I think I did this with a control for pop2015 as well as pop2010 (as currently) and it didn’t affect it much, though I’m reluctant in general to introduce too many controls for intermediate outcomes observed after the onset of treatment. Good points, though.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s