While preparing a review for the journal Current HIV/AIDS Reports, I uncovered some interesting longitudinal trends in the care cascade and heterogeneity in the progress of US states. The following visualizations describe CDC HIV surveillance data from 2010-2014. They didn’t make the cut for our review paper, and they are too beautiful and interesting to go to waste. I invite you to pull out your Sherlock Holmes monocle, examine this evidence, and then stare out a window to think.
Good
This figure is pretty simple to generate by stratifying a histogram by year. The colors are a little excessive because they don’t provide any additional information that is not already labeled. To me, this was still missing a compelling trigger to my brain to show clearly how the mean is shifting from left to right over time. I wanted to see all of the distributions stacked on top of each other to better show this.
ggplot(d[d$Year >=2010 & d$Year <2015,], aes(vl, fill = yr)) + geom_histogram(colour = "black") + facet_grid(yr ~ .) + xlab("Viral Suppression %") + xlim(0,100) + ggtitle("Viral Suppression (%) in US States") + theme_classic()
Better
After tons of messing around, I finally landed on a visualization of how I imagine the distribution to be shifting shifting over time.
brewer.pal(n = 5, name = "BrBG") # pick a nice color for each year # "#A6611A" "#DFC27D" "#F5F5F5" "#80CDC1" "#018571" ggplot(d[d$Year >=2010 & d$Year <2015,], aes(vl, fill = yr)) + scale_fill_brewer(palette = "BrBG") + geom_density(alpha = 0.5) + xlab("Viral Suppression (%) in US States") + xlim(0,100) + geom_vline(xintercept = mean(d$vl[d$Year == 2010], na.rm = TRUE), color = "#A6611A", linetype = "dashed", size = 1) + geom_vline(xintercept = mean(d$vl[d$Year == 2011], na.rm = TRUE), color = "#DFC27D", linetype = "dashed", size = 1) + geom_vline(xintercept = mean(d$vl[d$Year == 2012], na.rm = TRUE), color = "#F5F5F5", linetype = "dashed", size = 1) + geom_vline(xintercept = mean(d$vl[d$Year == 2013], na.rm = TRUE), color = "#80CDC1", linetype = "dashed", size = 1) + geom_vline(xintercept = mean(d$vl[d$Year == 2014], na.rm = TRUE), color = "#018571", linetype = "dashed", size = 1) + labs(fill = "Year") + theme_classic() + theme(text = element_text(size=20))
Policy Impact
Let’s consider how longitudinal trends within the HIV care continuum could have important policy implications.
Each bar in the HIV care continuum figure above represents a static cross-sectional moment in time. I invite you to imagine replacing the static fraction of each bar with a dynamically shifting distribution of heterogenous US states that is changing over time. The rates of mean change represents progress towards goals in our National Strategy.
For Your Reflection Time
Which states have made the biggest progress toward goals in our National Strategic Plan since 2010? Why are some states improving faster than others? Is there a statistically significant difference in the rate of progress between states with Medicaid expansion versus states without? Which states are farthest from reaching national goals and why?
Data Source
Centers for Disease Control and Prevention. NCHHSTP AtlasPlus. Updated 2017. https://www.cdc.gov/nchhstp/atlas/index.htm. Accessed on 18 April 2018.
UPDATE: May 30, 2018
#dataviz fans on twitter have requested a version with dashed lines representing the median instead of mean viral suppression across US states. Check out this new version: