knitr::opts_chunk$set(
  comment = "#>",
  collapse = TRUE,
  out.width = "100%",
  dpi = 150
)
library(metalite.ae)

Overview

The objective of this tutorial is to generate a production-ready AE specification analyses. It extends examples shown in the specific AE chapter of the R for Clinical Study Reports and Submission book.

The AE specification analysis entails the creation of tables that summarize details of different types of adverse events. To accomplish this using metalite.ae, three essential functions are required:

There are three optional functions to extend AE specification analysis.

An example output:

knitr::include_graphics("pdf/ae0specific1.pdf")

Example data

Within metalite.ae, we utilized the ADSL and ADAE datasets from the metalite package to create an illustrative dataset. The metadata structure remains consistent across all analysis examples within metalite.ae. Additional information can be accessed on the metalite package website.

meta <- meta_ae_example()

Click to show the output

meta

Analysis preparation

The function prepare_ae_specific() is used to create a dataset for AE summary analysis by utilizing predefined keywords specified in the example data meta.

The resulting output of the function is an outdata object, which comprises a collection of raw datasets for analysis and reporting.

outdata <- prepare_ae_specific(
  meta,
  population = "apat",
  observation = "wk12",
  parameter = "rel"
)
outdata

The resulting dataset contains frequently used statistics, with variables indexed according to the order specified in outdata$group.

outdata$group

The row is indexed according to the order of outdata$name.

head(data.frame(outdata$order, outdata$name))
outdata$n_pop
head(outdata$n)
head(outdata$prop)
head(outdata$diff)

Format output

Once the raw analysis results are obtained, the format_ae_specific() function can be employed to prepare the outdata, ensuring its compatibility with production-ready RTF tables.

tbl <- outdata |> format_ae_specific()
head(tbl$tbl)

Additional statistics

By using the display argument, we can choose specific statistics to include. For instance, we have the option to incorporate the risk difference.

tbl <- outdata |> format_ae_specific(display = c("n", "prop", "diff"))
head(tbl$tbl)

To perform advanced analysis, the extend_ae_specific_inference() function is utilized. For instance, we can incorporate a 95% confidence interval based on the Miettinen and Nurminen (M&N) method. Further information regarding the M&N method can be found in the rate compare vignette.

tbl <- outdata |>
  extend_ae_specific_inference() |>
  format_ae_specific(display = c("n", "prop", "diff", "diff_ci"))
head(tbl$tbl)

We can use extend_ae_specific_duration() to add average duration of AE.

tbl <- outdata |>
  extend_ae_specific_duration(duration_var = "ADURN") |>
  format_ae_specific(display = c("n", "prop", "dur"))

head(tbl$tbl)

We can use extend_ae_specific_events() to add number of AE and/or average of it per subject.

tbl <- outdata |>
  extend_ae_specific_events() |>
  format_ae_specific(display = c("n", "prop", "events_count", "events_avg"))

head(tbl$tbl)

We can use filter_method and filter_criteria parameters to filter information based on the specified criteria:

tbl <- outdata |>
  extend_ae_specific_events() |>
  format_ae_specific(
    display = c("n", "prop", "events_count", "events_avg"),
    filter_method = "percent",
    filter_criteria = 6
  )

head(tbl$tbl)

In results above, rows having any one of "prop_x" values are greater than 6 get kept in the output.

We can use sort_order and sort_column parameters to sort results based on the specified criteria:

tbl <- outdata |>
  extend_ae_specific_events() |>
  format_ae_specific(
    display = c("n", "prop", "events_count", "events_avg"),
    sort_order = c("count_des"),
    sort_column = c("Placebo")
  )

head(tbl$tbl)

Mock data preparation

The mock argument facilitates the creation of a mock table with ease.

Please note that the intention of the mock argument is not to provide an all-encompassing mock table template. Instead, it serves as a convenient method to assist users in generating a mock table that closely resembles the desired output layout. To develop a more versatile mock table generation tool, further efforts are necessary. This could potentially involve the creation of a dedicated mock table generation package or similar solutions.

tbl <- outdata |> format_ae_specific(mock = TRUE)
head(tbl$tbl)

RTF tables

The last step is to prepare the RTF table using tlf_ae_summary().

outdata |>
  format_ae_specific() |>
  tlf_ae_specific(
    meddra_version = "24.0",
    source = "Source:  [CDISCpilot: adam-adsl; adae]",
    analysis = "ae_specific", # Provide analysis type defined in meta$analysis
    path_outtable = "rtf/ae0specific1.rtf"
  )
knitr::include_graphics("pdf/ae0specific1.pdf")

The tlf_ae_specific() function also provides some commonly used arguments to customize the table.

outdata |>
  format_ae_specific() |>
  tlf_ae_specific(
    meddra_version = "24.0",
    source = "Source:  [CDISCpilot: adam-adsl; adae]",
    analysis = "ae_specific", # Provide analysis type defined in meta$analysis
    col_rel_width = c(6, rep(1, 8)),
    text_font_size = 8,
    orientation = "landscape",
    path_outtable = "rtf/ae0specific2.rtf"
  )
knitr::include_graphics("pdf/ae0specific2.pdf")

The mock table can also be generated.

outdata |>
  format_ae_specific(mock = TRUE) |>
  tlf_ae_specific(
    meddra_version = "24.0",
    source = "Source:  [CDISCpilot: adam-adsl; adae]",
    analysis = "ae_specific", # Provide analysis type defined in meta$analysis
    path_outtable = "rtf/mock_ae0specific1.rtf"
  )
knitr::include_graphics("pdf/mock_ae0specific1.pdf")


Merck/metalite.ae documentation built on Feb. 10, 2025, 5:03 p.m.