Case study: CTN

RCT

Data challenge R/Medicine 2024

Author

Chi Zhang

Published

March 25, 2024

Task overview see here

Questions of interest (examples)

Article describing the process: Odom 2023

Background information

SUD: substance use disorders; UDS: urine drug screening

Multiple categories for UDS variable

  • +: positive for substance
  • -: negative for substance
  • o: no sample
  • *: inconclusive or mixed results
  • _: no specimeen required per study design (weekend, holidays, pre-randomization)

TLFB: time-line followback: patient self-report with a standard schema

Interpret: +++++---+-----------o-

  • Positive at baseline (+)
  • challenging first month (++++)
  • second month only one relapse (—+)
  • remained abstinent from opioids for the reminder of the trial, with one single missing (o-)
library(CTNote)
usePattern_char <- "__++++*o-------+--+-o-o-o+o+oooooo"
measure_retention(usePattern_char)
[1] 28

CTN data

Study protocol

Three studies

  • CTN 30(Protocol): prescription opiate abuse treatment study. Randomized, outpatient study, whether adding additional drug counseling improves outcome. Two phases.
    • Tx0: Bup/Nx (buprenorphine/naloxone) + SMM (standard medical management)
    • Tx1: Bup/Nx + EMM (enhanced medical management)
    • phase 1 n=653, phase 2 n=360
    • primary finding: patients are likely to reduce opioid use during Bup/Nx treatment, however unsuccessful outcome is highly likely even after 12 weeks if tapering off treatment.
  • CTN 27(Protocol, Saxon 2013): Bup/Nx vs MET (methadone) on liver function. Randomized, open-label, multi-center, phase 4 study.
  • CTN 51 (Lee 2018): Bup/Nx vs XR-NTX naltrexone, effectiveness of pharmacotheerapeutic aids to recovery who completed detoxification and achieved short term abstinence. n=570
    • XR-NTX (n=283): induction hurdle, higher rate of 24-week relapse, fewer successfully initiated XR-NTX (204 of 283) than Bup/Nx (270 of 287)
    • for those inducted successfully, relapse rate is similar
    • relapse: 4 consecutive weeks of any non-study opioid use (UDS or report), or 7 consecutive days of self-reported use.

If want to know which subject belongs to which study, use CreateProtocolHistory() or everybody data to have project ID.

Opioids: Oxymorphone, Opium, Fentanyl, Hydromorphone, Codeine, Suboxone, Tramadol, Morphine, Buprenorphine, Hydrocodone, Opioid, Methadone, Oxycodone, Heroin

Times

  • day 0: consent signed
  • day of randomization (dr)
  • day of receiving first dose of study drug (dd)
  • induction delay: dr - dd (in terms of days, not weeks)
  • any day before dd is pre-treatment, even if participants are assigned to a treatment arm
    • pre-tx (baseline) / treatment period is defined by the first non-zero dose for the patient.

Endpoints (CTNote)

As of CTNote, there are three types of outcomes

Risk factors

datasets info

Data details

library(public.ctn0094data)
library(public.ctn0094extra)

# visit_imp <- public.ctn0094extra::derived_visitImputed
# eth <- public.ctn0094extra::derived_raceEthnicity

#visit_imp
#eth
induct_delay <- public.ctn0094extra::derived_inductDelay
induct_delay
# A tibble: 2,492 × 3
     who treatment            inductDelay
   <int> <fct>                      <dbl>
 1     2 Outpatient BUP + EMM           0
 2     3 Inpatient BUP                 NA
 3     4 Inpatient NR-NTX               0
 4     6 Outpatient BUP + SMM           0
 5     7 Inpatient NR-NTX               1
 6     9 Inpatient NR-NTX              NA
 7    10 Outpatient BUP                 0
 8    11 Methadone                      0
 9    12 Outpatient BUP                 0
10    13 Outpatient BUP                 0
# ℹ 2,482 more rows

Weekly pattern data. Week 1 starts the day after randomisation or signed consent, depending whether patients are randomized or not. Negative time stamps suggest prior randomization (or consent).

pattern_o <- public.ctn0094extra::derived_weeklyOpioidPattern
pattern_o
# A tibble: 3,560 × 8
     who startWeek randWeek1 randWeek2 endWeek Baseline Phase_1          Phase_2
   <int>     <dbl>     <dbl>     <dbl>   <dbl> <chr>    <chr>            <chr>  
 1     1        -4        NA        NA      15 _____    ooooooooooooooo  ""     
 2     2        -5         0        NA      14 ____++   ----oo-o-o-o+o   ""     
 3     3        -6         0        NA      23 _______  o-ooo-ooooooooo… ""     
 4     4        -4         0        NA      24 ____-    ---------------… ""     
 5     5        -4        NA        NA      15 _____    ooooooooooooooo  ""     
 6     6        -6         0        NA      14 ____+_+  -ooooooooooooo   ""     
 7     7        -5         0        NA      24 _____+   ----ooooooooooo… ""     
 8     8        -4        NA        NA      25 _____    ooooooooooooooo… ""     
 9     9        -6         0        NA      22 ____+__  ooooooooooooooo… ""     
10    10        -7         0        NA      22 _____+_- --o--*++o-+++++… ""     
# ℹ 3,550 more rows
pattern_t <- public.ctn0094extra::derived_weeklyTLFBPattern
pattern_t
# A tibble: 3,560 × 8
     who startWeek randWeek1 randWeek2 endWeek Baseline Phase_1          Phase_2
   <int>     <dbl>     <dbl>     <dbl>   <dbl> <chr>    <chr>            <chr>  
 1     1        -4        NA        NA      14 _____    oooooooooooooo   ""     
 2     2        -5         0        NA      14 ++++++   -----------*+-   ""     
 3     3        -6         0        NA      23 ++++*--  ----*----------… ""     
 4     4        -4         0        NA      24 +++--    -------------*-… ""     
 5     5        -4        NA        NA      14 _____    oooooooooooooo   ""     
 6     6        -6         0        NA      14 +++++++  --------------   ""     
 7     7        -5         0        NA      24 _+++--   ---------------… ""     
 8     8        -4        NA        NA      24 _____    ooooooooooooooo… ""     
 9     9        -6         0        NA      22 +++**--  ---------------… ""     
10    10        -7         0        NA      22 --*+++++ ---------++-+-*… ""     
# ℹ 3,550 more rows

Outcomes (relapse)

out <- CTNote::outcomesCTN0094
out$ctn0094_relapse_event |> table() # relapse

   0    1 
 619 2941