# Program Name: tsiex10.R# Prep Environmentlibrary(envsetup)library(tern)library(dplyr)library(rtables)library(junco)# Define script level parameters:# - Define output ID and file locationtblid <-"TSIEX10"fileid <- tblidtab_titles <-get_titles_from_file(input_path ='../../_data/', tblid)string_map <- default_str_maptrtvar <-"TRT01A"popfl <-"SAFFL"catlevels <-c("<60%", "60% to <80%", "80% to <100%", ">=100%")combined_colspan_trt <-TRUEif (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 dataadsl <- pharmaverseadamjnj::adsl %>%filter(!!rlang::sym(popfl) =="Y") %>%select(STUDYID, USUBJID, all_of(trtvar), all_of(popfl))# If AVISIT is not present in ADEXSUM than create 'Overall' as the Visit, which is used# for the filtering AVISIT records if it does existadexsum <- pharmaverseadamjnj::adexsum %>%mutate(VISIT =if (exists("AVISIT")) AVISIT else"Overall") %>%filter(PARAMCD =="TRTCOMP"&!is.na(AVAL) & VISIT =="Overall") %>%select(USUBJID, PARAMCD, AVAL, AVALCAT1)adsl$colspan_trt <-factor(ifelse(adsl[[trtvar]] =="Placebo", " ", "Active Study Agent"),levels =c("Active Study Agent", " "))# join data togetherex <- adexsum %>%inner_join(., adsl, by =c("USUBJID"))ex$AVALCAT1 <-droplevels(ex$AVALCAT1)ex$AVALCAT1 <-factor(ex$AVALCAT1, levels = catlevels)colspan_trt_map <-create_colspan_map( adsl,non_active_grp ="Placebo",non_active_grp_span_lbl =" ",active_grp_span_lbl ="Active Study Agent",colspan_var ="colspan_trt",trt_var = trtvar)# Define layout and build table: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 %>%analyze("STUDYID",var_labels ="Compliance (%)~[super a]",afun = a_freq_j,extra_args =list(label ="N", .stats ="n_df"),indent_mod =0L,show_labels ="visible" ) %>%analyze("AVAL", show_labels ="hidden", indent_mod =2L, afun =function(x) {list("Mean (SD)"=rcell(c(mean(x), sd(x)),format =jjcsformat_xx("xx.x (xx.xx)") ),"Median"=rcell(median(x), format =jjcsformat_xx("xx.x")),"Min, max"=rcell(c(min(x), max(x)), format =jjcsformat_xx("xx., xx.")) ) }) %>%analyze("AVALCAT1",nested =FALSE,var_labels ="Compliance ~[super a], n (%)", #TODO: FIX THISafun = a_freq_j,extra_args =list(denom ="n_df",.stats =c("count_unique_fraction") ),indent_mod =1L,show_labels ="visible" ) %>%append_topleft("Parameter")result <-build_table(lyt, ex, alt_counts_df = adsl)# Add titles and footnotes:result <-set_titles(result, tab_titles)# Convert to tbl file and output tablett_to_tlgrtf(string_map = string_map, tt = result, file = fileid, orientation ="portrait")
TSIEX10:Study Treatment Compliance; Safety Analysis Set (Study jjcs - core)
Active Study Agent
Xanomeline High Dose
Xanomeline Low Dose
Combined
Placebo
Parameter
N=53
N=73
N=126
N=59
Compliance (%)a
N
53
73
126
59
Mean (SD)
63.7 (35.23)
66.5 (38.42)
65.3 (36.99)
57.0 (36.23)
Median
64.0
70.0
68.0
50.0
Min, max
0, 120
1, 122
0, 122
1, 124
Compliance a, n (%)
<60%
22 (41.5%)
28 (38.4%)
50 (39.7%)
32 (54.2%)
60% to <80%
11 (20.8%)
13 (17.8%)
24 (19.0%)
9 (15.3%)
80% to <100%
8 (15.1%)
14 (19.2%)
22 (17.5%)
8 (13.6%)
≥100%
12 (22.6%)
18 (24.7%)
30 (23.8%)
10 (16.9%)
a Compliance is calculated as (actual number of [tablets taken]/total number of [tablets supposed to be taken]) x100 / number of days taking study treatment/total treatment duration[(including days off study treatment) }x100 / (amount dispensed-amount returned)/amount dispensed x100].