TL Catalog
  1. Tables
  2. Exposure
  3. TSIEX11
  • Introduction

  • Index

  • Tables
    • Adverse Events
      • TSFAE01A
      • TSFAE01B
      • TSFAE02
      • TSFAE02A
      • TSFAE03
      • TSFAE03A
      • TSFAE04
      • TSFAE04A
      • TSFAE05
      • TSFAE05A
      • TSFAE06A
      • TSFAE06B
      • TSFAE07A
      • TSFAE07B
      • TSFAE08
      • TSFAE09
      • TSFAE10
      • TSFAE11
      • TSFAE12
      • TSFAE13
      • TSFAE14
      • TSFAE15
      • TSFAE16
      • TSFAE17A
      • TSFAE17B
      • TSFAE17C
      • TSFAE17D
      • TSFAE19A
      • TSFAE19B
      • TSFAE19C
      • TSFAE19D
      • TSFAE20A
      • TSFAE20B
      • TSFAE20C
      • TSFAE21A
      • TSFAE21B
      • TSFAE21C
      • TSFAE21D
      • TSFAE22A
      • TSFAE22B
      • TSFAE22C
      • TSFAE23A
      • TSFAE23B
      • TSFAE23C
      • TSFAE23D
      • TSFAE24A
      • TSFAE24B
      • TSFAE24C
      • TSFAE24D
      • TSFAE24F
      • TSFDTH01
    • Clinical Laboratory Evaluation
      • TSFLAB01
      • TSFLAB01A
      • TSFLAB02
      • TSFLAB02A
      • TSFLAB02B
      • TSFLAB03
      • TSFLAB03A
      • TSFLAB04A
      • TSFLAB04B
      • TSFLAB05
      • TSFLAB06
      • TSFLAB07
    • Demographic
      • TSIDEM01
      • TSIDEM02
      • TSIMH01
    • Disposition of Subjects
      • TSIDS01
      • TSIDS02
      • TSIDS02A
    • Electrocardiograms
      • TSFECG01
      • TSFECG01A
      • TSFECG02
      • TSFECG03
      • TSFECG04
      • TSFECG05
    • Exposure
      • TSIEX01
      • TSIEX02
      • TSIEX03
      • TSIEX04
      • TSIEX06
      • TSIEX07
      • TSIEX08
      • TSIEX09
      • TSIEX10
      • TSIEX11
    • Pharmacokinetics
      • TPK01A
      • TPK01B
      • TPK02
      • TPK03
    • Prior and Concomitant Therapies
      • TSICM01
      • TSICM02
      • TSICM03
      • TSICM04
      • TSICM05
      • TSICM06
      • TSICM07
      • TSICM08
    • Vital Signs and Physical Findings
      • TSFVIT01
      • TSFVIT01A
      • TSFVIT02
      • TSFVIT03
      • TSFVIT04
      • TSFVIT05
      • TSFVIT06
  • Listings
    • Adverse Events
      • LSFAE01
      • LSFAE02
      • LSFAE03
      • LSFAE04
      • LSFAE05
      • LSFAE06A
      • LSFAE06B
      • LSFDTH01
    • Clinical Laboratory Evaluation
      • LSFLAB01
    • Demographic
      • LSIDEM01
      • LSIDEM02
      • LSIMH01
    • Disposition of Subjects
      • LSIDS01
      • LSIDS02
      • LSIDS03
      • LSIDS04
      • LSIDS05
    • Electrocardiograms
      • LSFECG01
      • LSFECG02
    • Exposure
      • LSIEX01
      • LSIEX02
      • LSIEX03
    • Prior and Concomitant Therapies
      • LSICM01
    • Vital Signs and Physical Findings
      • LSFVIT01
      • LSFVIT02

  • Reproducibility

  • Changelog

On this page

  • Output
  • Edit this page
  • Report an issue
  1. Tables
  2. Exposure
  3. TSIEX11

TSIEX11

Incidence and Reason for Treatment Modification for Infusions


Output

  • Preview
Code
# Program Name:              tsiex11.R

# Prep Environment

