Creating and Using New Anti-Cancer Start Date

Introduction

In Oncology trials, for censoring the patients for any time-to-event analysis (e.g., progression free survival analysis, duration of response, etc.), it is necessary to check if the patients have started any new anti-cancer therapy. Anti-cancer therapy generally includes radiation therapy, cancer related surgery and any systemic anti-cancer therapy such as chemotherapy, t-cell therapy, etc. These therapies can be collected on a prior or on-treatment CRF pages, with radiation and surgery being mapped to the SDTM PR domain and systemic anti-cancer therapy being mapped to the SDTM CM domain. Collection and mapping may vary with each company and it is important that only on-treatment therapies are considered for the censoring of time-to-event. Generally, if the patients start a new anti-cancer therapy that were on-treatment, they should be discontinued from the study treatment and no further efficacy assessments should be performed.

This article describes a process for creating a new anti-cancer start date from a single and multiple source SDTMs.

Programming Workflow

Read in Data

To start, all data frames needed for the creation of the new anti-cancer therapy start date (NACTDT) should be read into the environment. This will be a company specific process. Some of the data frames needed may be CM and PR.

For example purpose, CM and PR has been generated (based on CDISC Pilot test data), with oncology specific test data.

library(admiral)
library(pharmaverseadam)
library(dplyr)

data("adsl")
adsl_onco <- adsl
data("adrs_onco")

cm <- tribble(
  ~STUDYID, ~USUBJID, ~CMCAT, ~CMSCAT, ~CMTRT, ~CMSTDTC,
  "CDISCPILOT01", "01-701-1015", "PRIOR TREATMENT", "CHEMOTHERAPY", "DEXRAZOXANE", NA,
  "CDISCPILOT01", "01-701-1015", "ON TREATMENT", "CHEMOTHERAPY", "DEXROZOXANE", "2014-07-02",
  "CDISCPILOT01", "01-701-1015", "ON TREATMENT", "CHEMOTHERAPY", "DEXROZOXANE", "2014-06-19",
  "CDISCPILOT01", "01-701-1028", "PRIOR TREATMENT", "CHEMOTHERAPY", "METHOTREXATE", NA,
  "CDISCPILOT01", "01-701-1028", "ON TREATMENT", "CHEMOTHERAPY", "METHOTREXATE", "2014-01-14",
  "CDISCPILOT01", "01-701-1034", "PRIOR TREATMENT", "CHEMOTHERAPY", "OLAPARIB", NA,
  "CDISCPILOT01", "01-701-1034", "ON TREATMENT", "CHEMOTHERAPY", "OLAPARIB", "2014-12-30",
  "CDISCPILOT01", "01-701-1097", "PRIOR TREATMENT", "CHEMOTHERAPY", "TEMODAL", NA,
  "CDISCPILOT01", "01-701-1097", "ON TREATMENT", "CHEMOTHERAPY", "TEMODAL", "2013-12-31",
)

pr <- tribble(
  ~STUDYID, ~USUBJID, ~PRCAT, ~PRSCAT, ~PRTRT, ~PRSTDTC,
  "CDISCPILOT01", "01-701-1015", "CANCER RELATED", "ON TREATMENT", "SURGERY", "2014-06-18",
  "CDISCPILOT01", "01-701-1034", "CANCER RELATED", "ON TREATMENT", "SURGERY", "2014-12-16",
  "CDISCPILOT01", "01-701-1028", "CANCER RELATED", "PRIOR TREATMENT", "SURGERY", NA,
)

Single Source

To derive the New Anti-Cancer Therapy start date with data from a single source, the function admiral::derive_vars_merged() can be used. If numeric date is required, admiral::convert_dtc_to_dt , or if time part is needed, admiral::convert_dtc_to_dtm() can be used as part of an expression for the new_vars argument.

adsl <- derive_vars_merged(
  adsl_onco,
  dataset_add = cm,
  by_vars = get_admiral_option("subject_keys"),
  order = exprs(NACTDT),
  mode = "first",
  new_vars = exprs(NACTDT = convert_dtc_to_dt(CMSTDTC)),
  filter_add = CMSCAT == "CHEMOTHERAPY" & CMCAT == "ON TREATMENT"
)
USUBJID NACTDT
01-701-1015 2014-06-19
01-701-1028 2014-01-14
01-701-1034 2014-12-30
01-701-1097 2013-12-31

