This vignette demonstrates how to generate a static AE summary table reporting - The number and percentage of participants with any AEs by treatment group; - The number and percentage of participants with drug-related AEs by treatment group; - The number and percentage of participants with serious AEs by treatment group.
Overview
Mock tables help reviewers evaluate a proposed table structure before
final results are available. The mock argument of
format_ae_summary() replaces the analysis values with
placeholder values while preserving the AE summary layout.
The mock output is intended as a convenient starting point that resembles the planned table. It is not an all-encompassing mock table template, so additional customization may be needed for study-specific requirements.
Define metadata
This example uses ADSL and ADAE data from the forestly package. The metadata follows the same approach used in the AE Summary in RTF format vignette.
adsl <- forestly::forestly_adsl
adae <- forestly::forestly_adae
adsl$TRT01A <- factor(
adsl$TRT01A,
levels = c("Xanomeline Low Dose", "Placebo"),
labels = c("Low Dose", "Placebo")
)
adae$TRTA <- factor(
adae$TRTA,
levels = c("Xanomeline Low Dose", "Placebo"),
labels = c("Low Dose", "Placebo")
)
analysis_plan <- metalite::plan(
analysis = "ae_summary",
population = "apat",
observation = "wk12",
parameter = "any;rel;ser"
)
meta <- metalite::meta_adam(observation = adae, population = adsl) |>
metalite::define_plan(analysis_plan) |>
metalite::define_population(
name = "apat",
var = c("USUBJID", "SAFFL", "TRT01A"),
group = "TRT01A",
subset = SAFFL == "Y",
label = "All Participants as Treated"
) |>
metalite::define_observation(
name = "wk12",
var = c(
"USUBJID", "SAFFL", "TRTA", "AEDECOD", "AEBODSYS", "AEREL",
"AESER"
),
group = "TRTA",
subset = SAFFL == "Y",
label = "Weeks 0 to 12"
) |>
metalite::define_parameter(
name = "any",
term1 = "",
term2 = "",
var = "AEDECOD",
soc = "AEBODSYS",
label = "All AEs"
) |>
metalite::define_parameter(
name = "rel",
term1 = "Drug-Related",
term2 = "",
subset = AEREL %in% c("POSSIBLE", "PROBABLE"),
var = "AEDECOD",
soc = "AEBODSYS",
label = "Drug-related AEs"
) |>
metalite::define_parameter(
name = "ser",
term1 = "Serious",
term2 = "",
subset = AESER == "Y",
var = "AEDECOD",
soc = "AEBODSYS",
label = "Serious AEs"
) |>
metalite::define_analysis(
name = "ae_summary",
title = "Adverse Event Summary"
) |>
metalite::meta_build()Prepare a mock table
First, prepare the AE summary analysis. Passing
mock = TRUE to format_ae_summary() then
creates placeholder values for the formatted table.
The mock table retains the row labels and treatment-group structure derived from the metadata. This allows the layout to be reviewed without presenting the calculated analysis values as final results.
rtf_dir <- if (dir.exists("vignettes/rtf")) "vignettes/rtf" else "rtf"
rtf_file <- file.path(rtf_dir, "ae0summary3.rtf")
prepare_ae_summary(
meta,
population = "apat",
observation = "wk12",
parameter = "any;rel;ser"
) |>
format_ae_summary(mock = TRUE) |>
tlf_ae_summary(
source = "Source: [CDISCpilot: adam-adsl; adae]",
analysis = "ae_summary", # Provide analysis type defined in meta$analysis
path_outtable = rtf_file
)
#> any
#> rel
#> ser
#> The output is saved in/home/runner/work/metalite.ae/metalite.ae/vignettes/rtf/ae0summary3.rtfGenerated RTF file: ae0summary3.rtf
