library(pharmaverseadam)
library(dplyr)
library(gtsummary)
library(gt)
adsl <- pharmaverseadam::adsl
cat("Loaded ADSL:", nrow(adsl), "subjects\n")Loaded ADSL: 306 subjects
cat("Variables:", ncol(adsl), "\n")Variables: 54
First TLF from ADSL
Week 4 moves from building ADaMs to producing TLFs.
Today we build two classic tables using pharmaverseadam::adsl:
Loaded ADSL: 306 subjects
Variables: 54
[1] "STUDYID" "USUBJID" "SUBJID" "RFSTDTC" "RFENDTC" "RFXSTDTC"
[7] "RFXENDTC" "RFICDTC" "RFPENDTC" "DTHDTC" "DTHFL" "SITEID"
[13] "AGE" "AGEU" "SEX" "RACE" "ETHNIC" "ARMCD"
[19] "ARM" "ACTARMCD" "ACTARM" "COUNTRY" "DMDTC" "DMDY"
[25] "TRT01P" "TRT01A" "TRTSDTM" "TRTSTMF" "TRTEDTM" "TRTETMF"
[31] "TRTSDT" "TRTEDT" "TRTDURD" "SCRFDT" "EOSDT" "EOSSTT"
[37] "FRVDT" "RANDDT" "DTHDT" "DTHDTF" "DTHADY" "LDDTHELD"
[43] "DTHCAUS" "DTHDOM" "DTHCGR1" "LSTALVDT" "SAFFL" "RACEGR1"
[49] "AGEGR1" "REGION1" "LDDTHGR1" "DTH30FL" "DTHA30FL" "DTHB30FL"
Safety population: 254 subjects
# A tibble: 3 × 2
TRT01A n
<chr> <int>
1 Placebo 86
2 Xanomeline High Dose 72
3 Xanomeline Low Dose 96
# A tibble: 5 × 6
TRT01A AGE SEX RACE ETHNIC AGEGR1
<chr> <dbl> <chr> <chr> <chr> <chr>
1 Placebo 63 F WHITE HISPANIC OR LATINO 18-64
2 Placebo 64 M WHITE HISPANIC OR LATINO 18-64
3 Xanomeline High Dose 71 M WHITE NOT HISPANIC OR LATINO >64
4 Xanomeline Low Dose 74 M WHITE NOT HISPANIC OR LATINO >64
5 Xanomeline High Dose 77 F WHITE NOT HISPANIC OR LATINO >64
Variables used:
var_types <- list(
AGE ~ "continuous2",
SEX ~ "categorical",
RACE ~ "categorical",
ETHNIC ~ "categorical",
AGEGR1 ~ "categorical"
)
tbl_demo <- adsl_tab %>%
gtsummary::tbl_summary(
by = TRT01A,
type = var_types,
statistic = list(
gtsummary::all_continuous() ~ c("{mean} ({sd})", "{median} ({p25}, {p75})"),
gtsummary::all_categorical() ~ "{n} ({p}%)"
),
digits = gtsummary::all_continuous() ~ 1,
missing = "no"
) %>%
gtsummary::add_overall(last = TRUE) %>%
gtsummary::add_n()
tbl_demo| Characteristic | N | Placebo N = 861 |
Xanomeline High Dose N = 721 |
Xanomeline Low Dose N = 961 |
Overall N = 2541 |
|---|---|---|---|---|---|
| Age | 254 | ||||
| Mean (SD) | 75.2 (8.6) | 73.8 (7.9) | 76.0 (8.1) | 75.1 (8.2) | |
| Median (Q1, Q3) | 76.0 (69.0, 82.0) | 75.5 (70.0, 79.0) | 78.0 (71.0, 82.0) | 77.0 (70.0, 81.0) | |
| Sex | 254 | ||||
| F | 53 (62%) | 35 (49%) | 55 (57%) | 143 (56%) | |
| M | 33 (38%) | 37 (51%) | 41 (43%) | 111 (44%) | |
| Race | 254 | ||||
| AMERICAN INDIAN OR ALASKA NATIVE | 0 (0%) | 1 (1.4%) | 0 (0%) | 1 (0.4%) | |
| BLACK OR AFRICAN AMERICAN | 8 (9.3%) | 9 (13%) | 6 (6.3%) | 23 (9.1%) | |
| WHITE | 78 (91%) | 62 (86%) | 90 (94%) | 230 (91%) | |
| Ethnicity | 254 | ||||
| HISPANIC OR LATINO | 3 (3.5%) | 3 (4.2%) | 6 (6.3%) | 12 (4.7%) | |
| NOT HISPANIC OR LATINO | 83 (97%) | 69 (96%) | 90 (94%) | 242 (95%) | |
| Pooled Age Group 1 | 254 | ||||
| >64 | 72 (84%) | 61 (85%) | 88 (92%) | 221 (87%) | |
| 18-64 | 14 (16%) | 11 (15%) | 8 (8.3%) | 33 (13%) | |
| 1 n (%) | |||||
Features:
add_n() shows N per column header| Table 14.1.1 | |||||
| Summary of Demographic and Baseline Characteristics (Safety Population) | |||||
| Characteristic | N | Placebo N = 861 |
Xanomeline High Dose N = 721 |
Xanomeline Low Dose N = 961 |
Overall N = 2541 |
|---|---|---|---|---|---|
| Age | 254 | ||||
| Mean (SD) | 75.2 (8.6) | 73.8 (7.9) | 76.0 (8.1) | 75.1 (8.2) | |
| Median (Q1, Q3) | 76.0 (69.0, 82.0) | 75.5 (70.0, 79.0) | 78.0 (71.0, 82.0) | 77.0 (70.0, 81.0) | |
| Sex | 254 | ||||
| F | 53 (62%) | 35 (49%) | 55 (57%) | 143 (56%) | |
| M | 33 (38%) | 37 (51%) | 41 (43%) | 111 (44%) | |
| Race | 254 | ||||
| AMERICAN INDIAN OR ALASKA NATIVE | 0 (0%) | 1 (1.4%) | 0 (0%) | 1 (0.4%) | |
| BLACK OR AFRICAN AMERICAN | 8 (9.3%) | 9 (13%) | 6 (6.3%) | 23 (9.1%) | |
| WHITE | 78 (91%) | 62 (86%) | 90 (94%) | 230 (91%) | |
| Ethnicity | 254 | ||||
| HISPANIC OR LATINO | 3 (3.5%) | 3 (4.2%) | 6 (6.3%) | 12 (4.7%) | |
| NOT HISPANIC OR LATINO | 83 (97%) | 69 (96%) | 90 (94%) | 242 (95%) | |
| Pooled Age Group 1 | 254 | ||||
| >64 | 72 (84%) | 61 (85%) | 88 (92%) | 221 (87%) | |
| 18-64 | 14 (16%) | 11 (15%) | 8 (8.3%) | 33 (13%) | |
| 1 n (%) | |||||
| Source: pharmaverseadam::adsl | Population: Safety (SAFFL=Y) | |||||
# A tibble: 2 × 2
EOSSTT n
<chr> <int>
1 COMPLETED 110
2 DISCONTINUED 144
disp_tab <- adsl_saf %>%
dplyr::select(TRT01A, EOSSTT, DTHFL)
tbl_disp <- disp_tab %>%
gtsummary::tbl_summary(
by = TRT01A,
type = list(
EOSSTT ~ "categorical",
DTHFL ~ "categorical"
),
statistic = gtsummary::all_categorical() ~ "{n} ({p}%)",
missing = "no"
) %>%
gtsummary::add_overall(last = TRUE) %>%
gtsummary::add_n()
tbl_disp| Characteristic | N | Placebo N = 861 |
Xanomeline High Dose N = 721 |
Xanomeline Low Dose N = 961 |
Overall N = 2541 |
|---|---|---|---|---|---|
| End of Study Status | 254 | ||||
| COMPLETED | 58 (67%) | 27 (38%) | 25 (26%) | 110 (43%) | |
| DISCONTINUED | 28 (33%) | 45 (63%) | 71 (74%) | 144 (57%) | |
| Subject Death Flag | 3 | ||||
| Y | 2 (100%) | 0 (NA%) | 1 (100%) | 3 (100%) | |
| 1 n (%) | |||||
| Table 14.2.1 | |||||
| Subject Disposition Summary (Safety Population) | |||||
| Characteristic | N | Placebo N = 861 |
Xanomeline High Dose N = 721 |
Xanomeline Low Dose N = 961 |
Overall N = 2541 |
|---|---|---|---|---|---|
| End of Study Status | 254 | ||||
| COMPLETED | 58 (67%) | 27 (38%) | 25 (26%) | 110 (43%) | |
| DISCONTINUED | 28 (33%) | 45 (63%) | 71 (74%) | 144 (57%) | |
| Subject Death Flag | 3 | ||||
| Y | 2 (100%) | 0 (NA%) | 1 (100%) | 3 (100%) | |
| 1 n (%) | |||||
| Source: pharmaverseadam::adsl | Population: Safety (SAFFL=Y) | |||||
=== Table Validation ===
Check 1 - Safety N: 254
Check 2 - Missing TRT01A: 0
Check 3 - Missing EOSSTT: 0
✓ Validation complete
=== Day 22 Summary ===
Safety N: 254
Treatment arms:
# A tibble: 3 × 2
TRT01A n
<chr> <int>
1 Placebo 86
2 Xanomeline High Dose 72
3 Xanomeline Low Dose 96
End of study status:
# A tibble: 2 × 2
EOSSTT n
<chr> <int>
1 COMPLETED 110
2 DISCONTINUED 144
names(adsl) first to confirm which columns existpharmaverseadam::adsl confirmed variables: AGE, SEX, RACE, ETHNIC, AGEGR1, EOSSTT, DTHFL, TRT01Agtsummary::tbl_summary() handles both continuous and categorical in one callgtsummary::as_gt() converts to gt for headers, footnotes, and final formattingDCSREAS, BMIBL, or adtte in pharmaverseadam - always verify before useDay 23: AE tables with pharmaverseadam::adae and gt Day 24: KM curves with ggsurvfit Day 25: ARD-first workflow with cards
End of Day 22