Multiple Sources - Prerequisite Steps

To derive the New Anti-Cancer Therapy start date with data from multiple sources, the function admiral::derive_vars_extreme_event() can be used.

Prerequisite

Prior to calling the function, an input event object must be created for each source dataset using admiral::event(). Within this function, any company-specific subsetting can be passed to the condition argument. If numeric version of the dates will be needed, admiral::convert_dtc_to_dt(), or if time part is needed, admiral::convert_dtc_to_dtm() can be used as part of an expression for the set_values_to argument.

cm_date <- event(
  dataset_name = "cm",
  condition = CMSCAT == "CHEMOTHERAPY" & CMCAT == "ON TREATMENT" & !is.na(CMSTDTC),
  set_values_to = exprs(NACTDT = convert_dtc_to_dt(CMSTDTC))
)

pr_date <- event(
  dataset_name = "pr",
  condition = PRCAT == "CANCER RELATED" & PRSCAT == "ON TREATMENT" & !is.na(PRSTDTC),
  set_values_to = exprs(NACTDT = convert_dtc_to_dt(PRSTDTC))
)

Multiple Sources - Derive New Anti-Cancer Start Date and Merge with ADSL

After completion of the prerequisite step, the new anti-cancer date can be derived while simultaneously adding it to ADSL.

adsl <- adsl_onco %>%
  derive_vars_extreme_event(
    by_vars = get_admiral_option("subject_keys"),
    order = exprs(NACTDT),
    new_vars = exprs(NACTDT),
    events = list(cm_date, pr_date),
    source_datasets = list(
      cm = cm,
      pr = pr
    ),
    mode = "first"
  )
USUBJID NACTDT
01-701-1015 2014-06-18
01-701-1028 2014-01-14
01-701-1034 2014-12-16
01-701-1097 2013-12-31

Using the New Anti-Cancer Therapy Date

Please refer to {admiralonco} Derive ANL01FL for an example on the usage of NACTDT. Additionally, {admiralonco} Creating Your Own Time-to-Event Source Objects may be referenced for case usage.

Derive Date Parameter

The {admiral} function admiral::derive_extreme_event() can be used for deriving parameter based on the first or last observation from single and multiple sources.

Based on individual company standards, this parameter may be added to an event or date dataset such as ADEVENT or ADDATES, which are generally intermediate datasets to ADTTE. For demonstration purpose, a new anti-cancer date parameter will be merged into ADRS. A list of event() objects is expected and this will contain the sources of the dates and any company specific filtering.

adrs <- derive_extreme_event(
  dataset = adrs_onco,
  events = list(
    event(
      dataset_name = "cm",
      condition = CMSCAT == "CHEMOTHERAPY" & CMCAT == "ON TREATMENT" & !is.na(CMSTDTC),
      set_values_to = exprs(
        ADT = convert_dtc_to_dt(CMSTDTC),
        AVALC = CMTRT
      )
    ),
    event(
      dataset_name = "pr",
      condition = PRCAT == "CANCER RELATED" & PRSCAT == "ON TREATMENT" & !is.na(PRSTDTC),
      set_values_to = exprs(
        ADT = convert_dtc_to_dt(PRSTDTC),
        AVALC = PRTRT
      )
    )
  ),
  source_datasets = list(cm = cm, pr = pr),
  by_vars = get_admiral_option("subject_keys"),
  order = exprs(ADT),
  mode = "first",
  set_values_to = exprs(
    PARAMCD = "NACTDT",
    PARAM = "New Anti-Cancer Therapy Start Date"
  )
)
USUBJID PARAMCD PARAM ADT AVALC
01-701-1015 NACTDT New Anti-Cancer Therapy Start Date 2014-06-18 SURGERY
01-701-1028 NACTDT New Anti-Cancer Therapy Start Date 2014-01-14 METHOTREXATE
01-701-1034 NACTDT New Anti-Cancer Therapy Start Date 2014-12-16 SURGERY
01-701-1097 NACTDT New Anti-Cancer Therapy Start Date 2013-12-31 TEMODAL