---
title: ADAT01
subtitle: Baseline Prevalence and Incidence of Treatment Emergent ADA
---
------------------------------------------------------------------------
{{< include ../../_utils/envir_hook.qmd >}}
```{r setup, echo = FALSE, warning = FALSE, message = FALSE}
library(tern)
library(dplyr)
library(tibble)
adsl <- random.cdisc.data::cadsl
adab <- random.cdisc.data::cadab
# Order needed for the columns is c(1, 3, 4, 2, 5)
reorder_facets <- function(splret, spl, fulldf, ...) {
ord <- c(1, 3, 4, 2, 5)
make_split_result(
splret$values[ord],
splret$datasplit[ord],
splret$labels[ord]
)
}
# Create a custom split function for adding the new columns (facets) and sorting them
custom_column_split_fun <- make_split_fun(
post = list(
add_combo_facet("all_X",
label = "All Drug X",
levels = c("A: Drug X", "C: Combination")
),
add_combo_facet("all_pt",
label = "All Patients",
levels = c("A: Drug X", "B: Placebo", "C: Combination")
),
reorder_facets
)
)
# Ensure character variables are converted to factors and empty strings and NAs are explicit missing levels.
adsl <- df_explicit_na(adsl)
adab <- adab %>%
filter(PARCAT1 == "A: Drug X Antibody") %>%
select(-ARRLT, -NRRLT)
# Baseline Pts
adab_b <- df_explicit_na(adab) %>%
filter(
ABLFL == "Y",
ADABLPFL == "Y",
PARAM %in% c("ADA interpreted per sample result")
) %>%
select(-PARAMCD, -AVALC, -AVALU) %>%
tidyr::pivot_wider(
names_from = PARAM,
values_from = AVAL
) %>%
mutate_at(
c("ADA interpreted per sample result"),
as.logical
) %>%
mutate(
ADABLPFL = ADABLPFL == "Y",
PADABLPFL = `ADA interpreted per sample result` == "TRUE",
NADABLPFL = `ADA interpreted per sample result` == "FALSE"
) %>%
var_relabel(
ADABLPFL = "Baseline evaluable patients",
PADABLPFL = "Patient with a positive sample at baseline",
NADABLPFL = "Patient with no positive samples at baseline"
)
# Post Baseline Treatment Enhanced NAb positive Pts
adab_pb <- df_explicit_na(adab) %>%
filter(
ABLFL != "Y",
ADPBLPFL == "Y",
PARAM %in% c(
"ADA interpreted per sample result",
"Treatment Emergent - Positive",
"Treatment induced ADA",
"Treatment enhanced ADA",
"Treatment Emergent - Negative",
"Treatment unaffected"
)
) %>%
select(-PARAMCD, -AVALC, -AVALU) %>%
unique() %>%
tidyr::pivot_wider(
names_from = PARAM,
values_from = AVAL
) %>%
mutate(
across(
any_of(c(
"ADA interpreted per sample result", "Treatment Emergent - Positive",
"Treatment induced ADA", "Treatment enhanced ADA",
"Treatment Emergent - Negative", "Treatment unaffected"
)),
as.logical
)
) %>%
mutate(
ADPBLPFL = ADPBLPFL == "Y",
PTEFL = if (exists("Treatment Emergent - Positive", where = .)) {
`Treatment Emergent - Positive` == "TRUE"
} else {
FALSE
},
TIFL = if (exists("Treatment induced ADA", where = .)) {
`Treatment induced ADA` == "TRUE"
} else {
FALSE
},
TEFL = if (exists("Treatment enhanced ADA", where = .)) {
`Treatment enhanced ADA` == "TRUE"
} else {
FALSE
},
NTEFL = if (exists("Treatment Emergent - Negative", where = .)) {
`Treatment Emergent - Negative` == "TRUE"
} else {
FALSE
},
TUFL = if (exists("Treatment unaffected", where = .)) {
`Treatment unaffected` == "TRUE"
} else {
FALSE
}
) %>%
var_relabel(
ADPBLPFL = "Post-baseline evaluable patients",
PTEFL = "Patient positive for Treatment Emergent ADA",
TIFL = "Treatment-induced ADA",
TEFL = "Treatment-enhanced ADA",
NTEFL = "Patient negative for Treatment Emergent ADA",
TUFL = "Treatment unaffected"
)
```
```{r include = FALSE}
webr_code_labels <- c("setup")
```
{{< include ../../_utils/webr_no_include.qmd >}}
## Output
:::: panel-tabset
## Standard Table
::: {.panel-tabset .nav-justified group="webr"}
## {{< fa regular file-lines sm fw >}} Preview
```{r variant1, test = list(result_v1 = "result")}
# Layout for Baseline Prevalence of NAbs
lyt_bl <- basic_table(show_colcounts = TRUE) %>%
split_cols_by(
"ACTARM",
split_fun = custom_column_split_fun
) %>%
count_patients_with_flags(
"USUBJID",
flag_variables = "ADABLPFL",
.stats = "count",
var_labels = "Baseline Prevalence of ADAs",
show_labels = "visible",
table_names = "t1"
) %>%
count_patients_with_flags(
"USUBJID",
flag_variables = "PADABLPFL",
table_names = "t2",
.indent_mods = 1L,
var_labels = "a",
show_labels = "hidden"
) %>%
count_patients_with_flags(
"USUBJID",
flag_variables = "NADABLPFL",
.stats = "count",
show_labels = "hidden",
.indent_mods = 1L,
table_names = "t3"
)
# Layout for incidence of NAbs
lyt_pb <- basic_table(show_colcounts = TRUE) %>%
split_cols_by(
"ACTARM",
split_fun = custom_column_split_fun
) %>%
count_patients_with_flags(
"USUBJID",
flag_variables = "ADPBLPFL",
.stats = "count",
var_labels = "Incidence of Treatment Emergent ADAs",
show_labels = "visible",
table_names = "tb1"
) %>%
count_patients_with_flags(
"USUBJID",
flag_variables = "PTEFL",
table_names = "tb2",
.indent_mods = 1L,
show_labels = "hidden"
) %>%
count_patients_with_flags(
"USUBJID",
flag_variables = c("TIFL", "TEFL"),
.stats = "count",
table_names = "tb3",
.indent_mods = 2L,
show_labels = "hidden"
) %>%
count_patients_with_flags(
"USUBJID",
flag_variables = "NTEFL",
table_names = "tb4",
.indent_mods = 1L,
show_labels = "hidden"
) %>%
count_patients_with_flags(
"USUBJID",
flag_variables = "TUFL",
.stats = "count",
table_names = "tb5",
.indent_mods = 2L,
show_labels = "hidden"
)
result_1 <- build_table(lyt_bl, df = adab_b, alt_counts_df = adsl)
result_2 <- build_table(lyt_pb, df = adab_pb, alt_counts_df = adsl)
# Combine tables.
result_1@col_info <- result_2@col_info
result <- rbind(result_1, result_2)
main_title(result) <- paste(
"Baseline Prevalence and Incidence of Treatment Emergent ADA"
)
# nolint start: line_length.
main_footer(result) <- "ADA = Anti-Drug Antibodies (is also referred to as ATA, or Anti-Therapeutic Antibodies) Baseline evaluable patient = a patient with an ADA assay result from a baseline sample(s)
Post-baseline evaluable patient = a patient with an ADA assay result from at least one post-baseline sample Number of patients positive for Treatment Emergent
ADA = the number (and percentage) of post-baseline evaluable patients determined to have treatment-induced ADA or treatment-enhanced ADA during the study period.
Treatment-induced ADA = a patient with negative or missing baseline ADA result(s) and at least one positive post-baseline ADA result.
Treatment-enhanced ADA = a patient with positive ADA result at baseline who has one or more post-baseline titer results that are at least 0.60 t.u. greater than the baseline titer result.
Number of patients negative for Treatment Emergent ADA = number of post-baseline evaluable patients with negative or missing baseline ADA result(s) and all negative post-baseline results, or a patient who is treatment unaffected.
Treatment unaffected = A post-baseline evaluable patient with a positive ADA result at baseline and (a) where all post-baseline titer results are less than 0.60 t.u. greater than the baseline titer result, OR (b) where all post-baseline results are negative or missing.
For any positive sample with titer result less than the minimum reportable titer or any positive sample where a titer cannot be obtained, titer value is imputed as equal to the minimum reportable titer."
# nolint end: line_length.
result
```
```{r include = FALSE}
webr_code_labels <- c("variant1")
```
{{< include ../../_utils/webr.qmd >}}
:::
## Data Setup
```{r setup}
#| code-fold: show
```
::::
{{< include ../../_utils/save_results.qmd >}}
{{< include ../../repro.qmd >}}