library(envsetup)
library(tern)
library(dplyr)
library(rtables)
library(junco)

# Define script level parameters:

# - Define output ID and file location

tblid <- "TSIEX11"
fileid <- tblid
tab_titles <- get_titles_from_file(input_path = '../../_data/', tblid)
string_map <- default_str_map


trtvar <- "TRT01A"
popfl <- "SAFFL"
combined_colspan_trt <- TRUE
ctrl_grp <- "Placebo"

if (combined_colspan_trt == TRUE) {
  # Set up levels and label for the required combined columns
  add_combo <- add_combo_facet(
    "Combined",
    label = "Combined",
    levels = c("Xanomeline High Dose", "Xanomeline Low Dose")
  )

  # choose if any facets need to be removed - e.g remove the combined column for placebo
  rm_combo_from_placebo <- cond_rm_facets(
    facets = "Combined",
    ancestor_pos = NA,
    value = " ",
    split = "colspan_trt"
  )

  mysplit <- make_split_fun(post = list(add_combo, rm_combo_from_placebo))
}

# Process Data:

# Read in required data
adsl <- pharmaverseadamjnj::adsl %>%
  filter(!!rlang::sym(popfl) == "Y") %>%
  select(STUDYID, USUBJID, all_of(trtvar), all_of(popfl))

adsl$colspan_trt <- factor(
  ifelse(adsl[[trtvar]] == ctrl_grp, " ", "Active Study Agent"),
  levels = c("Active Study Agent", " ")
)


core_ex_vars <- c(
  "USUBJID",
  "AACTPR",
  "AACTDU",
  "AADJ",
  "AADJP",
  "AVISIT",
  "AVISITN"
)

adex1 <- pharmaverseadamjnj::adex %>%
  filter(!grepl("UNSCHEDULED", AVISIT, ignore.case = TRUE)) %>%
  select(all_of(core_ex_vars))

# Convert AVISIT to sentence case and apply levels to maintain ordering
avisit_levs <- stringr::str_to_sentence(levels(adex1$AVISIT))
adex1$AVISIT <- stringr::str_to_sentence(adex1$AVISIT)
adex1$AVISIT <- factor(adex1$AVISIT, levels = avisit_levs)


adex1a <- adex1 %>%
  mutate(
    AACTx = AACTPR,
    AADJx = AADJ,
    XXX = "Prior to infusion"
  )

adex1b <- adex1 %>%
  mutate(
    AACTx = AACTDU,
    AADJx = AADJP,
    XXX = "During infusion"
  )

adex1c <- bind_rows(adex1a, adex1b)
adex1c$XXX <- factor(
  adex1c$XXX,
  levels = c("Prior to infusion", "During infusion")
)

### Overall visit

adex2 <- pharmaverseadamjnj::adex %>%
  mutate(AVISIT = "Overall") %>%
  select(all_of(core_ex_vars))

adex2a <- adex2 %>%
  mutate(
    AACTx = AACTPR,
    AADJx = AADJ,
    XXX = "Prior to infusion"
  )

adex2b <- adex2 %>%
  mutate(
    AACTx = AACTDU,
    AADJx = AADJP,
    XXX = "During infusion"
  )

adex2c <- bind_rows(adex2a, adex2b)
adex2c$XXX <- factor(
  adex2c$XXX,
  levels = c("Prior to infusion", "During infusion")
)

adex <- bind_rows(adex1c, adex2c)

# control levels of AVISIT
adex$AVISIT <- factor(adex$AVISIT, levels = c("Overall", levels(adex1$AVISIT)))

# control levels of new variables AACTx and AADJx
aact_levels <- c(
  "DOSE REDUCED COMPARED TO PRIOR INFUSION",
  "INFUSION DELAYED WITHIN THE CYCLE",
  "INFUSION RATE DECREASED COMPARED TO PRIOR INFUSION",
  "INFUSION SKIPPED (AND NOT MADE UP)",
  "STUDY DRUG PERMANENTLY DISCONTINUED",
  "INFUSION ABORTED",
  "INFUSION INTERRUPTED",
  "INFUSION RATE INCREASED"
)

