FDA Table 17
Patients With Adverse Events by Female-Specific FDA Medical Query (Narrow) and Preferred Term, Female Safety Population, Pooled Analyses
table
FDA
safety
adverse events
Code
# Load libraries & data -------------------------------------
library(dplyr)
library(cards)
library(gtsummary)
adsl <- random.cdisc.data::cadsl
adae <- random.cdisc.data::cadae
set.seed(1)
adae <- dplyr::rename(adae, FMQ01SC = SMQ01SC, FMQ01NAM = SMQ01NAM)
levels(adae$FMQ01SC) <- c("BROAD", "NARROW")
adae$FMQ01SC[is.na(adae$FMQ01SC)] <- "NARROW"
adae$FMQ01NAM <- factor(adae$FMQ01NAM, levels = c(
unique(adae$FMQ01NAM), "Abnormal Uterine Bleeding", "Amenorrhea",
"Bacterial Vaginosis", "Decreased Menstrual Bleeding"
))
adae$FMQ01NAM[adae$SEX == "F"] <- as.factor(
sample(c(
"Abnormal Uterine Bleeding", "Amenorrhea",
"Bacterial Vaginosis", "Decreased Menstrual Bleeding"
), sum(adae$SEX == "F"), replace = TRUE)
)
# Pre-processing --------------------------------------------
adae <- adae |>
filter(
SAFFL == "Y",
SEX == "F",
FMQ01SC == "NARROW"
)
adsl <- adsl |>
filter(SAFFL == "Y") # safety population
Code
tbl <- adae |>
select(FMQ01SC, ARM, FMQ01NAM, AEDECOD, USUBJID) |>
# setting an explicit level for NA values so empty strata combinations are shown.
mutate(across(everything(), ~ {
if (anyNA(.)) {
forcats::fct_na_value_to_level(as.factor(.), level = "<Missing>")
} else {
.
}
})) |>
tbl_hierarchical(
by = ARM,
variables = c(FMQ01NAM, AEDECOD),
id = USUBJID,
denominator = adsl,
# variables to calculate rates for
include = c(AEDECOD),
label = list(FMQ01NAM ~ "FMQ (Narrow)", AEDECOD ~ "Preferred Term")
)
tbl
$tbl_hierarchical
{cards} data frame: 297 x 15
group1 group1_level group2 group2_level variable variable_level context stat_name stat_label stat stat_fmt fmt_fun warning error gts_column
1 <NA> <NA> ARM A: Drug X categori… n n 134 134 0 stat_1
2 <NA> <NA> ARM A: Drug X categori… N N 400 400 0 stat_1
3 <NA> <NA> ARM A: Drug X categori… p % 0.335 33.5 <fn> stat_1
4 <NA> <NA> ARM B: Place… categori… n n 134 134 0 stat_2
5 <NA> <NA> ARM B: Place… categori… N N 400 400 0 stat_2
6 <NA> <NA> ARM B: Place… categori… p % 0.335 33.5 <fn> stat_2
7 <NA> <NA> ARM C: Combi… categori… n n 132 132 0 stat_3
8 <NA> <NA> ARM C: Combi… categori… N N 400 400 0 stat_3
9 <NA> <NA> ARM C: Combi… categori… p % 0.33 33.0 <fn> stat_3
10 ARM A: Drug X FMQ01NAM Abnormal… AEDECOD dcd A.1.… hierarch… n n 13 13 <fn> stat_1
ℹ 287 more rows
ℹ Use `print(n = ...)` to see more rows