Potential Underreporting of Pressure Injuries in the National Aged Care Mandatory Quality Indicator Program

Analysis
MOA-Benchmarking
R
Author

Filip Reierson

Published

November 3, 2023

In this analysis I consider potential underreporting of pressure injuries in the National Aged Care Mandatory Quality Indicator Program by modelling the reporting of zero pressure injuries.

Even in the best aged care services, residents may be exposed to some risk of pressure injuries. The probability of pressure injuries is relatively low, so smaller homes reporting zero pressure injuries is statistically unsurprising, but we would still expect homes to report some pressure injuries if they have enough residents. By making some assumptions it is possible to predict how many homes would be expected to have no pressure injuries. If the number of homes reporting no pressure injuries is much higher than expected, this may indicate that there is underreporting of pressure injuries.

For the sake of modelling, I assume that residents in all homes have the same risk of developing a pressure injury, so the number of aged care services with no reported pressure injuries is a random variable that follows a binomial distribution. I use the properties of the binomial distribution to estimate potential underreporting and assess the strength of the evidence by reporting p-values. However, keep in mind that this is only a model, and the results are only as good as the assumptions.

Code
library(readxl)
library(tidyverse)
nqip <-
  read_excel('star-ratings-quarterly-data-extract-august-2023.xlsx',
             sheet = 3) |>
  rename_with(.cols = starts_with('[QM]'), .fn = \(x)(substring(x, first = 6))) |>
  mutate(ZeroPI = `Pressure injuries*` == 0)
services <- read_excel('Australia_30-June_2023.xlsx',
                       skip = 2,
                       guess_max = 10 ^ 6) |>
  select(`Service Name`, `Residential Places`, `Care Type`) |>
  filter(`Residential Places` >= 120, `Care Type` == 'Residential') |>
  rename(Beds = `Residential Places`)
dat <- left_join(nqip, services,
                by = join_by(`Service Name`)) |>
  drop_na(ZeroPI) |>
  group_by(`Service Name`) |>
  filter(n()==1)
PrevalencePI <- mean(nqip$`Pressure injuries*`, na.rm = T) / 100
PercentZero <- dat |>
  mutate(Lower = 10 * floor(Beds / 10)) |>
  drop_na(Lower) |>
  mutate(Range = case_when(
    Lower <= 180 ~ glue::glue('{Lower} - {Lower + 9}'),
    Lower > 180 ~ '190+'
  )) |>
  group_by(Range) |>
  summarise(
    PercentZeroPI = mean(ZeroPI) * 100,
    n = n(),
    ExpectedZeroes = (1 - PrevalencePI) ^ (first(Lower)+4) * 100,
    pvalue = pbinom(sum(ZeroPI), n, ExpectedZeroes/100, lower.tail=F)
  ) |>
  mutate(PotentialUnderreporting = PercentZeroPI - ExpectedZeroes) |>
  relocate(pvalue, .after = last_col())

Potential underreporting of pressure injuries is summarised in Table 1. I used the average risk adjusted prevalence, 0.63%, as the probability of a pressure injury for calculating expected zero reporting. The proportion of homes that report zeroes does not appear to decrease at the rate predicted by theory which may indicate that there is underreporting. This is visualised in Figure 1.

Code
PercentZero |>
  mutate(pvalue = scales::label_pvalue()(pvalue)) |>
  knitr::kable(
    digits = 1,
    col.names = c(
      'Beds',
      'Percent zero',
      'n',
      'Expected zeroes',
      'Potential underreporting',
      'p-value'
    )
  )
Table 1: Percentage of aged care services that reported zero pressure injuries. The expected number of zeroes is calculated by assuming that the probability of pressure injuries is the same as the average risk adjusted prevalence of pressure injuries in the data. The sample size for calculating the expected number of zeroes is the middle of the bed range (rounded down), except 190+ which uses 194. The potential underreporting is the difference between the observed number of zeroes and the expected number of zeroes. Refer to the code for more detail.
Beds Percent zero n Expected zeroes Potential underreporting p-value
120 - 129 46.9 194 45.7 1.2 0.340
130 - 139 50.0 96 42.9 7.1 0.066
140 - 149 53.7 95 40.3 13.4 0.003
150 - 159 45.3 53 37.8 7.5 0.104
160 - 169 43.2 44 35.5 7.7 0.112
170 - 179 50.0 24 33.3 16.7 0.028
180 - 189 55.6 18 31.3 24.3 0.009
190+ 27.0 37 27.6 -0.5 0.445
Code
PercentZero |>
  ggplot(aes(Range, PercentZeroPI / 100)) +
  geom_point(aes(color=pvalue<.05,
             shape=pvalue<.05), size = 2) +
  scale_color_manual(values = c('TRUE'='black',
                                'FALSE'='lightgrey')) +
  scale_y_continuous(labels = scales::label_percent(1)) +
  geom_line(aes(y = ExpectedZeroes / 100, group = 1), color = 'red') +
  annotate(
    'text',
    x = '150-159',
    y = 37.5 / 100,
    label = 'Expected',
    color = 'red'
  ) +
  theme_bw() +
  labs(x = 'Beds', y = 'Reported no pressure injuries') +
  theme(
    axis.title.y.right = element_text(margin = margin(15, 15, 15, 15)),
    axis.title.y.left = element_text(margin = margin(15, 15, 15, 15)),
    axis.title.x.bottom = element_text(margin = margin(15, 15, 15, 15)),
    plot.title = element_text(margin = margin(b = 10)),
    axis.text.x.bottom = element_text(angle=45,vjust = 1, hjust = 1)
  )
Figure 1: Percentage of aged care services that reported no pressure injuries compared to what would be expected based on the average prevalence.

Reproducibility

The data is publicly available from GEN Aged Care Data (Australian Government Department of Health and Aged Care 2023b, 2023a). The code is available in this post by expanding the code chunks.

References

Australian Government Department of Health and Aged Care. 2023a. “Aged Care Service List: 30 June 2023.” https://www.health.gov.au/resources/collections/star-ratings-quarterly-data-extracts.
———. 2023b. “Star Ratings Quarterly Data Extracts.” https://www.health.gov.au/resources/collections/star-ratings-quarterly-data-extracts.