aact_labels <- c(
  "Dose reduced",
  "Infusion delayed",
  "Infusion rate decreased",
  "Infusion skipped",
  "Study agent permanently discontinued",
  "Infusion aborted",
  "Infusion interrupted",
  "Infusion rate increased"
)

adex$AACTx <- factor(
  as.character(adex$AACTx),
  levels = aact_levels,
  labels = aact_labels
)

adex$AADJx <- factor(adex$AADJx, levels = levels(c(adex$AADJ, adex$AADJP)))

### Note the following levels are not used on the table, not sure if this is OK ---
### this is out of scope for template script
### how standard is this table and the levels of the variables on the current dataset + standard ADaM???
setdiff(levels(adex$AACTPR), aact_levels)
setdiff(levels(adex$AACTDU), aact_levels)


# join data together
ex <- adex %>% left_join(., adsl, by = c("USUBJID"))

### limit visits to some for testing
ex2 <- ex %>%
  filter(AVISIT %in% levels(ex$AVISIT)[1:4]) %>%
  mutate(AVISIT = factor(as.character(AVISIT), levels = levels(ex$AVISIT)[1:4]))

# Define layout and build table:

colspan_trt_map <- create_colspan_map(
  adsl,
  non_active_grp = ctrl_grp,
  non_active_grp_span_lbl = " ",
  active_grp_span_lbl = "Active Study Agent",
  colspan_var = "colspan_trt",
  trt_var = trtvar
)
ref_path <- c("colspan_trt", " ", trtvar, ctrl_grp)


split_map <- tribble(
  ~XXX                , ~AACTx                                 ,
  "Prior to infusion" , "Dose reduced"                         ,
  "Prior to infusion" , "Infusion delayed"                     ,
  "Prior to infusion" , "Infusion rate decreased"              ,
  "Prior to infusion" , "Infusion skipped"                     ,
  "Prior to infusion" , "Study agent permanently discontinued" ,
  "During infusion"   , "Infusion aborted"                     ,
  "During infusion"   , "Infusion interrupted"                 ,
  "During infusion"   , "Infusion rate increased"
)


extra_args1 <- list(
  .stats = "count_unique_fraction",
  denom = "n_parentdf",
  denom_by = "AVISIT",
  drop_levels = TRUE
)

lyt <- rtables::basic_table(
  top_level_section_div = " ",
  show_colcounts = TRUE,
  colcount_format = "N=xx"
) %>%
  split_cols_by(
    "colspan_trt",
    split_fun = trim_levels_to_map(map = colspan_trt_map)
  )

if (combined_colspan_trt == TRUE) {
  lyt <- lyt %>%
    split_cols_by(trtvar, split_fun = mysplit)
} else {
  lyt <- lyt %>%
    split_cols_by(trtvar)
}


lyt <- lyt %>%
  split_rows_by(
    "AVISIT",
    split_label = "Time Point",
    split_fun = drop_split_levels,
    label_pos = "topleft",
    child_labels = "visible",
    indent_mod = 0L,
    section_div = c(" ")
  ) %>%
  split_rows_by(
    "XXX",
    split_fun = keep_split_levels(c(
      "Prior to infusion",
      "During infusion"
    )),
    section_div = " ",
    child_labels = "visible"
  ) %>%
  summarize_row_groups(
    "XXX",
    cfun = a_freq_j,
    extra_args = list(.stats = "n_df", label = "N")
  ) %>%
  split_rows_by(
    "AACTx",
    split_fun = trim_levels_to_map(map = split_map),
    section_div = " "
  ) %>%
  summarize_row_groups("AACTx", cfun = a_freq_j, extra_args = extra_args1) %>%
  analyze("AADJx", afun = a_freq_j, extra_args = extra_args1) %>%
  append_topleft("  Time Relative to Infusion") %>%
  append_topleft("    Modification, n (%)")

result <- build_table(lyt, ex, alt_counts_df = adsl)

# Prune table to remove all the rows with 0 counts or no data to report across all sections

result <- prune_table(result, prune_func = prune_empty_level)

