Skip to contents
library(metalite)
library(metalite.sl)
## Error in get(paste0(generic, ".", class), envir = get_method_env()) : 
##   object 'type_sum.accel' not found

Create Exposure Duration Table

The exposure duration analysis aims to provide table to summarize by each identified duration category. The development of exposure duration analysis involves functions:

  • meta_sl_exposure_example: build the metadata (meta object) for analysis.
  • prepare_exp_duration: prepare analysis raw datasets.
  • format_exp_duration: prepare analysis outdata with proper format.
  • rtf_exp_duration: transfer (mock) output dataset to RTF table.

Build a metadata

There are two steps in meta_sl_exposure_example function in order to build the metadata (meta object): processing the ADaM dataset and save meta information for A&R reporting.

Step1: ADEXSUM, the ADaM dataset for Drug Exposrue Summary Data, is utilized to:

  • Sum up duration by STUDYID SITENUM USUBJID SUBJID APERIOD EXTRT ADOSEFRM PARAMCD.
  • Subset the exposure data by upcase(trim(left(paramcd))) = "TRTDUR".
  • Get the exposure duration adexsum$AVAL for all participants.
  • Assign duration category adexsum$EXDURGR i.e.”>=1 day”, “>=7 days”,“>=28 days”, “>=12 weeks” and “>=24 weeks”.
adsl <- r2rtf::r2rtf_adsl
adexsum <- data.frame(USUBJID = adsl$USUBJID)
adexsum$TRTA <- factor(adsl$TRT01A,
  levels = c("Placebo", "Xanomeline Low Dose", "Xanomeline High Dose"),
  labels = c("Placebo", "Low Dose", "High Dose")
)

adexsum$APERIODC <- "Base"
adexsum$APERIOD <- 1

set.seed(123) # Set a seed for reproducibility
adexsum$AVAL <- sample(x = 0:(24 * 7), size = length(adexsum$USUBJID), replace = TRUE)
adexsum$EXDURGR <- "not treated"
adexsum$EXDURGR[adexsum$AVAL >= 1] <- ">=1 day"
adexsum$EXDURGR[adexsum$AVAL >= 7] <- ">=7 days"
adexsum$EXDURGR[adexsum$AVAL >= 28] <- ">=28 days"
adexsum$EXDURGR[adexsum$AVAL >= 12 * 7] <- ">=12 weeks"
adexsum$EXDURGR[adexsum$AVAL >= 24 * 7] <- ">=24 weeks"

adexsum$EXDURGR <- factor(adexsum$EXDURGR,
  levels = c("not treated", ">=1 day", ">=7 days", ">=28 days", ">=12 weeks", ">=24 weeks")
)
unique(adexsum$EXDURGR)
## [1] >=12 weeks  >=7 days    >=28 days   >=1 day     >=24 weeks  not treated
## Levels: not treated >=1 day >=7 days >=28 days >=12 weeks >=24 weeks

Step2: Save analysis plan and metadata(parameter and analysis) information, then build meta object.

plan <- metalite::plan(
  analysis = "exp_dur", population = "apat",
  observation = "apat", parameter = "expdur"
)

meta <- metalite::meta_adam(
  population = adexsum,
  observation = adexsum
) |>
  metalite::define_plan(plan) |>
  metalite::define_population(
    name = "apat",
    group = "TRTA",
    subset = quote(APERIOD == 1 & AVAL > 0)
  ) |>
  metalite::define_parameter(
    name = "expdur",
    var = "AVAL",
    label = "Exposure Duration (Days)",
    vargroup = "EXDURGR"
  ) |>
  metalite::define_analysis(
    name = "exp_dur",
    title = "Summary of Exposure Duration",
    label = "exposure duration table"
  ) |>
  metalite::meta_build()

Analysis preparation

The input of the function prepare_exp_duration() is a meta object created by the metalite package. The resulting output comprises a collection of raw datasets for analysis and reporting.

