
Subject Screening and Enrollment, Screening Population, Trials A and B
FDA Table 03
FDA IG Shell
Programming Notes
Background and Instructions
The following enrollment populations are reflected in Table 3: Subject Screening and Enrollment below:
• Screened population (subjects screened): All subjects screened for entry into the trial.
• Screening failure population: All subjects who failed to meet inclusion/exclusion criteria.
• Enrolled population (subjects enrolled): All subjects who signed a consent form for participation in the trial.
• Randomized population (subjects randomized): All subjects randomized to a trial arm. Often referred to as the intent-to-treat population.
Customization
The review team may request a list of reasons for screen failure, such as “subject noncompliance,” “consent withdrawn,” “inclusion/exclusion criteria not met,” “other,” and/or a breakdown of “inclusion/exclusion criteria not met” and “other.” Understanding reasons for screen failure can be informative to assess the generalizability of the trial.
Output
Code
# FDA TABLE 03 ---------------------------------------------------------------
# Self-contained template. Run top-to-bottom to build the objects below.
# Used by tests via run_template() and published in the catalog.
library(dplyr)
library(cards)
library(gtsummary)
adsl <- pharmaverseadam::adsl
set.seed(1)
scrnfail_reas_lvls <- c(
"Inclusion/exclusion criteria not met", "Subject noncompliance", "Consent withdrawn", "Other"
)
data <- adsl |>
mutate(
ENRLDT = RANDDT,
ENRLFL = !is.na(ENRLDT),
RANDFL = !is.na(RANDDT),
SCRNFL = TRUE,
SCRNFRS = NA_character_
) |>
mutate( # set screen failure reasons for relevant observations.
SCRNFRS = factor(
replace(
SCRNFRS,
TRT01A == "Screen Failure",
sample(scrnfail_reas_lvls, size = sum(TRT01A == "Screen Failure"), replace = TRUE)
),
levels = scrnfail_reas_lvls
)
)
tbl_scrn <- tbl_summary(
data = data,
include = "SCRNFL",
missing = "no",
label = ~"Subjects screened"
)
tbl_scrnfrs <- tbl_hierarchical(
data = data,
denominator = adsl,
id = USUBJID,
variables = "SCRNFRS",
label = list(..ard_hierarchical_overall.. = "Screening failures"),
overall_row = TRUE
) |>
modify_indent(columns = label, rows = row_type == "level", indent = 4L) |>
modify_indent(columns = label, rows = variable == "SCRNFRS", indent = 8L)
tbl_enrl_rand <- tbl_summary(
data = data,
include = c("ENRLFL", "RANDFL"),
missing = "no",
label = list(ENRLFL = "Subjects enrolled", RANDFL = "Subjects randomized")
)
tbl <- list(tbl_scrn, tbl_scrnfrs, tbl_enrl_rand) |>
tbl_stack() |>
modify_header(label = "**Disposition**")
ard <- gtsummary::gather_ard(tbl)[[1]]
[[1]]$tbl_summary
# An ARD data frame: 11 × 10
variable variable_level context stat_name stat_label stat fmt_fun warning error gts_column
<chr> <list> <chr> <chr> <chr> <list> <list> <list> <list> <chr>
1 SCRNFL TRUE tabulate_value n n 306 <fn> <NULL> <NULL> stat_0
2 SCRNFL TRUE tabulate_value N N 306 <fn> <NULL> <NULL> stat_0
3 SCRNFL TRUE tabulate_value p % 1 <fn> <NULL> <NULL> stat_0
4 SCRNFL <NULL> attributes label Variable Label Subjects screened <fn> <NULL> <NULL> <NA>
5 SCRNFL <NULL> attributes class Variable Class logical <NULL> <NULL> <NULL> <NA>
6 SCRNFL <NULL> missing N_obs No. obs. 306 <fn> <NULL> <NULL> stat_0
7 SCRNFL <NULL> missing N_miss N Missing 0 <fn> <NULL> <NULL> stat_0
8 SCRNFL <NULL> missing N_nonmiss N Non-missing 306 <fn> <NULL> <NULL> stat_0
9 SCRNFL <NULL> missing p_miss % Missing 0 <fn> <NULL> <NULL> stat_0
10 SCRNFL <NULL> missing p_nonmiss % Non-missing 1 <fn> <NULL> <NULL> stat_0
11 ..ard_total_n.. <NULL> total_n N N 306 0 <NULL> <NULL> <NA>
[[2]]
[[2]]$tbl_hierarchical
# An ARD data frame: 16 × 11
variable variable_level context stat_name stat_label stat stat_fmt fmt_fun warning error gts_column
<chr> <list> <chr> <chr> <chr> <list> <list> <list> <list> <list> <chr>
1 ..ard_hierarchical_overall.. TRUE hierarchical n n 52 52 <fn> <NULL> <NULL> stat_0
2 ..ard_hierarchical_overall.. TRUE hierarchical N N 306 306 <fn> <NULL> <NULL> stat_0
3 ..ard_hierarchical_overall.. TRUE hierarchical p % 0.170 17 <fn> <NULL> <NULL> stat_0
4 SCRNFRS Consent withdrawn hierarchical n n 11 11 <fn> <NULL> <NULL> stat_0
5 SCRNFRS Consent withdrawn hierarchical N N 306 306 <fn> <NULL> <NULL> stat_0
6 SCRNFRS Consent withdrawn hierarchical p % 0.0359 3.6 <fn> <NULL> <NULL> stat_0
7 SCRNFRS Inclusion/exclusion criteria not met hierarchical n n 17 17 <fn> <NULL> <NULL> stat_0
8 SCRNFRS Inclusion/exclusion criteria not met hierarchical N N 306 306 <fn> <NULL> <NULL> stat_0
9 SCRNFRS Inclusion/exclusion criteria not met hierarchical p % 0.0556 5.6 <fn> <NULL> <NULL> stat_0
10 SCRNFRS Other hierarchical n n 7 7 <fn> <NULL> <NULL> stat_0
11 SCRNFRS Other hierarchical N N 306 306 <fn> <NULL> <NULL> stat_0
12 SCRNFRS Other hierarchical p % 0.0229 2.3 <fn> <NULL> <NULL> stat_0
13 SCRNFRS Subject noncompliance hierarchical n n 17 17 <fn> <NULL> <NULL> stat_0
14 SCRNFRS Subject noncompliance hierarchical N N 306 306 <fn> <NULL> <NULL> stat_0
15 SCRNFRS Subject noncompliance hierarchical p % 0.0556 5.6 <fn> <NULL> <NULL> stat_0
16 ..ard_total_n.. <NULL> total_n N N 306 306 0 <NULL> <NULL> <NA>
[[3]]
[[3]]$tbl_summary
# An ARD data frame: 21 × 10
variable variable_level context stat_name stat_label stat fmt_fun warning error gts_column
<chr> <list> <chr> <chr> <chr> <list> <list> <list> <list> <chr>
1 ENRLFL TRUE tabulate_value n n 254 <fn> <NULL> <NULL> stat_0
2 ENRLFL TRUE tabulate_value N N 306 <fn> <NULL> <NULL> stat_0
3 ENRLFL TRUE tabulate_value p % 0.8300654 <fn> <NULL> <NULL> stat_0
4 RANDFL TRUE tabulate_value n n 254 <fn> <NULL> <NULL> stat_0
5 RANDFL TRUE tabulate_value N N 306 <fn> <NULL> <NULL> stat_0
6 RANDFL TRUE tabulate_value p % 0.8300654 <fn> <NULL> <NULL> stat_0
7 ENRLFL <NULL> attributes label Variable Label Subjects enrolled <fn> <NULL> <NULL> <NA>
8 ENRLFL <NULL> attributes class Variable Class logical <NULL> <NULL> <NULL> <NA>
9 RANDFL <NULL> attributes label Variable Label Subjects randomized <fn> <NULL> <NULL> <NA>
10 RANDFL <NULL> attributes class Variable Class logical <NULL> <NULL> <NULL> <NA>
11 ENRLFL <NULL> missing N_obs No. obs. 306 <fn> <NULL> <NULL> stat_0
12 ENRLFL <NULL> missing N_miss N Missing 0 <fn> <NULL> <NULL> stat_0
13 ENRLFL <NULL> missing N_nonmiss N Non-missing 306 <fn> <NULL> <NULL> stat_0
14 ENRLFL <NULL> missing p_miss % Missing 0 <fn> <NULL> <NULL> stat_0
15 ENRLFL <NULL> missing p_nonmiss % Non-missing 1 <fn> <NULL> <NULL> stat_0
16 RANDFL <NULL> missing N_obs No. obs. 306 <fn> <NULL> <NULL> stat_0
17 RANDFL <NULL> missing N_miss N Missing 0 <fn> <NULL> <NULL> stat_0
18 RANDFL <NULL> missing N_nonmiss N Non-missing 306 <fn> <NULL> <NULL> stat_0
19 RANDFL <NULL> missing p_miss % Missing 0 <fn> <NULL> <NULL> stat_0
20 RANDFL <NULL> missing p_nonmiss % Non-missing 1 <fn> <NULL> <NULL> stat_0
21 ..ard_total_n.. <NULL> total_n N N 306 0 <NULL> <NULL> <NA>