# Add titles and footnotes:

result <- set_titles(result, tab_titles)

# Convert to tbl file and output table

tt_to_tlgrtf(string_map = string_map, tt = result, file = fileid, orientation = "portrait")

TSIEX11: Incidence and Reason for Treatment Modification for Infusions; Safety Analysis Set (Study jjcs - core)

Time Point

Active Study Agent

Time Relative to Infusion

Xanomeline High Dose

Xanomeline Low Dose

Combined

Placebo

Modification, n (%)

N=53

N=73

N=126

N=59

Overall

Prior to infusion

N

53

73

126

59

Infusion delayed

12 (22.6%)

20 (27.4%)

32 (25.4%)

13 (22.0%)

Other

1 (1.9%)

0

1 (0.8%)

0

Study agent permanently
 discontinued

13 (24.5%)

16 (21.9%)

29 (23.0%)

24 (40.7%)

Adverse Event

1 (1.9%)

0

1 (0.8%)

0

During infusion

N

53

73

126

59

Infusion interrupted

19 (35.8%)

24 (32.9%)

43 (34.1%)

19 (32.2%)

Adverse Event

1 (1.9%)

0

1 (0.8%)

0

Week 2

Prior to infusion

N

53

52

105

56

Study agent permanently
 discontinued

9 (17.0%)

3 (5.8%)

12 (11.4%)

9 (16.1%)

Adverse Event

1 (1.9%)

0

1 (1.0%)

0

During infusion

N

53

52

105

56

Infusion interrupted

12 (22.6%)

12 (23.1%)

24 (22.9%)

11 (19.6%)

Adverse Event

1 (1.9%)

0

1 (1.0%)

0

Week 24

Prior to infusion

N

20

15

35

40

Infusion delayed

5 (25.0%)

2 (13.3%)

7 (20.0%)

5 (12.5%)

Other

1 (5.0%)

0

1 (2.9%)

0

Note: For ‘Overall’, subjects can only be counted once in each category.

Note: Includes subjects who had any dose modifications during treatment.

Download RTF file

TSIEX10
TPK01A
Source Code
---
title: TSIEX11
subtitle: Incidence and Reason for Treatment Modification for Infusions
---

------------------------------------------------------------------------

{{< include ../../_utils/envir_hook.qmd >}}

```{r setup, echo = FALSE, warning = FALSE, message = FALSE}
options(docx.add_datetime = FALSE, tidytlg.add_datetime = FALSE)
envsetup_config_name <- "default"

# Path to the combined config file
envsetup_file_path <- file.path("../..", "envsetup.yml")

Sys.setenv(ENVSETUP_ENVIRON = '')
library(envsetup)
loaded_config <- config::get(config = envsetup_config_name, file = envsetup_file_path)
envsetup::rprofile(loaded_config)


dpscomp <- compound
dpspdr <- paste(protocol,dbrelease,rpteff,sep="__")

aptcomp <- compound
aptpdr <- paste(protocol,dbrelease,rpteff,sep="__")

###### Study specific updates (formerly in envre)

dpscomp <- "standards"
dpspdr <- "jjcs__NULL__jjcs - core"

apt <- FALSE
library(junco)
default_str_map <- rbind(default_str_map, c("&ctcae", "5.0"))

```

## Output

:::: panel-tabset
## {{< fa regular file-lines sm fw >}} Preview