outdata <- prepare_exp_duration(meta)
outdata
## List of 14
##  $ meta           :List of 7
##  $ population     : chr "apat"
##  $ observation    : chr "apat"
##  $ parameter      : chr "expdur"
##  $ n              :'data.frame': 1 obs. of  6 variables:
##  $ order          : NULL
##  $ group          : chr "TRTA"
##  $ reference_group: NULL
##  $ char_n         :List of 1
##  $ char_var       : chr "AVAL"
##  $ char_prop      :List of 1
##  $ var_type       :List of 1
##  $ group_label    : Factor w/ 3 levels "Placebo","Low Dose",..: 1 3 2
##  $ analysis       : chr "exp_dur"

Number of participants in population

outdata$n[, 1:5]
##                         name n_1 n_2 n_3 n_9999
## 1 Participants in population  86  83  84    253

Number of participants in each duration category

charn <- data.frame(outdata$char_n[1])
head(charn[, 1:5], 6)
##          name Placebo Low.Dose High.Dose Total
## 1 not treated       0        0         0     0
## 2     >=1 day       2        4         3     9
## 3    >=7 days      13       11         9    33
## 4   >=28 days      31       20        27    78
## 5  >=12 weeks      39       48        45   132
## 6  >=24 weeks       1        0         0     1

Proportion of participants in each duration category

charp <- data.frame(outdata$char_prop[1])
head(charp[, 1:5], 6)
##          name   Placebo  Low.Dose High.Dose      Total
## 1 not treated  0.000000  0.000000  0.000000  0.0000000
## 2     >=1 day  2.325581  4.819277  3.571429  3.5573123
## 3    >=7 days 15.116279 13.253012 10.714286 13.0434783
## 4   >=28 days 36.046512 24.096386 32.142857 30.8300395
## 5  >=12 weeks 45.348837 57.831325 53.571429 52.1739130
## 6  >=24 weeks  1.162791  0.000000  0.000000  0.3952569

Statistical summary of exposure duration for each treatment

chars <- data.frame(outdata$char_n[1])
tail(chars[, 1:5], 8)
##        name         Placebo    Low.Dose       High.Dose     Total
## 8      Mean            81.5        90.8            87.6      86.6
## 9        SD            49.1        51.3            48.8      49.7
## 10       SE             5.3         5.6             5.3       3.1
## 11   Median            76.0        93.0            90.0      88.0
## 12      Min             3.0         1.0             4.0       1.0
## 13      Max           168.0       167.0           167.0     168.0
## 14 Q1 to Q3 41.25 to 123.25 48 to 137.5 44.75 to 129.25 44 to 133
## 15    Range        3 to 168    1 to 167        4 to 167  1 to 168

Format output

format_exp_duration to prepare analysis dataset before generate RTF output

tbl <- format_exp_duration(outdata, display_col = c("n", "prop", "total"))
head(tbl$tbl)
##                         name n_1    p_1 n_2    p_2 n_3    p_3 n_9999 p_9999
## 1 Participants in population  86   <NA>  83   <NA>  84   <NA>    253   <NA>
## 2                not treated   0  (0.0)   0  (0.0)   0  (0.0)      0  (0.0)
## 3                    >=1 day   2  (2.3)   4  (4.8)   3  (3.6)      9  (3.6)
## 4                   >=7 days  13 (15.1)  11 (13.3)   9 (10.7)     33 (13.0)
## 5                  >=28 days  31 (36.0)  20 (24.1)  27 (32.1)     78 (30.8)
## 6                 >=12 weeks  39 (45.3)  48 (57.8)  45 (53.6)    132 (52.2)
##                  var_label
## 1                    -----
## 2 Exposure Duration (Days)
## 3 Exposure Duration (Days)
## 4 Exposure Duration (Days)
## 5 Exposure Duration (Days)
## 6 Exposure Duration (Days)

Output as RTF

rtf_exp_duration to generate RTF output

outdata <- format_exp_duration(outdata, display_col = c("n", "prop", "total")) |>
  rtf_exp_duration(
    source = "Source:  [CDISCpilot: adam-adexsum]",
    path_outdata = tempfile(fileext = ".Rdata"),
    path_outtable = "outtable/exp0duration.rtf"
  )
## The outdata is saved in/tmp/Rtmpq3TSKS/file19834c9a32ee.Rdata
## The output is saved in/home/runner/work/metalite.sl/metalite.sl/vignettes/outtable/exp0duration.rtf