Subjects With Treatment-emergent Adverse Events With Frequency =5% in Drug-treated Group and =2% More Often in Drug-treated Group Than Placebo-treated Group by Preferred Term
# Program Name: tsfae06b.R# Prep Environmentlibrary(envsetup)library(tern)library(dplyr)library(rtables)library(junco)# Define script level parameters:# - Define output ID and file locationtblid <-"TSFAE06b"fileid <- tblidtab_titles <-get_titles_from_file(input_path ='../../_data/', tblid)string_map <- default_str_maptrtvar <-"TRT01A"popfl <-"SAFFL"combined_colspan_trt <-TRUErisk_diff <-TRUErr_method <-"wald"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:adsl <- pharmaverseadamjnj::adsl %>%filter(!!rlang::sym(popfl) =="Y") %>%select(STUDYID, USUBJID, all_of(trtvar), all_of(popfl))adae <- pharmaverseadamjnj::adae %>%filter(TRTEMFL =="Y") %>%select(USUBJID, TRTEMFL, AEDECOD)adsl$colspan_trt <-factor(ifelse(adsl[[trtvar]] =="Placebo", " ", "Active Study Agent"),levels =c("Active Study Agent", " "))if (risk_diff ==TRUE) { adsl$rrisk_header <-"Risk Difference (%) (95% CI)" adsl$rrisk_label <-paste(adsl[[trtvar]], paste("vs", ctrl_grp))}# join data togetherae <- adae %>%right_join(., adsl, by =c("USUBJID"))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)# Define layout and build table:ref_path <-c("colspan_trt", " ", "TRT01A", "Placebo")extra_args_rr <-list(method = rr_method,ref_path = ref_path,.stats =c("count_unique_fraction"))lyt <-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)}if (risk_diff ==TRUE) { lyt <- lyt %>%split_cols_by("rrisk_header", nested =FALSE) %>%split_cols_by( trtvar,labels_var ="rrisk_label",split_fun =remove_split_levels("Placebo") )}lyt <- lyt %>%analyze("AEDECOD",afun = a_freq_j,extra_args =append(extra_args_rr, NULL),indent_mod =0L ) %>%append_topleft("Preferred Term, n (%)")result <-build_table(lyt, ae, alt_counts_df = adsl)# Post-Processing step to sort by descending count on chosen active treatment columns.if (length(adae$TRTEMFL) !=0) { result <-sort_at_path(result, c("AEDECOD"), scorefun =jj_complex_scorefun())################################################################################# Prune table to only keep those that meet x% criteria from specified columns# and y% more often than placebo################################################################################ result <-safe_prune_table( result,prune_func =bspt_pruner(fraction =0.05,diff_from_control =0.02,control = ctrl_grp ) )}## Remove the N=xx column headers for the risk difference columnsresult <-remove_col_count(result)## Remove any rogue null rowsresult <- result %>%safe_prune_table(prune_func =keep_rows(keep_non_null_rows))# 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 ="landscape")
TSFAE06b:Subjects With Treatment-emergent Adverse Events With Frequency =[5]% in [Drug-treated] Group and =[2]% More Often in [Drug-treated] Group Than [Placebo-treated] Group by Preferred Term; Safety Analysis Set (Study jjcs - core)
Active Study Agent
Risk Difference (%) (95% CI)
Xanomeline High Dose
Xanomeline Low Dose
Combined
Placebo
Xanomeline High Dose vs Placebo
Xanomeline Low Dose vs Placebo
Preferred Term, n (%)
N=53
N=73
N=126
N=59
PRURITUS
20 (37.7%)
14 (19.2%)
34 (27.0%)
6 (10.2%)
27.6 (12.4, 42.7)
9.0 (-2.9, 20.9)
APPLICATION SITE PRURITUS
13 (24.5%)
18 (24.7%)
31 (24.6%)
4 (6.8%)
17.7 (4.5, 31.0)
17.9 (6.1, 29.7)
APPLICATION SITE ERYTHEMA
10 (18.9%)
11 (15.1%)
21 (16.7%)
2 (3.4%)
15.5 (4.0, 27.0)
11.7 (2.3, 21.1)
ERYTHEMA
12 (22.6%)
8 (11.0%)
20 (15.9%)
6 (10.2%)
12.5 (-1.2, 26.1)
0.8 (-9.7, 11.3)
DIZZINESS
8 (15.1%)
8 (11.0%)
16 (12.7%)
0
15.1 (5.5, 24.7)
11.0 (3.8, 18.1)
APPLICATION SITE IRRITATION
8 (15.1%)
7 (9.6%)
15 (11.9%)
2 (3.4%)
11.7 (1.0, 22.4)
6.2 (-2.0, 14.4)
RASH
5 (9.4%)
9 (12.3%)
14 (11.1%)
4 (6.8%)
2.7 (-7.5, 12.8)
5.5 (-4.4, 15.5)
HYPERHIDROSIS
8 (15.1%)
4 (5.5%)
12 (9.5%)
2 (3.4%)
11.7 (1.0, 22.4)
2.1 (-4.9, 9.1)
SINUS BRADYCARDIA
7 (13.2%)
4 (5.5%)
11 (8.7%)
0
13.2 (4.1, 22.3)
5.5 (0.3, 10.7)
FATIGUE
5 (9.4%)
5 (6.8%)
10 (7.9%)
0
9.4 (1.6, 17.3)
6.8 (1.1, 12.6)
APPLICATION SITE VESICLES
4 (7.5%)
4 (5.5%)
8 (6.3%)
0
7.5 (0.4, 14.7)
5.5 (0.3, 10.7)
HEADACHE
5 (9.4%)
3 (4.1%)
8 (6.3%)
2 (3.4%)
6.0 (-3.1, 15.2)
0.7 (-5.8, 7.2)
SKIN IRRITATION
4 (7.5%)
4 (5.5%)
8 (6.3%)
3 (5.1%)
2.5 (-6.6, 11.5)
0.4 (-7.3, 8.1)
COUGH
3 (5.7%)
4 (5.5%)
7 (5.6%)
1 (1.7%)
4.0 (-3.1, 11.0)
3.8 (-2.4, 10.0)
NAUSEA
5 (9.4%)
2 (2.7%)
7 (5.6%)
0
9.4 (1.6, 17.3)
2.7 (-1.0, 6.5)
VOMITING
5 (9.4%)
2 (2.7%)
7 (5.6%)
0
9.4 (1.6, 17.3)
2.7 (-1.0, 6.5)
NASOPHARYNGITIS
3 (5.7%)
3 (4.1%)
6 (4.8%)
2 (3.4%)
2.3 (-5.5, 10.0)
0.7 (-5.8, 7.2)
SALIVARY HYPERSECRETION
4 (7.5%)
0
4 (3.2%)
0
7.5 (0.4, 14.7)
0.0 (0.0, 0.0)
NASAL CONGESTION
3 (5.7%)
0
3 (2.4%)
2 (3.4%)
2.3 (-5.5, 10.0)
-3.4 (-8.0, 1.2)
Note: Subjects are counted only once for any given event, regardless of the number of times they actually experienced the event.
Note: Adverse events are coded using MedDRA version 26.0.