Chapter 15 Funnel Plots for Categorical Subgroups
Funnel plots are SPC charts used for categorical subgroups (Spiegelhalter 2005). The subgroups are often ordered by size, producing the characteristic funnel-shaped control limits. Funnel plots are useful for comparing indicator levels across categories, for example complication rates between hospitals.
Figure 15.1 compares the level of an indicator across six organisational units. One unit (E) falls below the lower control limit, suggesting that its results may reflect a fundamentally different process compared with the others.
Figure 15.1: Funnel plot
Because funnel plots do not involve a natural time sequence, the data points are not connected, and run analysis is not applicable.
To demonstrate the construction of funnel plots, we use data on urinary tract infections from the hospital_infections dataset included in qicharts2. We begin by plotting the data over time using a traditional U chart:
# get urinary tract infections from hospital infections data
uti <- hospital_infections[hospital_infections$infection == 'UTI',]
# plot U chart
qic(month, n, days,
data = uti,
chart = 'u',
multiply = 10000,
facets = ~hospital,
ncol = 2,
title = 'Hospital acquired urinary tract infections in six hospitals',
ylab = 'Infections per 10,000 risk days',
xlab = 'Month')Figure 15.2: U chart of urinary tract infections
Figure 15.2 shows signals of special cause variation in two hospitals (BOH and NOH). In such cases, direct comparison of infection rates between hospitals is problematic, as it does not make sense to compare levels based on data that are changing over time.
For this reason, we select data from a recent period before constructing the funnel plot. In Figure 15.3, the data are restricted to the most recent quarter and plotted using hospital, rather than time, as the subgrouping variable:
# filter data to latest quarter
uti_2016q4 <- uti[uti$month >= '2016-10-01', ]
# plot "funnel" plot
qic(hospital, n, days,
data = uti_2016q4,
chart = 'u',
multiply = 10000,
title = 'Hospital acquired urinary tract infections in six hospitals',
ylab = 'Infections per 10,000 risk days',
xlab = 'Hospital')Figure 15.3: Unordered ‘funnel’ plot of urinary tract infections
By default, the subgroups are ordered alphabetically along the x-axis. To produce a funnel plot, the subgroups must be ordered by size, as shown in Figure 15.4.
# order hospitals by denominator (risk days) to produce funnel
qic(reorder(hospital, days), n, days,
data = uti_2016q4,
chart = 'u',
multiply = 10000,
title = 'Hospital acquired urinary tract infections in six hospitals',
ylab = 'Infections per 10,000 risk days',
xlab = 'Hospital')Figure 15.4: Ordered funnel plot of urinary tract infections
In summary, funnel plots are SPC charts for categorical subgroups and are useful for comparing indicator levels across organisational units. To support meaningful comparison, it is important to use data from a recent period before constructing the funnel plot.