This vignette includes an example of hospital profiling based on a measure of thirty-day all-cause unplanned readmission following psychiatric hospitalization in an inpatient psychiatric facility (IPF Readmission). This claims-based measure is reported by hospitals to CMS as part of the Inpatient Psychiatric Facility Quality Reporting Program.
First, we’ll load the dataset included with the
QualityMeasure
package.
entity | category | n | rate | rate.lwr | rate.upr | |
---|---|---|---|---|---|---|
1 | 10011 | No Different Than the National Rate | 138 | 23.7 | 18.5 | 30.0 |
2 | 10012 | No Different Than the National Rate | 145 | 16.0 | 11.8 | 21.2 |
3 | 10016 | No Different Than the National Rate | 85 | 21.0 | 15.8 | 27.2 |
5 | 10023 | No Different Than the National Rate | 104 | 20.5 | 15.9 | 26.1 |
6 | 10033 | No Different Than the National Rate | 207 | 21.5 | 17.6 | 26.1 |
7 | 10034 | No Different Than the National Rate | 49 | 20.9 | 14.5 | 29.0 |
Next, we will plot the risk-standardized readmission rates (RSRR) with corresponding confidence intervals and a dashed, red line to indicate the national average rate.
marg.p = sum(df$n * df$rate) / (sum(df$n)) / 100
df$rank = rank(df$rate, ties.method = 'random')
profile.fig <- ggplot(data = df, aes(x = rank, y = rate)) +
geom_point(color = 'black') +
geom_errorbar(aes(ymin = rate.lwr, ymax = rate.upr), width = 0.1) +
geom_hline(yintercept = marg.p * 100, col = 'red', lty = 'dashed', linewidth = 1.2, alpha = 0.7) +
xlab('Hospital Rank') +
ylab('Readmission Rate (%)') +
theme_classic() +
theme(
axis.text = element_text(size = 16),
axis.ticks.length = unit(.25, 'cm'),
axis.title = element_text(size = 18, face = 'bold')
)
profile.fig
We can also examine the number of hospitals with rates that are below average, above average, and no different from average.
Category | Count |
---|---|
Better Than the National Rate | 43 |
No Different Than the National Rate | 1091 |
Worse Than the National Rate | 90 |