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 404 counties in the Medicaid expansion states and 312 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.6 per 100,000 and the unweighted average increase in holdout states was 2.3 per 100,000- counties in Medicaid expansion states increased their overdose rate by 4.3 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 509 5.102 2.247 440 4.866 2.289 White Employment Rate in 2010 509 57.66 6.219 440 57.48 6.913 County Population in 2010 509 336746 638948 440 230283 339798 Overall employment rate in 2010 509 56.91 6.409 440 56.73 6.891 County Percent White in 2010 478 80.61 14.72 406 78.03 15.23 Overall Median Income in 2010 509 8.493 5.288 440 7.350 4.710 Median White Income in 2010 509 52.06 13.79 440 48.42 12.24 Overdose Rate per 100,000 in 2010 (from CDC Wonder) 441 50.20 74.60 363 34.78 46.97

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:

(1) VARIABLES 2010 Overdose Rate per 100,000 Median White Income in 2010 (in thousands) -0.224*** (0.0614) Overall Median Income in 2010 (in thousands) 0.161** (0.0651) Percent of 16 year olds and over employed. -0.262*** (0.0529) Percent of County White 0.0688*** (0.0219) White Employment Rate 0.507*** (0.144) Rate of SSI Receipt 26.20*** (3.461) Constant 632 0.263 Observations 632 R-squared 0.263

Standard errors in parentheses

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

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:

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 in 2010 0.859*** 0.843*** (0.0888) (0.102) County in Medicaid Expansion State? 5.741** 4.569*** 4.233** * (2.402) (1.411) (1.331) Population in 2010 (in 100,000s) -9.42e-07*** (1.69e-07) White Income in 2010 ($1000s) 0.0205 (0.0439) Median Income in 2010 ($1000s) -0.0436 (0.0780) Percent White in 2010 0.0403 (0.0395) Rate of SSI Receipt in 2010 0.588 (0.423) Propensity Score Matching Estimate 4.692*** (0.889) Constant 19.39*** 4.561*** 0.432 (1.429) (1.642) (5.913) Observations 914 716 613 613 R-squared 0.049 0.594 0.547

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 also 4.6 per 100,000, slightly larger 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 the same or 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?

The American Community Survey did not provide year-by-year estimates of state-level uninsurance rates until 2013, but we can compare 2013 and the average of 2010-2012 to the average of 2007-2009:

Even before the full implementation of the Medicaid expansion, the ACA states had almost all expanded coverage/reduced the percentage uninsured and the holdout states had almost all reduced coverage/increased the percentage uninsured:

So while the divergence of expansion and holdout states’ overdose rates began between 2010 and 2013 and only accelerated in 2014 when the Medicaid expansion was implemented, this doesn’t contradict increases in insurance coverage being the main mechanism. 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 (2.60e-07) White Income in 2010 -0.00687 (0.0455) Median Income in 2010 -0.000294 (0.0506) Percent White in 2010 0.0333 (0.0264) SSI Receipt in 2010 0.00207 (0.244) Drug Related Death Rate in 2013 0.765*** 0.880*** (0.0541) (0.0746) Propensity Score Match Estimate of Medicaid Expansion 2.984*** (0.753) 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.

In addition, data on hospital stays and emergency room visits corroborate that in 2014 there was a large, roughly 40% increase in the number of stays for Medicaid patients, which more than made up for the decrease among uninsured patients. Moreover, there was essentially no large increase in opioid-related hospital use for privately insured (or Medicare) patients from 2013 to 2015.

Moreover, the increase in overdoses from 2015 to 2016 was still larger than from 2014 to 2015, and again concentrated in Medicaid expansion states:

So this is 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.

(Update 1/17/2018) Now that the CDC has made 2016 overdose rates available, we can replicate the county-level analysis shown above, using 2016 rather than 2015 overdose rates as the outcome. This analysis shows somewhat larger estimated effects than above- a 5-7 per 100,000 increase in the Medicaid expansion counties relative to non-expansion counties, controlling for the baseline characteristics of those counties in 2010:

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 medicaidexpansionopiatesallfiles

set more off

clear

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

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

desc

sum

*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

save,replace

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

preserve

drop if medicaidexp==0

*Keeping Medicaid expansion states

logout, save(summarystatsMedicaid) excel word replace: sum

restore

preserve

drop if medicaidexp==1

*Keeping Holdout states

logout, save(summarystatsHoldouts) excel word replace: sum

restore

*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