Patients with severe asthma can be treated with biologic medicinces. NICE has approved four biologics for use in England for people with severe asthma; benralizumab, mepolizumab and most recently reslizumab for treating severe eosinophilic asthma and omalizumab for treating severe persistent confirmed allergic IgE‑mediated asthma. Our team delivers OpenPrescribing.net, a publicly funded and openly accessible explorer for NHS primary care prescribing supported by prescribing data openly published by the NHS Business Services Authority. We were concerned that the NHS did not share hospital medicines data in a similar manner to primary care and advocated openly that it should be shared. Asthma UK have similarly advocated that hospital medicines data should be shared to enable transparent assessment of access to new treatments and accountability for public spending.
In September 2020 NHS BSA published hospital medicines data for the first time. We have prepared the following notebook for investigating the use of asthma biologic medicines in English hospitals. If you have any feedback or insight The DataLab team can be contacted at ebmdatalab@phc.ox.ac.uk.
Before we can analyse trends and variation in the use of asthma biologics we need to prepare our dataset. This analysis uses:
The secondary care medicines dataset, published by the NHS BSA here.
The NHS Digital “Etr” file that maps trust organisation codes to trust names, STP ODS codes and region ODS codes, published here.
The NHS Digital “GP mapping file” which provides STP and region names mapped to STP and region ODS codes, published here.
Information from the dm+d on the strength and vmp quantity of each asthma biologic at VMP level, using data hosted on the DataLab BigQuery server.
We also use information on the daily defined dose (DDD) of each asthma biologic, so that the volume of each VMP can be compared directly once converted to DDDs. The WHO publish DDDs online:
Omalizumab DDD = 16mg
Mepolizumab DDD = 3.6mg
Reslizumab DDD = 7.1mg
Benralizumab DDD = 0.54mg
# reading in hospital issues data for asthma biologics
library(tidyverse)
library(bigrquery)
library(DBI)
library(knitr)
library(here)
options(scipen = 999)
## set up connection to BigQuery
con <- dbConnect(
bigrquery::bigquery(),
project = "ebmdatalab",
dataset = "scmd")
scmd_extract_asthma_biologics <- "select
year_month,
ods_code,
vmp_snomed_code,
vmp_product_name,
sum(total_quanity_in_vmp_unit) as total_quantity
from ebmdatalab.scmd.scmd
where
vmp_snomed_code = \"18671311000001102\" or
vmp_snomed_code = \"18671411000001109\" or
vmp_snomed_code = \"37564311000001105\" or
vmp_snomed_code = \"37564411000001103\" or
vmp_snomed_code = \"31210311000001108\" or
vmp_snomed_code = \"33999611000001101\" or
vmp_snomed_code = \"34812511000001102\" or
vmp_snomed_code = \"37854611000001108\" or
vmp_snomed_code = \"35298511000001102\"
group by
year_month,
ods_code,
vmp_snomed_code,
vmp_product_name
order by
year_month"
scmd_asthma_biologics <- dbGetQuery(con, scmd_extract_asthma_biologics)
kable(scmd_asthma_biologics[1:10, ], caption = "Preview of scmd_asthma_biologics data table")
year_month | ods_code | vmp_snomed_code | vmp_product_name | total_quantity |
---|---|---|---|---|
2019-01-01 | R1H | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 13 |
2019-01-01 | RA2 | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 12 |
2019-01-01 | RA3 | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 62 |
2019-01-01 | RA4 | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 58 |
2019-01-01 | RA7 | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 82 |
2019-01-01 | RA9 | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 187 |
2019-01-01 | RAE | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 502 |
2019-01-01 | RAL | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 104 |
2019-01-01 | RAP | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 17 |
2019-01-01 | RBA | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 116 |
# reading in dm+d data for asthma biologics
## set up connection to BigQuery
con <- dbConnect(
bigrquery::bigquery(),
project = "ebmdatalab",
dataset = "scmd")
dmd_extract_asthma_biologics <- "select
cast(a.id as STRING) as vmpid,
a.nm as vmpnm,
a.vtm as vtmid,
j.nm as vtmnm,
b.form as form_cd,
c.descr as formdescr,
a.df_ind as df_ind_cd,
d.descr as df_descr,
a.udfs,
e.descr as udfs_descr,
f.descr as unit_dose_descr,
g.strnt_nmrtr_val,
h.descr as strnt_nmrtr_uom,
g.strnt_dnmtr_val,
i.descr as strnt_dnmtr_descr,
a.bnf_code,
k.presentation as bnf_presentation
from ebmdatalab.dmd.vmp as a
left join ebmdatalab.dmd.dform as b
on a.id = b.vmp
left join ebmdatalab.dmd.form as c
on b.form = c.cd
left join ebmdatalab.dmd.dfindicator as d
on a.df_ind = d.cd
left join ebmdatalab.dmd.unitofmeasure as e
on a.udfs_uom = e.cd
left join ebmdatalab.dmd.unitofmeasure as f
on a.unit_dose_uom = f.cd
left join ebmdatalab.dmd.vpi as g
on a.id = g.vmp
left join ebmdatalab.dmd.unitofmeasure as h
on g.strnt_nmrtr_uom = h.cd
left join ebmdatalab.dmd.unitofmeasure as i
on g.strnt_dnmtr_uom = i.cd
left join ebmdatalab.dmd.vtm as j
on a.vtm = j.id
left join ebmdatalab.hscic.bnf as k
on a.bnf_code = k.presentation_code
where
a.id = 18671311000001102 or
a.id = 18671411000001109 or
a.id = 37564311000001105 or
a.id = 37564411000001103 or
a.id = 31210311000001108 or
a.id = 33999611000001101 or
a.id = 34812511000001102 or
a.id = 37854611000001108 or
a.id = 35298511000001102"
dmd_asthma_biologics <- dbGetQuery(con, dmd_extract_asthma_biologics) %>%
dplyr::rename(vmp_product_name = vmpnm) %>%
select(-c("vmpid"))
kable(dmd_asthma_biologics[1:5, ], caption = "Preview of dmd_asthma_biologics data table")
vmp_product_name | vtmid | vtmnm | form_cd | formdescr | df_ind_cd | df_descr | udfs | udfs_descr | unit_dose_descr | strnt_nmrtr_val | strnt_nmrtr_uom | strnt_dnmtr_val | strnt_dnmtr_descr | bnf_code | bnf_presentation |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Mepolizumab 100mg powder for solution for injection vials | NA | Mepolizumab | 385223009 | Powder for solution for injection | 1 | Discrete | 1.0 | vial | vial | 100 | mg | NA | NA | 0304020Y0AAAAAA | Mepolizumab 100mg powder for solution for injection vials |
Reslizumab 100mg/10ml solution for infusion vials | NA | Reslizumab | 385229008 | Solution for infusion | 1 | Discrete | 10.0 | ml | vial | 10 | mg | 1 | ml | 0304020Z0AAAAAA | Reslizumab 100mg/10ml solution for infusion vials |
Reslizumab 25mg/2.5ml solution for infusion vials | NA | Reslizumab | 385229008 | Solution for infusion | 1 | Discrete | 2.5 | ml | vial | 10 | mg | 1 | ml | 0304020Z0AAABAB | Reslizumab 25mg/2.5ml solution for infusion vials |
Omalizumab 75mg/0.5ml solution for injection pre-filled syringes | 406442003 | Omalizumab | 385219001 | Solution for injection | 1 | Discrete | 0.5 | ml | pre-filled disposable injection | 150 | mg | 1 | ml | 0304020X0AAABAB | Omalizumab 75mg/0.5ml inj pre-filled syringes |
Omalizumab 150mg/1ml solution for injection pre-filled syringes | 406442003 | Omalizumab | 385219001 | Solution for injection | 1 | Discrete | 1.0 | ml | pre-filled disposable injection | 150 | mg | 1 | ml | 0304020X0AAACAC | Omalizumab 150mg/1ml inj pre-filled syringes |
# reading in ods data on hospitals - no header information so need to add this in
hospital_to_stp_map <- read.csv(file = here::here("data", "etr.csv"), header = FALSE) %>%
select(1:4)
colnames(hospital_to_stp_map) <- c("ods_code", "trust_name", "region_code", "stp_code")
kable(hospital_to_stp_map[1:5, ], caption = "Preview of hospital_to_stp_map data table")
ods_code | trust_name | region_code | stp_code |
---|---|---|---|
R0A | MANCHESTER UNIVERSITY NHS FOUNDATION TRUST | Y62 | QOP |
R0B | SOUTH TYNESIDE AND SUNDERLAND NHS FOUNDATION TRUST | Y63 | QHM |
R0C | PROJECT NIGHTINGALE NHS TRUST | Y56 | Q71 |
R1A | WORCESTERSHIRE HEALTH AND CARE NHS TRUST | Y60 | QGH |
R1C | SOLENT NHS TRUST | Y59 | QRL |
# reading in map from ccg codes to stp and region codes because this gives a map from stp_code to stp_name
stp_to_region_map <- read.csv(here::here("data","gp-reg-pat-prac-map.csv")) %>%
group_by(STP_CODE, STP_NAME) %>%
summarise(COMM_REGION_NAME = first(COMM_REGION_NAME),
COMM_REGION_CODE = first(COMM_REGION_CODE)) %>%
dplyr::rename(stp_code = STP_CODE)
kable(stp_to_region_map[1:5, ], caption = "Preview of stp_to_region_map data table")
stp_code | STP_NAME | COMM_REGION_NAME | COMM_REGION_CODE |
---|---|---|---|
QE1 | Healthier Lancashire and South Cumbria | North West | Y62 |
QF7 | South Yorkshire and Bassetlaw | North East and Yorkshire | Y63 |
QGH | Herefordshire and Worcestershire | Midlands | Y60 |
QH8 | Mid and South Essex | East of England | Y61 |
QHG | Bedfordshire, Luton and Milton Keynes | East of England | Y61 |
Now the four data tables will be merged together to create the dataset used for our analysis. To be able to match trust codes to trust names, STP ODS codes and region ODS codes there first needs to be some data cleaning as the SCMD uses some old trust ODS codes and doesn’t take account of some trust mergers over the last few years.
# Merging data tables together
asthma_biologics <- left_join(scmd_asthma_biologics, dmd_asthma_biologics, by = "vmp_product_name") %>%
left_join(., hospital_to_stp_map, by = "ods_code") %>%
# some data cleaning as scmd uses some ods codes that are not up to date
mutate(stp_code = as.character(stp_code),
stp_code = case_when(
ods_code == "RQ6" ~ "QYG",
ods_code %in% c("RNL", "RE9", "RLN") ~ "QHM",
ods_code %in% c("RM2", "RW3") ~ "QOP",
ods_code == "RGQ" ~ "QJG",
ods_code == "RJF" ~ "QJ2",
ods_code == "RR1" ~ "QHL",
TRUE ~ stp_code
)
) %>%
left_join(., stp_to_region_map, by = "stp_code") %>%
select(-c("COMM_REGION_CODE"))
kable(asthma_biologics[1:5, ], caption = "Preview of asthma_biologics data table")
year_month | ods_code | vmp_snomed_code | vmp_product_name | total_quantity | vtmid | vtmnm | form_cd | formdescr | df_ind_cd | df_descr | udfs | udfs_descr | unit_dose_descr | strnt_nmrtr_val | strnt_nmrtr_uom | strnt_dnmtr_val | strnt_dnmtr_descr | bnf_code | bnf_presentation | trust_name | region_code | stp_code | STP_NAME | COMM_REGION_NAME |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2019-01-01 | R1H | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 13 | 406442003 | Omalizumab | 385219001 | Solution for injection | 1 | Discrete | 1 | ml | pre-filled disposable injection | 150 | mg | 1 | ml | 0304020X0AAACAC | Omalizumab 150mg/1ml inj pre-filled syringes | BARTS HEALTH NHS TRUST | Y56 | QMF | East London Health and Care Partnership | London |
2019-01-01 | RA2 | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 12 | 406442003 | Omalizumab | 385219001 | Solution for injection | 1 | Discrete | 1 | ml | pre-filled disposable injection | 150 | mg | 1 | ml | 0304020X0AAACAC | Omalizumab 150mg/1ml inj pre-filled syringes | ROYAL SURREY COUNTY HOSPITAL NHS FOUNDATION TRUST | Y59 | QXU | Surrey Heartlands Health and Care Partnership | South East |
2019-01-01 | RA3 | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 62 | 406442003 | Omalizumab | 385219001 | Solution for injection | 1 | Discrete | 1 | ml | pre-filled disposable injection | 150 | mg | 1 | ml | 0304020X0AAACAC | Omalizumab 150mg/1ml inj pre-filled syringes | WESTON AREA HEALTH NHS TRUST | Y58 | QUY | Bristol, North Somerset and South Gloucestershire | South West |
2019-01-01 | RA4 | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 58 | 406442003 | Omalizumab | 385219001 | Solution for injection | 1 | Discrete | 1 | ml | pre-filled disposable injection | 150 | mg | 1 | ml | 0304020X0AAACAC | Omalizumab 150mg/1ml inj pre-filled syringes | YEOVIL DISTRICT HOSPITAL NHS FOUNDATION TRUST | Y58 | QSL | Somerset | South West |
2019-01-01 | RA7 | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 82 | 406442003 | Omalizumab | 385219001 | Solution for injection | 1 | Discrete | 1 | ml | pre-filled disposable injection | 150 | mg | 1 | ml | 0304020X0AAACAC | Omalizumab 150mg/1ml inj pre-filled syringes | UNIVERSITY HOSPITALS BRISTOL AND WESTON NHS FOUNDATION TRUST | Y58 | QUY | Bristol, North Somerset and South Gloucestershire | South West |
The final data cleaning step is to convert the volume from VMP quantity (as provided in the SCMD dataset) to volume in DDDs.
SCMD volumes data is provided in vmp quantity - this means different things for different products. e.g. 100mg powder = 1 vmp quantity but 100mg/20ml solution for injection = 20 vmp quantity, even though both VMPS have the same strength of ingredient.
To translate volume in VMP quantity to volume in DDDs we need to go through a few steps:
First, translate volume in VMP quantity to volumes in singles of the product (i.e. number of vials)
Then translate volume in singles of product to volume in strength of ingredient (i.e. number of mgs of active ingredient)
Finally translate volume in strength of ingredient to volume in DDDs, using the DDD information published by the WHO
asthma_biologics_with_DDD <- asthma_biologics %>%
mutate(volume_singles = total_quantity / udfs,
volume_mg_strength = volume_singles * ifelse(is.na(strnt_dnmtr_val), strnt_nmrtr_val, strnt_nmrtr_val * (udfs / strnt_dnmtr_val)),
mg_per_DDD = case_when(
vtmnm == "Omalizumab" ~ 16,
vtmnm == "Mepolizumab" ~ 3.6,
vtmnm == "Reslizumab" ~ 7.1,
vtmnm == "Benralizumab" ~ 0.54,
TRUE ~ NA_real_
),
volume_DDD = volume_mg_strength / mg_per_DDD
)
kable(asthma_biologics_with_DDD[1:5, ], caption = "Preview of asthma_biologics_with_DDD data table")
year_month | ods_code | vmp_snomed_code | vmp_product_name | total_quantity | vtmid | vtmnm | form_cd | formdescr | df_ind_cd | df_descr | udfs | udfs_descr | unit_dose_descr | strnt_nmrtr_val | strnt_nmrtr_uom | strnt_dnmtr_val | strnt_dnmtr_descr | bnf_code | bnf_presentation | trust_name | region_code | stp_code | STP_NAME | COMM_REGION_NAME | volume_singles | volume_mg_strength | mg_per_DDD | volume_DDD |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2019-01-01 | R1H | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 13 | 406442003 | Omalizumab | 385219001 | Solution for injection | 1 | Discrete | 1 | ml | pre-filled disposable injection | 150 | mg | 1 | ml | 0304020X0AAACAC | Omalizumab 150mg/1ml inj pre-filled syringes | BARTS HEALTH NHS TRUST | Y56 | QMF | East London Health and Care Partnership | London | 13 | 1950 | 16 | 121.875 |
2019-01-01 | RA2 | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 12 | 406442003 | Omalizumab | 385219001 | Solution for injection | 1 | Discrete | 1 | ml | pre-filled disposable injection | 150 | mg | 1 | ml | 0304020X0AAACAC | Omalizumab 150mg/1ml inj pre-filled syringes | ROYAL SURREY COUNTY HOSPITAL NHS FOUNDATION TRUST | Y59 | QXU | Surrey Heartlands Health and Care Partnership | South East | 12 | 1800 | 16 | 112.500 |
2019-01-01 | RA3 | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 62 | 406442003 | Omalizumab | 385219001 | Solution for injection | 1 | Discrete | 1 | ml | pre-filled disposable injection | 150 | mg | 1 | ml | 0304020X0AAACAC | Omalizumab 150mg/1ml inj pre-filled syringes | WESTON AREA HEALTH NHS TRUST | Y58 | QUY | Bristol, North Somerset and South Gloucestershire | South West | 62 | 9300 | 16 | 581.250 |
2019-01-01 | RA4 | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 58 | 406442003 | Omalizumab | 385219001 | Solution for injection | 1 | Discrete | 1 | ml | pre-filled disposable injection | 150 | mg | 1 | ml | 0304020X0AAACAC | Omalizumab 150mg/1ml inj pre-filled syringes | YEOVIL DISTRICT HOSPITAL NHS FOUNDATION TRUST | Y58 | QSL | Somerset | South West | 58 | 8700 | 16 | 543.750 |
2019-01-01 | RA7 | 18671311000001102 | Omalizumab 150mg/1ml solution for injection pre-filled syringes | 82 | 406442003 | Omalizumab | 385219001 | Solution for injection | 1 | Discrete | 1 | ml | pre-filled disposable injection | 150 | mg | 1 | ml | 0304020X0AAACAC | Omalizumab 150mg/1ml inj pre-filled syringes | UNIVERSITY HOSPITALS BRISTOL AND WESTON NHS FOUNDATION TRUST | Y58 | QUY | Bristol, North Somerset and South Gloucestershire | South West | 82 | 12300 | 16 | 768.750 |
The public secondary care medicines dataset provides information on hospital use of asthma biologics from January 2019 to July 2020.
At a national level we can see that the total use of asthma biologics has increase over this period, but the size of the change varies by type of chemical. Use of Benralizumab has increased the most (in both absolute and proportional terms) and there is very little use of Reslizumab over the period.
Nat_time_series <- asthma_biologics_with_DDD %>%
group_by(year_month, vtmnm) %>%
summarise(volume_DDD = sum(volume_DDD))
ggplot(Nat_time_series, aes(x = year_month, y = volume_DDD, group = vtmnm)) +
geom_line(aes(color = vtmnm), size = 2) +
labs(x = "Month", y = "Total volume issued in hospitals - DDD") +
scale_y_continuous(labels = scales::number) +
theme_bw() +
theme(axis.text.x = element_text(angle = 90)) +
ggtitle("Prescribing of asthma biologics over time - National")
At a regional level it looks like the take up of asthma biologics does vary by region - London and the North West seem to be the drivers of the increased use of Benralizumab with the North East and Yorkshire, the Midlands and the South East using more of Mepolizumab. There is a large variation in volume of use of Omalizumab between regions, with the North East and Yorkshire having the highest use over time and East of England having the lowest use.
Reg_time_series <- asthma_biologics_with_DDD %>%
group_by(COMM_REGION_NAME, year_month, vtmnm) %>%
summarise(volume_DDD = sum(volume_DDD))
ggplot(Reg_time_series, aes(x = year_month, y = volume_DDD, group = COMM_REGION_NAME)) +
geom_line(aes(color = COMM_REGION_NAME), size = 1) +
facet_wrap(facets=vars(vtmnm)) +
labs(x = "Month", y = "Total volume issued in hospitals - DDD") +
scale_y_continuous(labels = scales::number) +
theme_bw() +
theme(axis.text.x = element_text(angle = 90),
legend.position = "bottom") +
ggtitle("Prescribing of asthma biologics over time - Regional")
We can look at the total issues of asthma biologics over the latest 12 months of data available, August 2019 to July 2020 inclusive, to understand the variation in total issues and type of issues.
At a regional level the volume of total asthma biologics issued in hospitals ranges from 141,000 DDDs in the East of England to 694,000 DDDs in the North East and Yorkshire. Across most regions Omalizumab and Mepolizumab make up the vast majority of issues, with the exception of London where Benralizumab has the greatest share of issues.
# Look at regional use by product
Reg_split <- asthma_biologics_with_DDD %>%
filter(year_month >= as.Date("2019-08-01") & year_month <= as.Date("2020-07-01")) %>%
group_by(COMM_REGION_NAME, vtmnm) %>%
summarise(volume_DDD = sum(volume_DDD)) %>%
group_by(COMM_REGION_NAME) %>%
mutate(prop_use = volume_DDD / sum(volume_DDD),
pos = cumsum(volume_DDD) - volume_DDD/2,
total = sum(volume_DDD)) %>%
ungroup() %>%
arrange(desc(total))
ggplot(data = Reg_split, aes(x = reorder(COMM_REGION_NAME,total), y = volume_DDD, fill = vtmnm)) +
geom_bar(position = "stack", stat = "identity") +
theme_bw() +
labs(x = "Region",
y = "Volume of asthma biologics issues - DDDs") +
theme(strip.text.x = element_text(size = 8),
panel.grid.major.x = element_blank(),
legend.position = "bottom") +
scale_y_continuous(labels = scales::number) +
ggtitle(label = "Regional use of asthma biologics",
subtitle = "Between August 2019 and July 2020")
At a trust level, again there is clear variation in the total issues of asthma biologics between August 2019 and July 2020 and in the type of asthma biologic used. For trusts with very low issues Omalizumab seems to be the preferred choice, whereas there is more variation in the type of asthma biologic used in trusts with higher volumes of issues.
# Look at trust use by product
Trust_split <- asthma_biologics_with_DDD %>%
filter(year_month >= as.Date("2019-08-01") & year_month <= as.Date("2020-07-01")) %>%
group_by(trust_name, ods_code, vtmnm) %>%
summarise(volume_DDD = sum(volume_DDD)) %>%
group_by(trust_name, ods_code) %>%
mutate(prop_use = volume_DDD / sum(volume_DDD),
pos = cumsum(volume_DDD) - volume_DDD/2,
total = sum(volume_DDD)) %>%
ungroup() %>%
arrange(desc(total))
# stacked bar chart
ggplot(data = Trust_split, aes(x = reorder(ods_code,total), y = volume_DDD, fill = vtmnm)) +
geom_bar(position = "stack", stat = "identity") +
theme_bw() +
labs(x = "Trust",
y = "Volume of asthma biologics issues - DDDs") +
theme(axis.text.x = element_text(angle = 90, hjust = 1),
strip.text.x = element_text(size = 8),
panel.grid.major.x = element_blank(),
legend.position = "bottom") +
scale_y_continuous(labels = scales::number) +
ggtitle(label = "Trust use of asthma biologics",
subtitle = "Between August 2019 and July 2020")
# scatter plot - total asthma biologic prescribing by % Omalizumab
trust_volume_by_prop_Omal <- asthma_biologics_with_DDD %>%
filter(year_month >= as.Date("2019-08-01") & year_month <= as.Date("2020-07-01")) %>%
mutate(vol_omalizumab = ifelse(vtmnm == "Omalizumab", volume_DDD, 0)) %>%
group_by(ods_code) %>%
summarise(volume_DDD = sum(volume_DDD),
prop_omalizumab = sum(vol_omalizumab) / sum(volume_DDD)) %>%
arrange(desc(volume_DDD))
ggplot(trust_volume_by_prop_Omal, aes(x = volume_DDD, y = prop_omalizumab)) +
geom_point(size = 2, alpha=0.2, shape=16) +
labs(x = "Total asthma biologic issues in DDDs", y = "% of total volume through Omalizumab") +
scale_x_continuous(labels = scales::number) +
scale_y_continuous(labels = scales::percent) +
theme_bw() +
ggtitle(label = "Comparing prescribing of Asthma biologics and % of prescribing through Omalizumab",
subtitle = "Trust level - Between August 2019 and July 2020")
Looking at the twenty trusts that use the greatest volume of asthma biologics we can see that University of Manchester and Guy’s and St Thomas’ trusts are the outliers in terms of total usage and Royal Brompton & Harefield (see caveats section) trust stands out because there is no use of Omalizumab.
# Top 20 trusts
Trust_split_Top20 <- Trust_split %>%
mutate(rank = dense_rank(desc(total))) %>%
arrange(desc(total)) %>%
filter(rank <= 20) %>%
mutate(trust_name = as.character(trust_name),
trust_name = case_when(ods_code == "RM2" ~ "UNIVERSITY HOSPITAL OF SOUTH MANCHESTER NHS FOUNDATION TRUST",
ods_code == "RR1" ~ "HEART OF ENGLAND NHS FOUNDATION TRUST",
TRUE ~ trust_name)
)
ggplot(data = Trust_split_Top20, aes(x = reorder(trust_name,total), y = volume_DDD, fill = vtmnm)) +
geom_bar(position = "stack", stat = "identity") +
theme_bw() +
labs(x = "Trust",
y = "Volume of asthma biologics issues - DDDs") +
theme(panel.grid.major.y = element_blank(),
legend.position = "bottom") +
scale_y_continuous(labels = scales::number) +
ggtitle(label = "Trust use of asthma biologics - Top 20 trusts by DDD volume",
subtitle = "Between August 2019 and July 2020") +
coord_flip()
A detailed description of the data can be read on the NHS Business Services Authority website. We note some further caveats relevant to this analysis:
ODS codes: The published ODS codes are not all current so some hospital trusts may have older names.
Omalizumab usage at the Royal Brompton: There apears to be no use of omalizumab at RBHT recorded in the data. Our investigations to date suggest that there is.
We will share both of these findings with the NHS Business Services Authority.