This vignette explains how to calculate exposure-adjusted event rates
(EAERs) and demonstrates the corresponding workflow in
metalite.ae.
\[ \begin{aligned} EAER_j (\text{EAER for } Trt_j) &= \frac{\text{total number of events for } Trt_j}{\text{total person-days for } Trt_j/(\text{exp factor})} \\ &= \frac{\text{total number of events for } Trt_j \times \text{exp factor}}{\text{total person-days for } Trt_j} \end{aligned} \]
The exposure factor depends on the requested adjustment unit. For example, an adjustment unit of 100 person-months gives:
\[ \begin{aligned} EAER_j (\text{100 person-months}) &= \frac{\text{total number of events for } Trt_j \times \text{exp factor} (=100\times30.4367)}{\text{total person-days for } Trt_j} \\ &= \frac{\text{total number of events for } Trt_j \times 3043.67}{\text{total person-days for } Trt_j} \end{aligned} \]
The following examples define EAERs for three AE categories and three treatment groups: placebo (PBO), low dose (LD), and high dose (HD).
\[ EAER_{PBO} (\text{100 person-months}) =\frac{\text{total number of AEs for PBO} \times 3043.67}{\text{total person-days for PBO}} \]
\[ EAER_{LD} (\text{100 person-months}) =\frac{\text{total number of AEs for Low Dose} \times 3043.67}{\text{total person-days for Low Dose}} \]
\[ EAER_{HD} (\text{100 person-months}) =\frac{\text{total number of AEs for High Dose} \times 3043.67}{\text{total person-days for High Dose}} \]
\[ EAER_{PBO} (\text{100 person-months}) =\frac{\text{total number of SAEs for PBO} \times 3043.67}{\text{total person-days for PBO}} \]
\[ EAER_{LD} (\text{100 person-months}) =\frac{\text{total number of SAEs for Low Dose} \times 3043.67}{\text{total person-days for Low Dose}} \]
\[ EAER_{HD} (\text{100 person-months}) =\frac{\text{total number of SAEs for High Dose} \times 3043.67}{\text{total person-days for High Dose}} \]
The following workflow prepares the analysis data and metadata,
calculates the AE summary results with
prepare_ae_summary(), and adds EAERs with
extend_ae_summary_eaer(). Specify the treatment-duration
variable with duration_var and the exposure unit with
adj_unit.
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", "TRTDUR",
"SITEID", "SEX", "RACE", "AGE"
),
group = "TRT01A",
subset = SAFFL == "Y",
label = "All Participants as Treated"
) |>
metalite::define_observation(
name = "wk12",
var = c(
"USUBJID", "SAFFL", "TRTA", "AEDECOD", "AEBODSYS", "AEREL",
"AESER", "AEOUT", "AEACN", "AESDTH", "ASTDT", "AENDT"
),
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()
x <- meta |>
prepare_ae_summary(
population = "apat",
observation = "wk12",
parameter = "any;rel;ser",
) |>
extend_ae_summary_eaer(
duration_var = "TRTDUR",
adj_unit = "month"
)
x## List of 17
## $ meta :List of 7
## $ population : chr "apat"
## $ observation : chr "wk12"
## $ parameter : chr "any;rel;ser"
## $ n :'data.frame': 5 obs. of 3 variables:
## $ order : num [1:5] 1 100 200 300 400
## $ group : chr [1:3] "Low Dose" "Placebo" "Total"
## $ reference_group: num 2
## $ prop :'data.frame': 5 obs. of 3 variables:
## $ diff :'data.frame': 5 obs. of 1 variable:
## $ n_pop :'data.frame': 1 obs. of 3 variables:
## $ name : chr [1:5] "Participants in population" "with one or more adverse events" "with no adverse events" "with drug-related{^a} adverse events" ...
## $ prepare_call : language prepare_ae_summary(meta = meta, population = "apat", observation = "wk12", parameter = "any;rel;ser", )
## $ total_exp :'data.frame': 1 obs. of 3 variables:
## $ event_num :'data.frame': 3 obs. of 3 variables:
## $ eaer :'data.frame': 3 obs. of 3 variables:
## $ adj_unit : chr "month"
The calculated rates are stored in x$eaer:
## Low Dose Placebo Total
## 1 159.1724513 71.46214 105.9769666
## 2 106.8467949 31.57630 61.1959386
## 3 0.3659137 0.00000 0.1439904