Skip to contents

Introduction

In this vignette we will go through two common approaches for assessing treatment adherence that can be performed after creating drug cohorts. The first approach is to assess time-to-discontinuation using survival methods, while the second is to estimate the proportion of patients covered.

Adherence to amoxicillin

For example, let’s say we would like to study adherence among new users of amoxicillin over the first 90-days of use. For this we can first create our amoxicillin study cohort. Here we’ll use the synthetic Eunomia dataset to show how this could be done.

library(DrugUtilisation)

db <- DBI::dbConnect(duckdb::duckdb(),
  dbdir = CDMConnector::eunomia_dir()
)
cdm <- CDMConnector::cdm_from_con(
  con = db,
  cdm_schema = "main",
  write_schema = "main",
  cdm_name = "Eunomia"
)

cdm <- generateIngredientCohortSet(
  cdm = cdm,
  name = "amoxicillin",
  ingredient = "amoxicillin",
  gapEra = 7
)

Time-to-discontinuation

We can estimate Kaplan-Meier survival curves we can use estimateSingleEventSurvival from the CohortSurvival package, with the follow-up beginning from an individual’s cohort start date and discontinuation occurring at their cohort end date. As the outcome washout is set to Inf we’ll only be considering the first cohort entry for an individual. It is important to note that because the survival analysis is focused on a single cohort entry, with the cohort end date taken to indicate treatment discontinuation, the gap era used above when creating the drug cohort can often have an important impact on the results.

discontinuationSummary <- CohortSurvival::estimateSingleEventSurvival(
  cdm = cdm,
  targetCohortTable = "amoxicillin",
  outcomeCohortTable = "amoxicillin",
  outcomeDateVariable = "cohort_end_date",
  outcomeWashout = Inf,
  followUpDays = 90,
  eventGap = 30
)

We can plot our study result like so:

CohortSurvival::plotSurvival(discontinuationSummary)

Or we can similarly create a table summarising the result

CohortSurvival::tableSurvival(discontinuationSummary)
CDM name Cohort Outcome name Number records Number events Median survival (95% CI) Restricted mean survival (SE)
Eunomia 723 amoxicillin 723 amoxicillin 2,126 2,087 14.00 (14.00, 14.00) 17.00 (0.00)

We can also easily stratify our results. Here we add patient demographics to our cohort table using the PatientProfiles packages and then stratify results by age group and sex.

cdm$amoxicillin <- cdm$amoxicillin |>
  PatientProfiles::addDemographics(
    ageGroup = list(c(0, 40), c(41, Inf)), name = "amoxicillin"
  )

discontinuationSummary <- CohortSurvival::estimateSingleEventSurvival(
  cdm = cdm,
  strata = list(c("age_group"), c("sex")),
  targetCohortTable = "amoxicillin",
  outcomeCohortTable = "amoxicillin",
  outcomeDateVariable = "cohort_end_date",
  followUpDays = 90,
  eventGap = 30
)

Again we could present our results in a plot or a table.

CohortSurvival::plotSurvival(discontinuationSummary, facet = "strata_level")

CohortSurvival::tableSurvival(discontinuationSummary)
CDM name Cohort Age group Sex Outcome name Number records Number events Median survival (95% CI) Restricted mean survival (SE)
Eunomia 723 amoxicillin Overall Overall 723 amoxicillin 2,126 2,087 14.00 (14.00, 14.00) 17.00 (0.00)
0 to 40 Overall 723 amoxicillin 1,806 1,774 14.00 (14.00, 14.00) 17.00 (0.00)
41 or above Overall 723 amoxicillin 320 313 14.00 (14.00, 14.00) 17.00 (1.00)
Overall Female 723 amoxicillin 1,059 1,039 14.00 (14.00, 14.00) 17.00 (0.00)
Male 723 amoxicillin 1,067 1,048 14.00 (14.00, 14.00) 17.00 (0.00)

Proportion of patients covered

Estimating the proportion of amoxicillin patients covered offers an alternative approach for describing treatment adherence. Here for each day following initiation (taken as the first cohort entry for an individual) we estimate the proportion of patients that have an ongoing cohort entry among those who are still in observation at that time. Unlike with the time-to-discontinuation approach shown above, estimating proportion of patients covered allows for individuals to have re-initiate the drug after some break. Consequently this method is typically far less sensitive to the choice of gap era used when creating the drug cohort.

ppcSummary <- cdm$amoxicillin |>
  summariseProportionOfPatientsCovered(followUpDays = 90)

Like with our survival estimates, we can quickly create a plot of our results

Similarly, we can also stratify our results in a similar way.

ppcSummary <- cdm$amoxicillin |>
  summariseProportionOfPatientsCovered(
    strata = list(c("age_group"), c("sex")),
    followUpDays = 90
  )
plotProportionOfPatientsCovered(ppcSummary,
  facet = "strata_level"
)