--- title: "Create a AE Summary Mock-up Table" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Create a AE Summary Mock-up Table} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} resource_files: - rtf/ae0summary3.rtf --- ```{r, include=FALSE} knitr::opts_chunk$set( comment = "#>", collapse = TRUE, out.width = "100%", dpi = 150 ) ``` ```{r} library(metalite.ae) ``` 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](https://merck.github.io/forestly/) package. The metadata follows the same approach used in the [AE Summary in RTF format](ae-summary-rtf.html) vignette. ```{r} 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. ```{r} 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 ) ``` ```{r download-rtf, results="asis", echo=FALSE} cat( "Generated RTF file: ae0summary3.rtf" ) ```