Assessing drug restart and switching after treatment
Source:vignettes/drug_restart.Rmd
drug_restart.Rmd
Introduction
Obtaining information on drug restart or switching to another drug after discontinuation of the original treatment is often of interest in drug utilisation studies. In this vignette, we show how to assess drug switching and restart with this package.
Data
Connect to mock data
For this vignette we will use mock data contained in the DrugUtilisation package.
library(DrugUtilisation)
cdm <- mockDrugUtilisation(numberIndividual = 200)
Generate study cohorts
We will examine the patterns of drug restart and switching among patients taking metformin as an example. Specifically, we will investigate whether patients restart metformin after discontinuation, switch to insulin, try both medications, or remain untreated.
For this we will need two cohorts: one of patients exposed to metformin and another of patients exposed to insulin.
# codelists
metformin <- CodelistGenerator::getDrugIngredientCodes(cdm = cdm, name = "metformin")
insulin <- CodelistGenerator::getDrugIngredientCodes(cdm = cdm, name = "insulin detemir")
cdm <- generateDrugUtilisationCohortSet(
cdm = cdm, name = "metformin", conceptSet = metformin
)
cdm$metformin |>
cohortCount()
#> # A tibble: 1 × 3
#> cohort_definition_id number_records number_subjects
#> <int> <int> <int>
#> 1 1 107 92
cdm <- generateDrugUtilisationCohortSet(
cdm = cdm, name = "insulin", conceptSet = insulin
)
cdm$insulin |>
cohortCount()
#> # A tibble: 1 × 3
#> cohort_definition_id number_records number_subjects
#> <int> <int> <int>
#> 1 1 93 85
Assess drug restart
The summariseDrugRestart()
function analyses the
outcomes within a treatment cohort following the first exposure to a
specific drug. It categorises the events into four distinct groups:
Restarting the same treatment.
Switching to a different treatment.
Restarting the same treatment while also switching to another.
Discontinuing treatment altogether (neither the original treatment nor any potential switch).
The figure below illustrates the analysis, focusing on the outcomes after the initial exposure to a particular drug (in blue), with consideration of a specific switch drug (in orange). This study examines what occurs within 100, 180, and 365 days following first treatment discontinuation in the cohort.
Now, let’s use the function to assess metformin restart and switch to insulin after the first metformin treatment.
results <- cdm$metformin |>
summariseDrugRestart(
switchCohortTable = "insulin",
switchCohortId = NULL,
strata = list(),
followUpDays = Inf,
censorDate = NULL,
restrictToFirstDiscontinuation = TRUE
)
#> Warning: `package_name` and `package_version` are not provided will be populated as ""
#> in settings
results |>
dplyr::glimpse()
#> Rows: 8
#> Columns: 13
#> $ result_id <int> 1, 1, 1, 1, 1, 1, 1, 1
#> $ cdm_name <chr> "DUS MOCK", "DUS MOCK", "DUS MOCK", "DUS MOCK", "DUS …
#> $ group_name <chr> "cohort_name", "cohort_name", "cohort_name", "cohort_…
#> $ group_level <chr> "6809_metformin", "6809_metformin", "6809_metformin",…
#> $ strata_name <chr> "overall", "overall", "overall", "overall", "overall"…
#> $ strata_level <chr> "overall", "overall", "overall", "overall", "overall"…
#> $ variable_name <chr> "End of observation", "End of observation", "End of o…
#> $ variable_level <chr> "restart", "restart", "switch", "switch", "restart an…
#> $ estimate_name <chr> "count", "percentage", "count", "percentage", "count"…
#> $ estimate_type <chr> "integer", "percentage", "integer", "percentage", "in…
#> $ estimate_value <chr> "13", "14.1304347826087", "3", "3.26086956521739", "2…
#> $ additional_name <chr> "overall", "overall", "overall", "overall", "overall"…
#> $ additional_level <chr> "overall", "overall", "overall", "overall", "overall"…
We could be interested in getting these results in different follow-up periods since the first metformin exposure ended. For instance, next we get the results in the first 180 days, the first year, and until the end of observation.
results <- cdm$metformin |>
summariseDrugRestart(
switchCohortTable = "insulin",
switchCohortId = NULL,
strata = list(),
followUpDays = c(180, 365, Inf),
censorDate = NULL,
restrictToFirstDiscontinuation = TRUE
)
#> Warning: `package_name` and `package_version` are not provided will be populated as ""
#> in settings
Other options that this function allows are:
- restrictToFirstDiscontinuation
By default this argument is set to TRUE, which means that we only consider the firsts exposure of the subject. If FALSE, the analysis is conducted on a record level, considering all exposures in the cohort, as the following image illustrates:
- censorEndDate
This argument allows to stop considering restart and switch events after a certain date, which must specified as a column in the cohort.
- strata
This argument must be a list pointing to columns or combinations of columns in the cohort to use as strata. It will produce stratified estimates as well as for the overall cohort.
For instance, we reproduce the last calculation but this time straifying by sex. We first use PatientProfiles to add a column indicating the sex, which later we use in strata.
results <- cdm$cohort1 |>
PatientProfiles::addSex() |>
summariseDrugRestart(
switchCohortTable = "insulin",
switchCohortId = NULL,
strata = list("sex"),
followUpDays = c(180, 365, Inf),
censorDate = NULL,
restrictToFirstDiscontinuation = TRUE
)
#> Warning: `package_name` and `package_version` are not provided will be populated as ""
#> in settings
Visualise drug restart
The package has table and plot functions to help visualising the
results from summariseDrugRestart()
.
Table
The function tableDrugRestart()
will create a gt,
flextable or tibble table from the summarised_result object created with
summariseDrugRestart()
. This function offers multiple
customisation options to format the resulting table according to the
user preferences.
results |>
tableDrugRestart(
header = c("strata"),
splitStrata = TRUE,
cohortName = TRUE,
cdmName = FALSE,
groupColumn = c("cohort_name"),
type = "gt",
formatEstimateName = c(`N (%)` = "<count> (<percentage> %)"),
.options = list()
)
#> Warning: The `split` argument of `visOmopTable()` is deprecated as of visOmopResults
#> 0.4.0.
#> ℹ The deprecated feature was likely used in the DrugUtilisation package.
#> Please report the issue at
#> <https://github.com/darwin-eu/DrugUtilisation/issues>.
#> This warning is displayed once every 8 hours.
#> Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
#> generated.
#> ! Results have not been suppressed.
Follow-up | Event | Estimate name |
Sex
|
||
---|---|---|---|---|---|
overall | Female | Male | |||
cohort_1 | |||||
180 days | restart | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) |
switch | N (%) | 3 (4.55 %) | 2 (6.90 %) | 1 (2.70 %) | |
restart and switch | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) | |
not treated | N (%) | 63 (95.45 %) | 27 (93.10 %) | 36 (97.30 %) | |
365 days | restart | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) |
switch | N (%) | 3 (4.55 %) | 2 (6.90 %) | 1 (2.70 %) | |
restart and switch | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) | |
not treated | N (%) | 63 (95.45 %) | 27 (93.10 %) | 36 (97.30 %) | |
End of observation | restart | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) |
switch | N (%) | 5 (7.58 %) | 4 (13.79 %) | 1 (2.70 %) | |
restart and switch | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) | |
not treated | N (%) | 61 (92.42 %) | 25 (86.21 %) | 36 (97.30 %) | |
cohort_2 | |||||
180 days | restart | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) |
switch | N (%) | 3 (5.88 %) | 2 (7.41 %) | 1 (4.17 %) | |
restart and switch | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) | |
not treated | N (%) | 48 (94.12 %) | 25 (92.59 %) | 23 (95.83 %) | |
365 days | restart | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) |
switch | N (%) | 5 (9.80 %) | 3 (11.11 %) | 2 (8.33 %) | |
restart and switch | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) | |
not treated | N (%) | 46 (90.20 %) | 24 (88.89 %) | 22 (91.67 %) | |
End of observation | restart | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) |
switch | N (%) | 8 (15.69 %) | 5 (18.52 %) | 3 (12.50 %) | |
restart and switch | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) | |
not treated | N (%) | 43 (84.31 %) | 22 (81.48 %) | 21 (87.50 %) | |
cohort_3 | |||||
180 days | restart | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) |
switch | N (%) | 4 (4.82 %) | 3 (7.69 %) | 1 (2.27 %) | |
restart and switch | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) | |
not treated | N (%) | 79 (95.18 %) | 36 (92.31 %) | 43 (97.73 %) | |
365 days | restart | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) |
switch | N (%) | 5 (6.02 %) | 4 (10.26 %) | 1 (2.27 %) | |
restart and switch | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) | |
not treated | N (%) | 78 (93.98 %) | 35 (89.74 %) | 43 (97.73 %) | |
End of observation | restart | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) |
switch | N (%) | 8 (9.64 %) | 6 (15.38 %) | 2 (4.55 %) | |
restart and switch | N (%) | 0 (0.00 %) | 0 (0.00 %) | 0 (0.00 %) | |
not treated | N (%) | 75 (90.36 %) | 33 (84.62 %) | 42 (95.45 %) |
Plot
The plotDrugRestart()
function creates a bar plot
depicting the percentage of drug restart events for each cohort,
stratum, and follow-up time (specified in the variable_name column of
the summarised result). This function offers customisation options for
colours, facetting, and handling of strata.
results |>
plotDrugRestart(
facetX = "variable_name",
facetY = c("cohort_name", "strata"),
colour = "variable_level",
splitStrata = TRUE
)
#> ! There are duplicated points, not included either in facetX, facetY or colour:
#> • treatment: 180 days, 365 days, End of observation.