```{r variant1, results='hide', warning = FALSE, message = FALSE}

# Program Name:              tsiex11.R

# Prep Environment

library(envsetup)
library(tern)
library(dplyr)
library(rtables)
library(junco)

# Define script level parameters:

# - Define output ID and file location

tblid <- "TSIEX11"
fileid <- tblid
tab_titles <- get_titles_from_file(input_path = '../../_data/', tblid)
string_map <- default_str_map


trtvar <- "TRT01A"
popfl <- "SAFFL"
combined_colspan_trt <- TRUE
ctrl_grp <- "Placebo"

if (combined_colspan_trt == TRUE) {
  # Set up levels and label for the required combined columns
  add_combo <- add_combo_facet(
    "Combined",
    label = "Combined",
    levels = c("Xanomeline High Dose", "Xanomeline Low Dose")
  )

  # choose if any facets need to be removed - e.g remove the combined column for placebo
  rm_combo_from_placebo <- cond_rm_facets(
    facets = "Combined",
    ancestor_pos = NA,
    value = " ",
    split = "colspan_trt"
  )

  mysplit <- make_split_fun(post = list(add_combo, rm_combo_from_placebo))
}

# Process Data:

# Read in required data
adsl <- pharmaverseadamjnj::adsl %>%
  filter(!!rlang::sym(popfl) == "Y") %>%
  select(STUDYID, USUBJID, all_of(trtvar), all_of(popfl))

adsl$colspan_trt <- factor(
  ifelse(adsl[[trtvar]] == ctrl_grp, " ", "Active Study Agent"),
  levels = c("Active Study Agent", " ")
)


core_ex_vars <- c(
  "USUBJID",
  "AACTPR",
  "AACTDU",
  "AADJ",
  "AADJP",
  "AVISIT",
  "AVISITN"
)

adex1 <- pharmaverseadamjnj::adex %>%
  filter(!grepl("UNSCHEDULED", AVISIT, ignore.case = TRUE)) %>%
  select(all_of(core_ex_vars))

# Convert AVISIT to sentence case and apply levels to maintain ordering
avisit_levs <- stringr::str_to_sentence(levels(adex1$AVISIT))
adex1$AVISIT <- stringr::str_to_sentence(adex1$AVISIT)
adex1$AVISIT <- factor(adex1$AVISIT, levels = avisit_levs)


adex1a <- adex1 %>%
  mutate(
    AACTx = AACTPR,
    AADJx = AADJ,
    XXX = "Prior to infusion"
  )

adex1b <- adex1 %>%
  mutate(
    AACTx = AACTDU,
    AADJx = AADJP,
    XXX = "During infusion"
  )

adex1c <- bind_rows(adex1a, adex1b)
adex1c$XXX <- factor(
  adex1c$XXX,
  levels = c("Prior to infusion", "During infusion")
)

### Overall visit

adex2 <- pharmaverseadamjnj::adex %>%
  mutate(AVISIT = "Overall") %>%
  select(all_of(core_ex_vars))

adex2a <- adex2 %>%
  mutate(
    AACTx = AACTPR,
    AADJx = AADJ,
    XXX = "Prior to infusion"
  )

adex2b <- adex2 %>%
  mutate(
    AACTx = AACTDU,
    AADJx = AADJP,
    XXX = "During infusion"
  )

adex2c <- bind_rows(adex2a, adex2b)
adex2c$XXX <- factor(
  adex2c$XXX,
  levels = c("Prior to infusion", "During infusion")
)

adex <- bind_rows(adex1c, adex2c)

# control levels of AVISIT
adex$AVISIT <- factor(adex$AVISIT, levels = c("Overall", levels(adex1$AVISIT)))

# control levels of new variables AACTx and AADJx
aact_levels <- c(
  "DOSE REDUCED COMPARED TO PRIOR INFUSION",
  "INFUSION DELAYED WITHIN THE CYCLE",
  "INFUSION RATE DECREASED COMPARED TO PRIOR INFUSION",
  "INFUSION SKIPPED (AND NOT MADE UP)",
  "STUDY DRUG PERMANENTLY DISCONTINUED",
  "INFUSION ABORTED",
  "INFUSION INTERRUPTED",
  "INFUSION RATE INCREASED"
)

aact_labels <- c(
  "Dose reduced",
  "Infusion delayed",
  "Infusion rate decreased",
  "Infusion skipped",
  "Study agent permanently discontinued",
  "Infusion aborted",
  "Infusion interrupted",
  "Infusion rate increased"
)

adex$AACTx <- factor(
  as.character(adex$AACTx),
  levels = aact_levels,
  labels = aact_labels
)

adex$AADJx <- factor(adex$AADJx, levels = levels(c(adex$AADJ, adex$AADJP)))

### Note the following levels are not used on the table, not sure if this is OK ---
### this is out of scope for template script
### how standard is this table and the levels of the variables on the current dataset + standard ADaM???
setdiff(levels(adex$AACTPR), aact_levels)
setdiff(levels(adex$AACTDU), aact_levels)


# join data together
ex <- adex %>% left_join(., adsl, by = c("USUBJID"))

### limit visits to some for testing
ex2 <- ex %>%
  filter(AVISIT %in% levels(ex$AVISIT)[1:4]) %>%
  mutate(AVISIT = factor(as.character(AVISIT), levels = levels(ex$AVISIT)[1:4]))

# Define layout and build table:

colspan_trt_map <- create_colspan_map(
  adsl,
  non_active_grp = ctrl_grp,
  non_active_grp_span_lbl = " ",
  active_grp_span_lbl = "Active Study Agent",
  colspan_var = "colspan_trt",
  trt_var = trtvar
)
ref_path <- c("colspan_trt", " ", trtvar, ctrl_grp)


split_map <- tribble(
  ~XXX                , ~AACTx                                 ,
  "Prior to infusion" , "Dose reduced"                         ,
  "Prior to infusion" , "Infusion delayed"                     ,
  "Prior to infusion" , "Infusion rate decreased"              ,
  "Prior to infusion" , "Infusion skipped"                     ,
  "Prior to infusion" , "Study agent permanently discontinued" ,
  "During infusion"   , "Infusion aborted"                     ,
  "During infusion"   , "Infusion interrupted"                 ,
  "During infusion"   , "Infusion rate increased"
)


extra_args1 <- list(
  .stats = "count_unique_fraction",
  denom = "n_parentdf",
  denom_by = "AVISIT",
  drop_levels = TRUE
)

lyt <- rtables::basic_table(
  top_level_section_div = " ",
  show_colcounts = TRUE,
  colcount_format = "N=xx"
) %>%
  split_cols_by(
    "colspan_trt",
    split_fun = trim_levels_to_map(map = colspan_trt_map)
  )

if (combined_colspan_trt == TRUE) {
  lyt <- lyt %>%
    split_cols_by(trtvar, split_fun = mysplit)
} else {
  lyt <- lyt %>%
    split_cols_by(trtvar)
}


lyt <- lyt %>%
  split_rows_by(
    "AVISIT",
    split_label = "Time Point",
    split_fun = drop_split_levels,
    label_pos = "topleft",
    child_labels = "visible",
    indent_mod = 0L,
    section_div = c(" ")
  ) %>%
  split_rows_by(
    "XXX",
    split_fun = keep_split_levels(c(
      "Prior to infusion",
      "During infusion"
    )),
    section_div = " ",
    child_labels = "visible"
  ) %>%
  summarize_row_groups(
    "XXX",
    cfun = a_freq_j,
    extra_args = list(.stats = "n_df", label = "N")
  ) %>%
  split_rows_by(
    "AACTx",
    split_fun = trim_levels_to_map(map = split_map),
    section_div = " "
  ) %>%
  summarize_row_groups("AACTx", cfun = a_freq_j, extra_args = extra_args1) %>%
  analyze("AADJx", afun = a_freq_j, extra_args = extra_args1) %>%
  append_topleft("  Time Relative to Infusion") %>%
  append_topleft("    Modification, n (%)")

result <- build_table(lyt, ex, alt_counts_df = adsl)

# Prune table to remove all the rows with 0 counts or no data to report across all sections

result <- prune_table(result, prune_func = prune_empty_level)

# Add titles and footnotes:

result <- set_titles(result, tab_titles)

# Convert to tbl file and output table

tt_to_tlgrtf(string_map = string_map, tt = result, file = fileid, orientation = "portrait")
```
```{r result1, echo=FALSE, message=FALSE, warning=FALSE, test = list(result_v1 = "result")}
tt_to_flextable_j(result, tblid, string_map = string_map) 
```

[Download RTF file](`r paste0(tolower(tblid), '.rtf')`)
::::

Made with ❤️ by the J&J Team

  • Edit this page
  • Report an issue
Cookie Preferences