Skip to contents

Overview

The display argument of format_ae_summary() selects and orders the statistics in an AE summary table. This vignette demonstrates how to include risk-difference estimates and inference results.

Define metadata

The 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()

Select columns

Use extend_ae_specific_inference() to add confidence intervals and p-values based on the Miettinen and Nurminen (M&N) method. For details, see the rate compare vignette.

After extending the analysis, use display in format_ae_summary() to select statistics and set their order. Available options are:

  • "n": number of participants with an adverse event.
  • "prop": proportion of participants with an adverse event.
  • "total": total columns.
  • "diff": risk difference.
  • "diff_ci": 95% confidence interval for the risk difference using the Miettinen and Nurminen method.
  • "diff_p": p-value for the risk difference using the Miettinen and Nurminen method.
  • "dur": average adverse event duration.
  • "events_avg": average number of adverse events per participant.
  • "events_count": number of adverse events per participant.

The "diff_ci" and "diff_p" statistics are added by extend_ae_specific_inference(), "dur" is added by extend_ae_specific_duration(), and the event statistics are added by extend_ae_specific_events().

For example, include "diff" in addition to the number and proportion of participants with an adverse event:

rtf_dir <- if (dir.exists("vignettes/rtf")) "vignettes/rtf" else "rtf"
rtf_file <- file.path(rtf_dir, "ae0summary2.rtf")

prepare_ae_summary(
  meta,
  population = "apat",
  observation = "wk12",
  parameter = "any;rel;ser"
) |>
  extend_ae_specific_inference() |>
  format_ae_summary(display = c("n", "prop", "diff", "diff_ci")) |>
  tlf_ae_summary(
    source = "Source:  [CDISCpilot: adam-adsl; adae]",
    analysis = "ae_summary", # Provide analysis type defined in meta$analysis
    col_rel_width = c(3, rep(1, 6)),
    path_outtable = rtf_file
  )
#> any
#> rel
#> ser
#> The output is saved in/home/runner/work/metalite.ae/metalite.ae/vignettes/rtf/ae0summary2.rtf

Generated RTF file: ae0summary2.rtf