Preemptive tocilizumab to mitigate CRS after CTL019 (NCT02906371)
In this document, we provide the computer code that was used to create the tables, figures, and statistical test results of the primary analysis of the NCT02906371 clinical trial, which we report in our manuscript Risk-Adapted Preemptive Tocilizumab to Prevent Severe Cytokine Release Syndrome after CTL019 for Pediatric B-Cell Acute Lymphoblastic Leukemia: A Prospective Clinical Trial (Kadauke et al, Journal of Clinical Oncology 2020). We provide this document to allow other interested parties to inspect, verify, and reproduce our analytic work.
The first part lists concise descriptions of the Analyses we performed. To view the code (written in the R programming language) that was used to perform a specific analysis, as well as the results, click the black triangle to the left of the description to expand each section. The order of this part follows the order of analyses reported in the text of the main manuscript. The section titles mirror the section titles of the manuscript, and tables and figures are cross-referenced.
The second part of this document is a Data Dictionary, which describes each of the tables of the analytical (“clean”) data set in alphabetical order. Click on the black triangle next to the name of a table to reveal information about the fields of the table. Note: to protect sensitive patient information, some of the contents are hidden.
The final part describes the precise Computational Environment in which the computational analyses were performed. Among other parameters, this part lists the names, versions, and sources of all software packages that were used to generate this document.
library(tidyverse)
library(conflicted)
library(lubridate)
library(here)
library(glue)
library(survival)
library(survminer)
library(gt)
library(gtsummary)
library(DescTools)
library(tidymodels)
library(naniar)
library(simplecolors)
library(kableExtra)
library(binom)
library(dataMeta) # devtools::install_github("skadauke/dataMeta")
knitr::opts_chunk$set(
echo = TRUE,
warning = FALSE,
message = FALSE,
cache = TRUE,
layout = "l-page" # by default, allow wide tables
)
conflict_prefer("filter", "dplyr")
conflict_prefer("here", "here")
conflict_prefer("spec", "yardstick")
# Colors optimized for screen, print, and color-blind readers
colors <- list(
orange = "#E69F00",
sky_blue = "#56B4E9",
bluish_green = "#009E73",
yellow = "#F0E442",
blue = "#0072B2",
vermilion = "#D55E00",
purple = "#CC79A7",
black = "#000000"
)
# Modifies the header of tbl_summary objects so the N is printed on a new line
fix_table_header <- function(x) {
# "Overall" column present?
if ("stat_0" %in% colnames(x$table_body)) {
modify_header(
x,
stat_by = "**{level}**<br>N = {n}",
stat_0 = "**Overall**<br>N = {n}"
)
} else {
modify_header(
x,
stat_by = "**{level}**<br>N = {n}"
)
}
}
# Helper function to load rds file and add data frame of the
# same name to the Environment. Assumes that data files are in
# artifacts/ and fake data files are in artifacts/fake
load_data <- function(
tbl_names,
use_fake_data = params$use_fake_data,
envir = rlang::caller_env()
) {
for (tbl_name in tbl_names) {
rds_path <- if (use_fake_data) {
here(glue("artifacts/fake/{tbl_name}.rds"))
} else {
here(glue("artifacts/{tbl_name}.rds"))
}
data <- read_rds(rds_path)
rlang::env_poke(envir, tbl_name, data)
}
}
early_toci_datasets <- c(
"adverse_events",
"astct",
"cart_expansion",
"cd19_status_at_relapse",
"cohort",
"duration_of_remission",
"cytokines",
"demographics",
"disease_assessment",
"event_free_survival",
"events",
"events_validated",
"infusion",
"neurotox",
"overall_survival",
"time_to_b_cell_recovery",
"toci_administration"
)
load_data(early_toci_datasets)
infusion %>%
group_by(subject_id) %>%
summarize(
total_cart = sum(available_cart_dose, na.rm = TRUE),
total_cart_per_kg = sum(total_cart_per_kg, na.rm = TRUE),
.groups = "drop"
) %>%
left_join(
cohort %>%
select(subject_id, cohort),
by = "subject_id"
) %>%
mutate(cohort = recode(
cohort,
"Cohort A" = "High tumor burden cohort",
"Cohort B" = "Low tumor burden cohort")
) %>%
select(-subject_id) %>%
tbl_summary(
by = cohort,
statistic = list(all_continuous() ~ "{median} ({min} - {max})")
) %>%
add_p() %>%
add_overall() %>%
fix_table_header()
Characteristic | Overall N = 701 |
High tumor burden cohort N = 151 |
Low tumor burden cohort N = 551 |
p-value2 |
---|---|---|---|---|
total_cart | 195,300,000 (18,000,000 - 1,152,000,000) | 134,800,000 (18,000,000 - 237,000,000) | 200,000,000 (24,930,000 - 1,152,000,000) | 0.025 |
total_cart_per_kg | 5,000,000 (563,000 - 18,790,000) | 5,000,000 (1,072,000 - 14,530,000) | 5,000,000 (563,000 - 18,790,000) | 0.5 |
1
Statistics presented: Median (Range)
2
Statistical tests performed: Wilcoxon rank-sum test
|
overall_survival %>%
mutate(
time = time / 365 * 12
) %>%
mutate(cohort = recode(
cohort,
"Cohort A" = "High tumor burden cohort",
"Cohort B" = "Low tumor burden cohort")
) %>%
ungroup() %>%
#
# Exclude patients who have died
#
filter(event == 0) %>%
select(time, cohort) %>%
tbl_summary(
by = cohort,
statistic = list(everything() ~ "{median} ({min}, {max})")
) %>%
add_overall() %>%
fix_table_header()
Characteristic | Overall N = 581 |
High tumor burden cohort N = 91 |
Low tumor burden cohort N = 491 |
---|---|---|---|
time | 24 (5, 36) | 27 (17, 35) | 24 (5, 36) |
1
Statistics presented: Median (Range)
|
demographics %>%
left_join(
cohort %>%
select(
subject_id,
blasts_in_bm,
cohort),
by = "subject_id"
) %>%
left_join(
infusion %>%
filter(visit_id == "Infusion #1") %>%
mutate(first_infusion_date = date) %>%
select(
subject_id,
first_infusion_date),
by = "subject_id"
) %>%
mutate(
first_infusion_age = (birthday %--% first_infusion_date) / years()
) %>%
filter(cohort != "Not Assigned") %>%
mutate(cohort = recode(
cohort,
"Cohort A" = "High tumor burden cohort",
"Cohort B" = "Low tumor burden cohort")
) %>%
transmute(
cohort,
first_infusion_age,
male_gender = gender %>%
recode("Male" = TRUE, "Female" = FALSE),
prior_bmt = prior_bmt %>%
recode("Yes" = TRUE, "No" = FALSE),
indication,
blasts_in_bm,
cns,
high_risk_cytogenetics = high_risk_cytogenetics %>%
recode("Yes" = TRUE, "No" = FALSE),
trisomy21 = trisomy21 %>%
recode("Yes" = TRUE, "No" = FALSE)
) %>%
mutate(
blasts_in_bm = case_when(
blasts_in_bm == 0 ~ "MRD negative",
blasts_in_bm < 5 ~ "MRD positive, < 5%",
blasts_in_bm < 40 ~ "5 - 40%",
blasts_in_bm >= 40 ~ "≥ 40%",
TRUE ~ as.character(blasts_in_bm)
) %>% factor(levels = c(
"MRD negative",
"MRD positive, < 5%",
"5 - 40%",
"≥ 40%"
))
) %>%
tbl_summary(
by = cohort,
type = list(c("male_gender", "prior_bmt", "high_risk_cytogenetics") ~ "dichotomous"),
label = list(
vars(first_infusion_age) ~ "Age at infusion, years",
vars(male_gender) ~ "Male",
vars(prior_bmt) ~ "Prior alloHSCT",
vars(indication) ~ "Disease status",
vars(blasts_in_bm) ~ "Percent bone marrow blasts",
vars(cns) ~ "CNS status",
vars(high_risk_cytogenetics) ~ "High-risk genomic lesions",
vars(trisomy21) ~ "Trisomy 21"
),
statistic = list(
vars(first_infusion_age) ~ "{median} ({min}, {max})"
),
digits = list(vars(first_infusion_age) ~ c(1, 1, 1))
) %>%
add_overall() %>%
add_p() %>%
fix_table_header()
Characteristic | Overall N = 701 |
High tumor burden cohort N = 151 |
Low tumor burden cohort N = 551 |
p-value2 |
---|---|---|---|---|
Age at infusion, years | 11.2 (1.4, 29.1) | 6.9 (1.4, 23.4) | 12.6 (1.8, 29.1) | 0.045 |
Male | 41 (59%) | 7 (47%) | 34 (62%) | 0.4 |
Prior alloHSCT | 25 (36%) | 7 (47%) | 18 (33%) | 0.5 |
Disease status | 0.7 | |||
Primary refractory | 14 (20%) | 2 (13%) | 12 (22%) | |
Relapsed | 56 (80%) | 13 (87%) | 43 (78%) | |
Percent bone marrow blasts | <0.001 | |||
MRD negative | 27 (39%) | 0 (0%) | 27 (49%) | |
MRD positive, < 5% | 17 (24%) | 0 (0%) | 17 (31%) | |
5 - 40% | 11 (16%) | 0 (0%) | 11 (20%) | |
≥ 40% | 15 (21%) | 15 (100%) | 0 (0%) | |
CNS status | 0.009 | |||
CNS1 | 61 (87%) | 10 (67%) | 51 (93%) | |
CNS2A | 8 (11%) | 5 (33%) | 3 (5.5%) | |
CNS3 | 1 (1.4%) | 0 (0%) | 1 (1.8%) | |
High-risk genomic lesions | 26 (37%) | 5 (33%) | 21 (38%) | >0.9 |
Trisomy 21 | 6 (8.6%) | 0 (0%) | 6 (11%) | 0.3 |
1
Statistics presented: Median (Range); n (%)
2
Statistical tests performed: Wilcoxon rank-sum test; chi-square test of independence; Fisher's exact test
|
crs_highest_grade <- adverse_events %>%
filter(adverse_event == "Cytokine release syndrome") %>%
select(
subject_id,
grade
) %>%
group_by(subject_id) %>%
summarize(highest_grade = max(grade), .groups="drop")
infusion %>%
select(subject_id) %>%
unique() %>%
#
# Add cohort column
#
left_join(
cohort %>%
select(subject_id, cohort),
by = "subject_id"
) %>%
mutate(cohort = recode(
cohort,
"Cohort A" = "High tumor burden cohort",
"Cohort B" = "Low tumor burden cohort")
) %>%
#
# Add highest_grade column
#
left_join(
crs_highest_grade
, by = "subject_id"
) %>%
mutate(
highest_grade = case_when(
is.na(highest_grade) ~ "None",
highest_grade == 1 ~ "Grade 1",
highest_grade == 2 ~ "Grade 2",
highest_grade == 3 ~ "Grade 3",
highest_grade == 4 ~ "Grade 4"
)
) %>%
#
# Add days_to_first_crs column
#
left_join(
infusion %>%
filter(visit_id == "Infusion #1") %>%
transmute(
subject_id,
infusion_date = date
) %>%
left_join(
adverse_events %>%
filter(adverse_event == "Cytokine release syndrome") %>%
group_by(subject_id) %>%
arrange(start_date) %>%
slice(1) %>%
ungroup() %>%
select(
subject_id,
crs_start_date = start_date
),
by = "subject_id"
) %>%
transmute(
subject_id,
days_to_first_crs = infusion_date %--% crs_start_date / days()
),
by = "subject_id"
) %>%
#
# Add days_to_first_toci column
#
left_join(
toci_administration %>%
filter(!is.na(dose_administered_mg)) %>%
arrange(toci_administration_time) %>%
group_by(subject_id) %>%
slice(1) %>%
ungroup() %>%
transmute(
subject_id,
days_to_first_toci = crs_onset_time %--% toci_administration_time / ddays()
),
by = "subject_id"
) %>%
#
# Add received_toci column
#
mutate(
received_toci = !is.na(days_to_first_toci)
) %>%
transmute(
cohort,
highest_grade,
days_to_first_crs,
received_toci,
days_to_first_toci
) %>%
tbl_summary(
by = cohort,
type = list(
starts_with("days") ~ "continuous"
),
label = list(
"highest_grade" = "CRS maximum grade",
"days_to_first_crs" = "Time to CRS onset, days",
"received_toci" = "Received tocilizumab",
"days_to_first_toci" = "Time from CRS onset to first tocilizumab, days"
),
digits = list(everything() ~ 0, "days_to_first_toci" ~ 1),
missing = "no"
) %>%
add_p() %>%
add_overall() %>%
fix_table_header() %>%
as_gt() %>%
tab_footnote(
footnote = "One patient died from intracerebral hemorrhage in the context of resolving grade 4 CRS 19 days after CTL019 infusion.",
locations = cells_body(
columns = vars(stat_1),
rows = label == "Grade 4"
)
)
Characteristic | Overall N = 701 |
High tumor burden cohort N = 151 |
Low tumor burden cohort N = 551 |
p-value2 |
---|---|---|---|---|
CRS maximum grade | <0.001 | |||
Grade 1 | 4 (6%) | 0 (0%) | 4 (7%) | |
Grade 2 | 36 (51%) | 6 (40%) | 30 (55%) | |
Grade 3 | 6 (9%) | 5 (33%) | 1 (2%) | |
Grade 4 | 6 (9%) | 4 (27%)3 | 2 (4%) | |
None | 18 (26%) | 0 (0%) | 18 (33%) | |
Time to CRS onset, days | 4 (2, 7) | 2 (1, 3) | 5 (2, 8) | 0.021 |
Received tocilizumab | 18 (26%) | 15 (100%) | 3 (5%) | <0.001 |
Time from CRS onset to first tocilizumab, days | 0.6 (0.4, 1.3) | 0.5 (0.4, 0.8) | 2.2 (1.5, 2.7) | 0.076 |
1
Statistics presented: n (%); Median (IQR)
2
Statistical tests performed: Fisher's exact test; Wilcoxon rank-sum test
3
One patient died from intracerebral hemorrhage in the context of resolving grade 4 CRS 19 days after CTL019 infusion.
|
binom.confint(
x = 4,
n = 15,
conf.level = 0.95,
method = c("exact")
)
method x n mean lower upper
1 exact 4 15 0.2666667 0.07787155 0.5510032
Calculate 95% confidence interval for grade 4 CRS in LTBC (2 / 55 subjects).
binom.confint(
x = 2,
n = 55,
conf.level = 0.95,
method = c("exact")
)
method x n mean lower upper
1 exact 2 55 0.03636364 0.004434547 0.1252643
astct_time <- infusion %>%
#
# Add first_infusion_date column
#
filter(visit_id == "Infusion #1") %>%
mutate(infusion_date = date) %>%
select(
subject_id,
infusion_date
) %>%
#
# Add crs_start_date, crs_end_date columns
#
left_join(
astct %>%
select(
subject_id,
crs_start_date = start_date,
crs_end_date = end_date
),
by = "subject_id"
) %>%
#
# Calculate days_to_first_crs and crs_duration columns
#
mutate(
days_to_first_crs = infusion_date %--% crs_start_date / ddays(),
crs_duration = crs_start_date %--% crs_end_date / ddays()
) %>%
#
# Remove patients who did not have CRS
#
drop_na(crs_start_date)
astct %>%
#
# Add cohort column
#
left_join(
cohort %>%
select(subject_id, cohort),
by = "subject_id"
) %>%
mutate(cohort = recode(
cohort,
"Cohort A" = "High tumor burden cohort",
"Cohort B" = "Low tumor burden cohort")
) %>%
#
#
#
left_join(
astct_time %>%
select(
subject_id,
days_to_first_crs,
crs_duration
),
by = "subject_id"
) %>%
mutate(
grade = case_when(
grade == 0 ~ "None",
grade == 1 ~ "Grade 1",
grade == 2 ~ "Grade 2",
grade == 3 ~ "Grade 3",
grade == 4 ~ "Grade 4"
)
) %>%
select(
cohort,
grade,
days_to_first_crs,
crs_duration
) %>%
tbl_summary(
by = cohort,
type = list(
starts_with("days") ~ "continuous"
),
label = list(
grade = "CRS maximum grade",
days_to_first_crs = "Time to first CRS, days",
crs_duration = "Duration of CRS, days"
),
digits = list(everything() ~ 0),
missing = "no"
) %>%
add_p() %>%
add_overall() %>%
fix_table_header()
Characteristic | Overall N = 701 |
High tumor burden cohort N = 151 |
Low tumor burden cohort N = 551 |
p-value2 |
---|---|---|---|---|
CRS maximum grade | <0.001 | |||
Grade 1 | 31 (44%) | 5 (33%) | 26 (47%) | |
Grade 2 | 6 (9%) | 3 (20%) | 3 (5%) | |
Grade 3 | 3 (4%) | 2 (13%) | 1 (2%) | |
Grade 4 | 7 (10%) | 5 (33%) | 2 (4%) | |
None | 23 (33%) | 0 (0%) | 23 (42%) | |
Time to first CRS, days | 4 (2, 6) | 2 (1, 6) | 4 (2, 5) | 0.6 |
Duration of CRS, days | 4 (2, 6) | 10 (5, 12) | 3 (2, 5) | <0.001 |
1
Statistics presented: n (%); Median (IQR)
2
Statistical tests performed: Fisher's exact test; Wilcoxon rank-sum test
|
crs_events <- adverse_events %>%
filter(adverse_event == "Cytokine release syndrome")
crs_highest_grade <- infusion %>%
select(subject_id) %>%
unique() %>%
left_join(crs_events) %>%
group_by(subject_id) %>%
summarize(highest_grade = max(grade)) %>%
left_join(cohort) %>%
select(
subject_id,
cohort,
highest_grade
)
first_crs_event <- adverse_events %>%
filter(
adverse_event == "Cytokine release syndrome"
) %>%
#
# Keep the first record of CRS for every patient
#
group_by(subject_id) %>%
arrange(start_date) %>%
slice(1) %>%
ungroup()
first_infusion <- infusion %>%
filter(visit_id == "Infusion #1") %>%
rename(infusion_date = date)
crs_time <- first_infusion %>%
left_join(first_crs_event) %>%
left_join(cohort) %>%
select(
subject_id,
cohort,
infusion_date,
crs_start_date = start_date
) %>%
mutate(
days_to_first_crs = infusion_date %--% crs_start_date / ddays()
) %>%
drop_na(crs_start_date)
first_toci_administration <- toci_administration %>%
filter(!is.na(dose_administered_mg)) %>%
arrange(toci_administration_time) %>%
#
# Keep the first record of toci for every patient.
#
group_by(subject_id) %>%
slice(1) %>%
ungroup()
toci_time <- first_toci_administration %>%
left_join(cohort) %>%
select(
subject_id,
cohort,
crs_onset_time, # time of the FIRST fever
toci_administration_time
) %>% # n = 18
mutate(
days_to_first_toci = crs_onset_time %--% toci_administration_time / ddays()
)
crs_highest_grade %>%
left_join(
cohort %>%
select(subject_id, blasts_in_bm),
by = "subject_id"
) %>%
left_join(
crs_time %>%
select(subject_id, days_to_first_crs)
) %>%
left_join(
toci_time %>%
select(subject_id, days_to_first_toci)
) %>%
filter(cohort == "Cohort B") %>%
mutate(
mrd_status = case_when(
blasts_in_bm == 0 ~ "MRD-negative",
TRUE ~ "MRD-positive"
),
highest_grade = case_when(
is.na(highest_grade) ~ "None",
highest_grade == 1 ~ "Grade 1",
highest_grade == 2 ~ "Grade 2",
highest_grade == 3 ~ "Grade 3",
highest_grade == 4 ~ "Grade 4"
),
received_toci = !is.na(days_to_first_toci)
) %>%
select(
mrd_status,
highest_grade,
days_to_first_crs,
received_toci,
) %>%
tbl_summary(
by = mrd_status,
type = list(
starts_with("days") ~ "continuous"
),
label = list(
"highest_grade" = "CRS maximum grade",
"days_to_first_crs" = "Time to CRS onset, days",
"received_toci" = "Received tocilizumab"
),
digits = list(everything() ~ 0),
missing = "no"
) %>%
fix_table_header() %>%
add_p()
Characteristic | MRD-negative N = 271 |
MRD-positive N = 281 |
p-value2 |
---|---|---|---|
CRS maximum grade | 0.2 | ||
Grade 1 | 4 (15%) | 0 (0%) | |
Grade 2 | 15 (56%) | 15 (54%) | |
Grade 3 | 0 (0%) | 1 (4%) | |
Grade 4 | 1 (4%) | 1 (4%) | |
None | 7 (26%) | 11 (39%) | |
Time to CRS onset, days | 4 (2, 8) | 5 (2, 7) | 0.7 |
Received tocilizumab | 1 (4%) | 2 (7%) | >0.9 |
1
Statistics presented: n (%); Median (IQR)
2
Statistical tests performed: Fisher's exact test; Wilcoxon rank-sum test
|
disease_assessment <- disease_assessment %>%
left_join(
infusion %>%
filter(visit_id == "Infusion #1") %>%
select(
subject_id,
infusion_date = date
)
) %>%
mutate(
study_day = date - infusion_date
)
# Construct first_response column
disease_assessment <- disease_assessment %>%
group_by(subject_id) %>%
filter(
study_day > 0,
current_response %in% c(
"Complete Remission with incomplete blood count recovery (CRi)",
"Complete Remission (CR)"
)
) %>%
summarize(
first_response_date = min(date)
) %>%
right_join(
disease_assessment
) %>%
mutate(
first_response = date == first_response_date
)
# Construct best_response column
disease_assessment <- disease_assessment %>%
group_by(subject_id) %>%
filter(
study_day > 0
) %>%
summarize(
best_response = max(current_response)
) %>%
right_join(
disease_assessment
) %>%
filter(
study_day > 0
) %>%
group_by(subject_id) %>%
filter(
current_response == best_response
) %>%
summarize(
best_response_date = min(date)
) %>%
right_join(
disease_assessment
) %>%
mutate(
best_response = date == best_response_date
) %>%
select(
subject_id,
visit_id,
date,
infusion_date,
study_day,
current_response,
first_response,
best_response
)
infusion %>%
select(subject_id) %>%
distinct() %>%
#
# Add cohort column
#
left_join(
cohort %>%
select(subject_id, cohort),
by = "subject_id"
) %>%
mutate(cohort = recode(
cohort,
"Cohort A" = "High tumor burden cohort",
"Cohort B" = "Low tumor burden cohort")
) %>%
#
# Add day28, day28_overall, best, and best_overall columns
#
mutate(
day28 = (.) %>%
left_join(disease_assessment, by = "subject_id") %>%
filter(visit_id == "28 Day Follow-Up") %>%
pull(current_response),
day28_overall = ifelse(
day28 != "No Response (Treatment failure)",
TRUE,
FALSE),
best = (.) %>%
left_join(disease_assessment, by = "subject_id") %>%
filter(best_response == TRUE) %>%
pull(current_response),
best_overall = ifelse(
best != "No Response (Treatment failure)",
TRUE,
FALSE),
) %>%
transmute(
cohort,
day28_overall,
day28 = day28 %>% as.character(),
best_overall,
best = best %>% as.character()
) %>%
tbl_summary(
by = cohort,
label = list(
day28_overall ~ "Day 28 Overall Response Rate (ORR)",
day28 ~ "Day 28 Response",
best_overall ~ "Best Overall Response Rate (ORR)",
best ~ "Best Response"
)
) %>%
add_overall() %>%
add_p() %>%
fix_table_header() %>%
as_gt() %>%
tab_footnote(
footnote = "One patient with a day 28 and best response of CRi had minimal residual disease-positive bone marrow on day 28.",
locations = cells_body(
columns = vars(stat_0, stat_1),
rows =
label %in% c(
"Complete Remission with incomplete blood count recovery (CRi)",
"Day 28 Overall Response Rate (ORR)",
"Best Overall Response Rate (ORR)"
)
)
) %>%
tab_footnote(
footnote = "Two patients (one in each cohort) had MRD-negative bone marrow at 28 days but were scored as \"No Response\" due to detection of low numbers of blasts in the cerebrospinal fluid (CNS2 disease). Both patients were found to be in complete remission by 3-month follow-up.",
locations = cells_body(
columns = vars(stat_0, stat_1, stat_2),
rows =
label == "No Response (Treatment failure)" &
variable == "day28"
)
)
Characteristic | Overall N = 701 |
High tumor burden cohort N = 151 |
Low tumor burden cohort N = 551 |
p-value2 |
---|---|---|---|---|
Day 28 Overall Response Rate (ORR) | 66 (94%)3 | 12 (80%)3 | 54 (98%) | 0.029 |
Day 28 Response | <0.001 | |||
Complete Remission (CR) | 31 (44%) | 1 (6.7%) | 30 (55%) | |
Complete Remission with incomplete blood count recovery (CRi) | 35 (50%)3 | 11 (73%)3 | 24 (44%) | |
No Response (Treatment failure) | 4 (5.7%)4 | 3 (20%)4 | 1 (1.8%)4 | |
Best Overall Response Rate (ORR) | 68 (97%)3 | 13 (87%)3 | 55 (100%) | 0.043 |
Best Response | 0.002 | |||
Complete Remission (CR) | 54 (77%) | 7 (47%) | 47 (85%) | |
Complete Remission with incomplete blood count recovery (CRi) | 14 (20%)3 | 6 (40%)3 | 8 (15%) | |
No Response (Treatment failure) | 2 (2.9%) | 2 (13%) | 0 (0%) | |
1
Statistics presented: n (%)
2
Statistical tests performed: Fisher's exact test
3
One patient with a day 28 and best response of CRi had minimal residual disease-positive bone marrow on day 28.
4
Two patients (one in each cohort) had MRD-negative bone marrow at 28 days but were scored as "No Response" due to detection of low numbers of blasts in the cerebrospinal fluid (CNS2 disease). Both patients were found to be in complete remission by 3-month follow-up.
|
dor_km <- survfit(
Surv(time, event) ~ 1,
data = duration_of_remission
)
dor_km_by_cohort <- survfit(
Surv(time, event) ~ cohort,
data = duration_of_remission
)
duration_of_remission_plot <- ggsurvplot_combine(
fit = list(
dor_km_by_cohort,
dor_km
),
data = duration_of_remission,
conf.int = FALSE,
legend = "none",
title = "Duration of Remission",
ylab = "Probability of Continued Remission",
xlab = "Years since Onset of Remission",
palette = c(colors$vermilion,
colors$sky_blue,
colors$black),
risk.table = "absolute",
legend.labs = c("HTBC", "LTBC", "Overall"),
break.time.by = 0.5,
xlim = c(0, 2)
)
duration_of_remission_plot$plot <- duration_of_remission_plot$plot +
annotate(
"text",
x = 1.2, y = 0.9, hjust = 0,
label = "Low tumor burden cohort"
) +
annotate(
"text",
x = 1.2, y = 0.3, hjust = 0,
label = "High tumor burden cohort"
) +
annotate(
"text",
x = 1.2, y = 0.67, hjust = 0,
label = "Overall"
) +
annotate(
"text",
x = -.05, y = 0, hjust = 0,
label = glue("P < 0.001")
)
duration_of_remission_plot
Call: survfit(formula = Surv(time, event) ~ cohort, data = duration_of_remission)
cohort=Cohort A
time n.risk n.event survival std.err lower 95% CI upper 95% CI
1 5 6 0.486 0.148 0.268 0.883
2 3 1 0.389 0.147 0.185 0.816
cohort=Cohort B
time n.risk n.event survival std.err lower 95% CI upper 95% CI
1 34 7 0.861 0.0489 0.770 0.962
2 15 3 0.779 0.0630 0.665 0.913
events <- events %>%
#
# Add cohort column
#
left_join(
cohort %>%
select(subject_id, cohort),
by = "subject_id"
) %>%
mutate(cohort = recode(
cohort,
"Cohort A" = "HTBC",
"Cohort B" = "LTBC")
) %>%
select(
subject_id,
cohort,
everything()
)
events %>%
#
# Add column for "best response" and remove if best response
# was "No response"
#
left_join(
disease_assessment %>%
filter(best_response == TRUE) %>%
select(
subject_id,
best_response = current_response
),
by = "subject_id"
) %>%
filter(best_response %in% c(
"Complete Remission (CR)",
"Complete Remission with incomplete blood count recovery (CRi)")
) %>%
#
# Identify relapsed disease events
#
filter(event == "Relapsed disease") %>%
#
# Only include data from first 24 months
#
# filter(study_day <= 730) %>%
select(event, cohort) %>%
tbl_summary(by = cohort, statistic = everything() ~ "{n}")
Characteristic | HTBC, N = 61 | LTBC, N = 61 |
---|---|---|
event | ||
Relapsed disease | 6 | 6 |
1
Statistics presented: n
|
cd19_status_at_relapse <- cd19_status_at_relapse %>%
#
# Add cohort column
#
left_join(
cohort %>%
select(subject_id, cohort),
by = "subject_id"
) %>%
mutate(cohort = recode(
cohort,
"Cohort A" = "High tumor burden cohort",
"Cohort B" = "Low tumor burden cohort")
)
cd19_status_at_relapse %>%
mutate(
cd19_relapse_phenotype = factor(
cd19_relapse_phenotype,
levels = c(
"CD19 positive",
"CD19 negative",
"CD19 subset negative",
"Lineage switch to AML"
)
)
) %>%
select(
cohort,
cd19_relapse_phenotype
) %>%
tbl_summary(
by = cohort,
label = list(
vars(cd19_relapse_phenotype) ~ "Leukemia cell phenotype at relapse"
)
) %>%
add_overall() %>%
fix_table_header() %>%
as_gt()
Characteristic | Overall N = 191 |
High tumor burden cohort N = 91 |
Low tumor burden cohort N = 101 |
---|---|---|---|
Leukemia cell phenotype at relapse | |||
CD19 positive | 7 (37%) | 1 (11%) | 6 (60%) |
CD19 negative | 9 (47%) | 6 (67%) | 3 (30%) |
CD19 subset negative | 1 (5.3%) | 1 (11%) | 0 (0%) |
Lineage switch to AML | 2 (11%) | 1 (11%) | 1 (10%) |
1
Statistics presented: n (%)
|
cd19_status_at_relapse %>%
select(cohort, cd19_relapse_pos_neg) %>%
tbl_summary(
by = cohort
) %>%
add_overall() %>%
add_p() %>%
fix_table_header() %>%
as_gt()
Characteristic | Overall N = 191 |
High tumor burden cohort N = 91 |
Low tumor burden cohort N = 101 |
p-value2 |
---|---|---|---|---|
cd19_relapse_pos_neg | 0.057 | |||
CD19 negative | 12 (63%) | 8 (89%) | 4 (40%) | |
CD19 positive | 7 (37%) | 1 (11%) | 6 (60%) | |
1
Statistics presented: n (%)
2
Statistical tests performed: Fisher's exact test
|
event_free_survival <- event_free_survival %>%
mutate(
time = time / 365
)
efs_diff <- survdiff(
Surv(time, event) ~ cohort,
data = event_free_survival
)
# For some reason the p-value is not a component of the
# value list of the survdiff object, so calculate here
# for use in the plot
efs_diff_p <- 1 - pchisq(efs_diff$chisq, length(efs_diff$n) - 1)
efs_diff
Call:
survdiff(formula = Surv(time, event) ~ cohort, data = event_free_survival)
N Observed Expected (O-E)^2/E (O-E)^2/V
cohort=Cohort A 15 11 3.38 17.16 20.7
cohort=Cohort B 55 10 17.62 3.29 20.7
Chisq= 20.7 on 1 degrees of freedom, p= 5e-06
efs_km <- survfit(
Surv(time, event) ~ 1,
data = event_free_survival
)
efs_km_by_cohort <- survfit(
Surv(time, event) ~ cohort,
data = event_free_survival
)
event_free_survival_plot <- ggsurvplot_combine(
fit = list(
efs_km_by_cohort,
efs_km
),
data = event_free_survival,
# conf.int = TRUE,
legend = "none",
title = "Event-free Survival",
ylab = "Probability",
xlab = "Years since CTL019 Infusion",
palette = c(colors$vermilion,
colors$sky_blue,
colors$black),
risk.table = "absolute",
legend.labs = c("HTBC", "LTBC", "Overall"),
break.time.by = 0.5,
xlim = c(0, 2)
)
event_free_survival_plot$plot <- event_free_survival_plot$plot +
annotate(
"text",
x = 1.25, y = 0.9, hjust = 0,
label = "Low tumor burden cohort"
) +
annotate(
"text",
x = 1, y = 0.28, hjust = 0,
label = "High tumor burden cohort"
) +
annotate(
"text",
x = 1.15, y = 0.68, hjust = 0,
label = "Overall"
) +
annotate(
"text",
x = -.05, y = 0, hjust = 0,
label = glue("P < 0.001")
)
event_free_survival_plot
Call: survfit(formula = Surv(time, event) ~ cohort, data = event_free_survival)
cohort=Cohort A
time n.risk n.event survival std.err lower 95% CI upper 95% CI
1 5 8 0.421 0.135 0.225 0.791
2 4 1 0.337 0.132 0.157 0.726
cohort=Cohort B
time n.risk n.event survival std.err lower 95% CI upper 95% CI
1 34 7 0.861 0.0489 0.770 0.962
2 24 3 0.780 0.0627 0.666 0.913
efs_km_by_cohort
Call: survfit(formula = Surv(time, event) ~ cohort, data = event_free_survival)
n events median 0.95LCL 0.95UCL
cohort=Cohort A 15 11 0.964 0.205 NA
cohort=Cohort B 55 10 NA NA NA
os_km <- survfit(
Surv(time, event) ~ 1,
data = overall_survival
)
os_km_by_cohort <- survfit(
Surv(time, event) ~ cohort,
data = overall_survival
)
overall_survival_plot <- ggsurvplot_combine(
fit = list(
os_km_by_cohort,
os_km
),
data = overall_survival,
conf.int = FALSE,
legend = "none",
title = "Overall Survival",
ylab = "Probability of Survival",
xlab = "Years since CTL019 Infusion",
ylim = c(0, 1.05),
palette = c(colors$vermilion,
colors$sky_blue,
colors$black),
risk.table = "absolute",
legend.labs = c("HTBC", "LTBC", "Overall"),
break.time.by = 0.5,
xlim = c(0, 2)
)
overall_survival_plot$plot <- overall_survival_plot$plot +
annotate(
"text",
x = 1, y = 1.02, hjust = 0,
label = "Low tumor burden cohort"
) +
annotate(
"text",
x = 1.29, y = 0.65, hjust = 0,
label = "High tumor burden cohort"
) +
annotate(
"text",
x = 1.18, y = 0.8, hjust = 0,
label = "Overall"
) +
annotate(
"text",
x = -.05, y = 0, hjust = 0,
label = glue("P = {format(os_diff_p, digits = 1)}")
)
overall_survival_plot
Call: survfit(formula = Surv(time, event) ~ cohort, data = overall_survival)
cohort=Cohort A
time n.risk n.event survival std.err lower 95% CI upper 95% CI
1 10 5 0.667 0.122 0.466 0.953
2 6 1 0.600 0.126 0.397 0.907
cohort=Cohort B
time n.risk n.event survival std.err lower 95% CI upper 95% CI
1 46 2 0.963 0.0255 0.915 1.000
2 33 2 0.920 0.0388 0.846 0.999
bca_km <- survfit(
Surv(time, event) ~ 1,
data = time_to_b_cell_recovery
)
bca_km_by_cohort <- survfit(
Surv(time, event) ~ cohort,
data = time_to_b_cell_recovery
)
b_cell_aplasia_by_cohort_plot <- ggsurvplot_combine(
fit = list(
bca_km_by_cohort,
bca_km
),
data = time_to_b_cell_recovery,
conf.int = FALSE,
legend = "none",
title = "B Cell Aplasia",
ylab = "Probability of B Cell Aplasia",
xlab = "Years since Onset of Remission",
palette = c(colors$vermilion,
colors$sky_blue,
colors$black),
risk.table = "absolute",
legend.labs = c("HTBC", "LTBC", "Overall"),
break.time.by = 0.5,
xlim = c(0, 2)
)
b_cell_aplasia_by_cohort_plot$plot <- b_cell_aplasia_by_cohort_plot$plot +
annotate(
"text",
x = 1, y = 0.45, hjust = 0,
label = "High tumor burden cohort"
) +
annotate(
"text",
x = 1 , y = 0.7, hjust = 0,
label = "Low tumor burden cohort, Overall"
) +
annotate(
"text",
x = -.05, y = 0, hjust = 0,
label = glue("P = {format(bca_diff_p, digits = 2)}")
)
b_cell_aplasia_by_cohort_plot
Call: survfit(formula = Surv(time, event) ~ cohort, data = time_to_b_cell_recovery)
cohort=Cohort A
time n.risk n.event survival std.err lower 95% CI upper 95% CI
0.5 4 2 0.686 0.186 0.403 1
1.0 2 1 0.514 0.204 0.236 1
2.0 1 0 0.514 0.204 0.236 1
cohort=Cohort B
time n.risk n.event survival std.err lower 95% CI upper 95% CI
0.5 32 18 0.653 0.0664 0.535 0.797
1.0 24 1 0.632 0.0675 0.513 0.779
2.0 12 1 0.603 0.0703 0.480 0.758
cart_expansion
data frame and create a plot template.
cart_expansion <- cart_expansion %>%
left_join(
cohort %>%
select(subject_id, cohort),
by = "subject_id"
) %>%
mutate(cohort = recode(
cohort,
"Cohort A" = "High tumor burden cohort",
"Cohort B" = "Low tumor burden cohort")
) %>%
#
# Add highest_grade column
#
left_join(
crs_highest_grade %>%
select(
subject_id,
highest_grade
) %>%
mutate(highest_grade = factor(case_when(
is.na(highest_grade) ~ "None",
TRUE ~ as.character(highest_grade)
),
levels = c("None", "1", "2", "3", "4")
)
),
by = "subject_id"
) %>%
mutate(
highest_grade = replace_na(highest_grade, "None")
)
# General plot object for flow and qPCR graphs, grouped by different variables
set.seed(1000) # jitter
cart_expansion_plot <- cart_expansion %>%
ggplot(aes(x = day_post_infusion)) +
geom_jitter(alpha = 0.4, width = 0.3) +
geom_smooth(se = FALSE) +
theme_pubr() +
xlim(5,30) +
xlab("Days after CTL019 infusion")
cart_expansion_plot +
aes(
y = cart_per_ul,
color = cohort
) +
labs(
y = expression("CAR-T cells (cells/" * mu * "L)"),
color = "Cohort"
) +
scale_color_manual(values = c(colors$vermilion, colors$sky_blue))
cart_expansion %>%
group_by(subject_id) %>%
filter(
cart_per_ul == max(cart_per_ul, na.rm = TRUE)
) %>%
ungroup() %>%
select(
cohort,
day_post_infusion
) %>%
tbl_summary(
by = cohort
) %>%
add_p() %>%
add_overall() %>%
fix_table_header()
Characteristic | Overall N = 701 |
High tumor burden cohort N = 151 |
Low tumor burden cohort N = 551 |
p-value2 |
---|---|---|---|---|
day_post_infusion | 10.0 (10.0, 13.8) | 10.0 (10.0, 17.0) | 10.0 (10.0, 11.5) | 0.2 |
1
Statistics presented: Median (IQR)
2
Statistical tests performed: Wilcoxon rank-sum test
|
cart_expansion_plot +
aes(
y = bbz_copies,
color = cohort
) +
labs(
y = expression("CAR-T transgene (copies/" * mu * "g DNA)"),
color = "Cohort"
) +
scale_color_manual(values = c(colors$vermilion, colors$sky_blue))
cart_expansion %>%
group_by(subject_id) %>%
filter(
bbz_copies == max(bbz_copies, na.rm = TRUE)
) %>%
ungroup() %>%
select(
cohort,
day_post_infusion
) %>%
tbl_summary(
by = cohort
) %>%
add_p() %>%
add_overall()
Characteristic | Overall, N = 701 | High tumor burden cohort, N = 151 | Low tumor burden cohort, N = 551 | p-value2 |
---|---|---|---|---|
day_post_infusion | 10.0 (10.0, 14.0) | 10.0 (10.0, 17.5) | 10.0 (9.5, 11.5) | 0.027 |
1
Statistics presented: Median (IQR)
2
Statistical tests performed: Wilcoxon rank-sum test
|
cart_expansion %>%
filter(highest_grade == 4) %>%
drop_na(cart_per_ul) %>%
ggplot(
aes(x = day_post_infusion,
y = cart_per_ul,
color = cohort)
) +
geom_point() +
geom_line(
aes(group = subject_id),
size = 0.75
) +
theme_pubr() +
xlab("Days after CTL019 infusion") +
ylab("CAR-T cells (cells/uL)") +
labs(
color = guide_legend("Cohort")
) +
scale_color_manual(values = c(colors$vermilion, colors$sky_blue)) +
annotate(
"text",
x = 9, y = 350, hjust = 0,
label = "Patient 21"
) +
annotate(
"text",
x = 0, y = 7000, hjust = 0, size = 6,
label = "CRS 4 only"
)
cart_expansion %>%
filter(highest_grade == 4) %>%
drop_na(bbz_copies) %>%
ggplot(
aes(x = day_post_infusion,
y = bbz_copies,
color = cohort)
) +
geom_point() +
geom_line(
aes(group = subject_id),
size = 0.75
) +
theme_pubr() +
labs(
x = "Days after CTL019 infusion",
y = expression("CAR-T transgene (copies/" * mu * "g DNA)"),
color = "Cohort"
) +
scale_color_manual(values = c(colors$vermilion, colors$sky_blue)) +
annotate(
"text",
x = 9, y = 22000, hjust = 0,
label = "Patient 21"
) +
annotate(
"text",
x = 0, y = 150000, hjust = 0, size = 6,
label = "CRS 4 only"
)
cart_expansion_models <- cart_expansion %>%
select(
subject_id,
cohort,
highest_grade,
day_post_infusion,
bbz_copies,
) %>%
nest(
data = c(
day_post_infusion,
bbz_copies
)
) %>% # n = 70
#
# na.rm = FALSE to remove incomplete time series
#
mutate(
qpcr_auc = map_dbl(data, ~ AUC(.$day_post_infusion, .$bbz_copies, na.rm = FALSE)),
qpcr_max = map_dbl(data, ~ max(.$bbz_copies, na.rm = FALSE))
)
# Use Wilcox rank sum test to compare cohorts in terms of qPCR AUC and Cmax values.
qpcr_auc_test <- cart_expansion_models %>%
wilcox.test(qpcr_auc ~ cohort, data = .) %>%
tidy()
kable(qpcr_auc_test)
statistic | p.value | method | alternative |
---|---|---|---|
720 | 7e-07 | Wilcoxon rank sum test with continuity correction | two.sided |
qpcr_max_test <- cart_expansion_models %>%
wilcox.test(qpcr_max ~ cohort, data = .) %>%
tidy()
kable(qpcr_max_test)
statistic | p.value | method | alternative |
---|---|---|---|
690 | 6.6e-06 | Wilcoxon rank sum test with continuity correction | two.sided |
# Set up a plot template
set.seed(1000) # jitter
cart_expansion_qpcr_plot_template <- cart_expansion_models %>%
ggplot(aes(
x = cohort,
color = highest_grade)
) +
geom_jitter(width = 0.12, alpha = 0.8, size = 3) +
stat_summary(aes(group = cohort),
fun = median,
fun.min = median,
fun.max = median,
geom = "crossbar",
width = 0.3,
show.legend = FALSE # removes boxplot outline
) +
scale_color_manual(values = sc_blue(1:5)) +
theme_pubr() +
labs(
x = "Cohort",
color = "Highest CRS grade"
)
cart_expansion_qpcr_plot_template +
aes(y = qpcr_max) +
labs(y = expression("CAR-T transgene maximum (copies/" * mu * "g)")) +
geom_bracket(
xmin = 1,
xmax = 2,
y.position = 170000,
label = "p < 0.001",
color = "black"
)
cart_expansion_qpcr_plot_template +
aes(y = qpcr_auc) +
labs(y = expression("CAR-T transgene AUC (copies/" * mu * "g" %*% "days)")) +
geom_bracket(
xmin = 1,
xmax = 2,
y.position = 2000000,
label = "p < 0.001",
color = "black"
)
cytokine_models <- cytokines %>%
select(
subject_id,
sample_date,
cytokine_name,
result
) %>%
#
# Select LTBC patients
#
left_join(
cohort %>%
select(
subject_id,
cohort
),
by = "subject_id"
) %>%
filter(cohort == "Cohort B") %>%
select(-cohort) %>%
#
# Add day_post_infusion column and select days 0-3
#
left_join(
infusion %>%
filter(study_day == 0) %>%
select(
subject_id,
infusion_date = date
),
by = "subject_id"
) %>%
mutate(
day_post_infusion = infusion_date %--% sample_date / ddays(1)
) %>%
filter(
day_post_infusion %in% 0:3
) %>%
#
# Calculate 3-day Cmax for each cytokine-patient
#
group_by(
subject_id,
cytokine_name
) %>%
summarize(
cmax = max(result, na.rm = TRUE),
.groups = "drop"
) %>%
# max() with na.rm = TRUE will return -Inf if *all* values were NA
mutate(
cmax = ifelse(cmax == -Inf, NA, cmax)
) %>%
#
# Add severe_crs column
#
left_join(
crs_highest_grade %>%
mutate(severe_crs = factor(case_when(
highest_grade == 4 ~ "Yes",
TRUE ~ "No"
))) %>%
select(
subject_id,
severe_crs,
),
by = "subject_id"
) %>%
mutate(
severe_crs = replace_na(severe_crs, "No")
) %>%
#
# Add Wilcox models with Holm's adjustment for multiple comparisons
# (one model per cytokine)
#
nest(
data = c(subject_id, cmax, severe_crs)
) %>%
mutate(
p_value = data %>%
map_dbl(~ wilcox.test(cmax ~ severe_crs, data = .) %>%
tidy() %>%
pull(p.value) %>%
p.adjust(method = "holm", n = 30) # we are considering 30 cytokines
)
) %>%
#
# Order by p-value for the plot
#
mutate(
cytokine_name = cytokine_name %>%
fct_reorder(p_value)
) %>%
unnest(cols = data)
set.seed(1000) # jitter
cytokine_models %>%
mutate(
crs_grade = recode(
severe_crs,
"Yes" = "4",
"No" = "0-3"
)
) %>%
ggplot(aes(
x = crs_grade,
y = cmax)
) +
geom_blank(aes(y = cmax * 1.3)) + # expand y axis
geom_jitter(
width = 0.12,
alpha = 0.8,
size = 2) +
stat_summary(aes(group = crs_grade),
fun = median,
fun.min = median,
fun.max = median,
geom = "crossbar",
width = 0.3,
show.legend = FALSE # removes boxplot outline
) +
facet_wrap(
~cytokine_name,
scales = "free",
nrow = 6
) +
scale_color_manual(values = c(colors$orange, colors$sky_blue)) +
theme_pubr() +
labs(
x = "CRS grade",
y = "Day 0-3 maximum serum concentration (pg/mL)",
color = element_blank()
) +
stat_pvalue_manual(
cytokine_models %>%
group_by(cytokine_name) %>%
mutate(
group1 = "0-3",
group2 = "4",
y.position = max(cmax, na.rm = TRUE) * 1.15 # make space for p-value
) %>%
select(
cytokine_name,
group1,
group2,
p_value,
y.position
) %>%
distinct() %>%
ungroup(),
label = "p = {signif(p_value, 1)}") +
theme(
axis.title.x = element_text(size = rel(1.3)),
axis.title.y = element_text(size = rel(1.3))
)
Model “C” is a logistic regression with IFN-γ, IL-13, and MIP-1α levels as predictors.
result = expit(8.483 * log10(IFNg) - 5.599 * log10(IL13) - 16.343 * log10(MIP1a) + 15.742)
predict low risk if result ≤ 0.3288
Model “E” is a simple decision tree with IFN-γ and and MIP-1α as predictors.
if (IFN-γ < 27.6732): NOT severe CRS
else if (MIP-1α < 30.1591): severe CRS
else if (IFN-γ < 94.8873): NOT severe CRS
else: severe CRS
model_data <- cytokine_models %>%
#
# Exclude patient #20 who had grade 4 CRS on day 2 after infusion
# which is too early for the models to detect and also very unusual
#
filter(
subject_id != "16CT022-20"
) %>%
filter(
cytokine_name %in% c("IL-10", "IL-13", "IFN-γ", "MIP-1α")
) %>%
select(
subject_id,
cytokine_name,
cmax,
severe_crs
) %>%
mutate(severe_crs = severe_crs %>% factor(levels = c("Yes", "No"))) %>%
pivot_wider(
names_from = cytokine_name,
values_from = cmax
)
expit <- function(x) {
exp(x)/(1+exp(x))
}
model_c_predict <- function(ifng, il13, mip1a) {
if (is.na(ifng) | is.na(il13) | is.na(mip1a)) { NA }
else {
result <- expit(8.483 * log10(ifng) - 5.599 * log10(il13) - 16.343 * log10(mip1a) + 15.742)
if (result <= 0.3288) { "No" }
else { "Yes" }
}
}
model_data <- model_data %>%
mutate(
model_c_prediction = pmap_chr(
list(`IFN-γ`, `IL-13`, `MIP-1α`),
model_c_predict) %>%
factor(levels = c("Yes", "No"))
)
model_e_predict <- function(ifng, mip1a) {
if (is.na(ifng) | is.na(mip1a)) { NA }
else {
if (ifng < 27.6732) { "No" }
else if (mip1a < 30.1591) { "Yes" }
else if (ifng < 94.8873) { "No" }
else { "Yes" }
}
}
model_data <- model_data %>%
mutate(
model_e_prediction = map2_chr(`IFN-γ`, `MIP-1α`, model_e_predict) %>%
factor(levels = c("Yes", "No"))
)
# Model C metrics
model_c_conf_mat <- model_data %>%
conf_mat(
estimate = model_c_prediction,
truth = severe_crs
)
model_c_conf_mat_plot <- model_c_conf_mat %>%
autoplot(type = "heatmap")
model_c_sens <- model_c_conf_mat$table %>%
sens() %>%
pull(.estimate)
model_c_spec <- model_c_conf_mat$table %>%
spec() %>%
pull(.estimate)
model_c_ppv <- model_c_conf_mat$table %>%
ppv() %>%
pull(.estimate)
model_c_npv <- model_c_conf_mat$table %>%
npv() %>%
pull(.estimate)
model_c_stats <- ggplot() +
xlim(0, 4) +
ylim(-.3, 1) +
annotate(
"text",
x = 0, y = 0.75, hjust = 0, size = 5,
label = glue("Sensitivity = {signif(model_c_sens, 2)}")
) +
annotate(
"text",
x = 0, y = 0.25, hjust = 0, size = 5,
label = glue("Specificity = {signif(model_c_spec, 2)}")
) +
annotate(
"text",
x = 2.25, y = 0.75, hjust = 0, size = 5,
label = glue("PPV = {signif(model_c_ppv, 2)}")
) +
annotate(
"text",
x = 2.25, y = 0.25, hjust = 0, size = 5,
label = glue("NPV = {signif(model_c_npv, 2)}")
) +
theme_void()
model_c_plot <- ggarrange(model_c_conf_mat_plot, model_c_stats, widths = c(1, 2.5)) %>%
annotate_figure(
top = text_grob(
"Model C: IFN-γ + IL-13 + MIP-1α (logistic regression)",
face = "bold", size = 16
)
)
# Model E metrics
model_e_conf_mat <- model_data %>%
conf_mat(
estimate = model_e_prediction,
truth = severe_crs
)
model_e_conf_mat_plot <- model_e_conf_mat %>%
autoplot(type = "heatmap")
model_e_sens <- model_e_conf_mat$table %>%
sens() %>%
pull(.estimate)
model_e_spec <- model_e_conf_mat$table %>%
spec() %>%
pull(.estimate)
model_e_ppv <- model_e_conf_mat$table %>%
ppv() %>%
pull(.estimate)
model_e_npv <- model_e_conf_mat$table %>%
npv() %>%
pull(.estimate)
model_e_stats <- ggplot() +
xlim(0, 4) +
ylim(-.3, 1) +
annotate(
"text",
x = 0, y = 0.75, hjust = 0, size = 5,
label = glue("Sensitivity = {signif(model_e_sens, 2)}")
) +
annotate(
"text",
x = 0, y = 0.25, hjust = 0, size = 5,
label = glue("Specificity = {signif(model_e_spec, 2)}")
) +
annotate(
"text",
x = 2.25, y = 0.75, hjust = 0, size = 5,
label = glue("PPV = {signif(model_e_ppv, 2)}")
) +
annotate(
"text",
x = 2.25, y = 0.25, hjust = 0, size = 5,
label = glue("NPV = {signif(model_e_npv, 2)}")
) +
theme_void()
model_e_plot <- ggarrange(model_e_conf_mat_plot, model_e_stats, widths = c(1, 2.5)) %>%
annotate_figure(
top = text_grob(
"Model E: IFN-γ + MIP-1α (decision tree)",
face = "bold", size = 16
)
)
ggarrange(
model_c_plot,
model_e_plot,
nrow = 2,
labels = c("A", "B")
)
neurotox %>%
#
# Add cohort column
#
left_join(
cohort %>%
select(subject_id, cohort),
by = "subject_id"
) %>%
mutate(cohort = recode(
cohort,
"Cohort A" = "High tumor burden cohort",
"Cohort B" = "Low tumor burden cohort")
) %>%
mutate(
grade_conventional = case_when(
grade_conventional == 0 ~ "None",
grade_conventional == 1 ~ "Grade 1",
grade_conventional == 2 ~ "Grade 2",
grade_conventional == 3 ~ "Grade 3",
grade_conventional == 4 ~ "Grade 4"
),
grade_icans = case_when(
grade_icans %in% c("0", "1", "2") ~ "Unable to grade",
grade_icans == 3 ~ "Grade 3",
grade_icans == 4 ~ "Grade 4"
),
duration = start_date %--% end_date / ddays(1)
) %>%
select(
cohort,
grade_conventional,
duration,
grade_icans
) %>%
tbl_summary(
by = cohort,
type = list(
starts_with("days") ~ "continuous"
),
label = list(
grade_conventional = "Neurotoxicity, CTCAE 4.03 grading, maximum grade",
duration = "Neurotoxicity, CTCAE 4.03 grading, duration, days",
grade_icans = "Neurotoxicity, ASTCT ICANS grading, maximum grade"
),
digits = list(everything() ~ 0),
missing = c("no")
) %>%
add_p() %>%
add_overall() %>%
fix_table_header()
Characteristic | Overall N = 701 |
High tumor burden cohort N = 151 |
Low tumor burden cohort N = 551 |
p-value2 |
---|---|---|---|---|
Neurotoxicity, CTCAE 4.03 grading, maximum grade | 0.006 | |||
Grade 1 | 5 (7%) | 2 (13%) | 3 (5%) | |
Grade 2 | 9 (13%) | 4 (27%) | 5 (9%) | |
Grade 3 | 4 (6%) | 2 (13%) | 2 (4%) | |
Grade 4 | 1 (1%) | 1 (7%) | 0 (0%) | |
None | 51 (73%) | 6 (40%) | 45 (82%) | |
Neurotoxicity, CTCAE 4.03 grading, duration, days | 5 (3, 6) | 6 (4, 8) | 4 (2, 6) | 0.3 |
Neurotoxicity, ASTCT ICANS grading, maximum grade | 0.010 | |||
Grade 3 | 3 (5%) | 2 (22%) | 1 (2%) | |
Grade 4 | 1 (2%) | 1 (11%) | 0 (0%) | |
Unable to grade | 55 (93%) | 6 (67%) | 49 (98%) | |
1
Statistics presented: n (%); Median (IQR)
2
Statistical tests performed: Fisher's exact test; Wilcoxon rank-sum test
|
adverse_events_table <- adverse_events %>%
#
# Remove AEs judged to be unrelated to CTL019
#
filter(related != "Unrelated") %>%
filter(grade %in% 3:4) %>%
select(
subject_id,
adverse_event
) %>%
distinct() %>%
#
# Remove adverse events with fewer than 3 patients
#
add_count(adverse_event) %>%
filter(n > 2) %>%
#
# Convert adverse_event into dummy columns
#
mutate(dummy = 1) %>%
pivot_wider(
id_cols = subject_id,
names_from = adverse_event,
values_from = dummy,
values_fill = list(dummy = 0)
) %>%
#
# Make sure we have a row for each infused patient
#
right_join(
infusion %>%
select(subject_id) %>%
distinct(),
by = "subject_id"
) %>%
mutate_all(~ replace_na(., 0)) %>%
#
# Add cohort column
#
left_join(
cohort %>%
select(subject_id, cohort),
by = "subject_id"
) %>%
mutate(cohort = recode(
cohort,
"Cohort A" = "High tumor burden cohort",
"Cohort B" = "Low tumor burden cohort")
) %>%
select(-subject_id) %>%
tbl_summary(
by = cohort
) %>%
add_overall() %>%
add_p() %>%
sort_p() %>%
fix_table_header() %>%
as_gt()
adverse_events_table
Characteristic | Overall N = 701 |
High tumor burden cohort N = 151 |
Low tumor burden cohort N = 551 |
p-value2 |
---|---|---|---|---|
Cytokine release syndrome | 12 (17%) | 9 (60%) | 3 (5.5%) | <0.001 |
Hypoxia | 9 (13%) | 7 (47%) | 2 (3.6%) | <0.001 |
Febrile neutropenia | 40 (57%) | 15 (100%) | 25 (45%) | <0.001 |
Hypophosphatemia | 10 (14%) | 6 (40%) | 4 (7.3%) | 0.005 |
Aspartate aminotransferase increased | 10 (14%) | 6 (40%) | 4 (7.3%) | 0.005 |
Anorexia | 5 (7.1%) | 4 (27%) | 1 (1.8%) | 0.006 |
Fibrinogen decreased | 3 (4.3%) | 3 (20%) | 0 (0%) | 0.008 |
Hypotension | 8 (11%) | 5 (33%) | 3 (5.5%) | 0.009 |
Acidosis | 4 (5.7%) | 3 (20%) | 1 (1.8%) | 0.029 |
Blood bilirubin increased | 4 (5.7%) | 3 (20%) | 1 (1.8%) | 0.029 |
Anemia | 10 (14%) | 5 (33%) | 5 (9.1%) | 0.031 |
Neutrophil count decreased | 38 (54%) | 12 (80%) | 26 (47%) | 0.050 |
White blood cell decreased | 38 (54%) | 12 (80%) | 26 (47%) | 0.050 |
Platelet count decreased | 19 (27%) | 7 (47%) | 12 (22%) | 0.10 |
Activated partial thromboplastin time prolonged | 3 (4.3%) | 2 (13%) | 1 (1.8%) | 0.11 |
Hyperglycemia | 3 (4.3%) | 2 (13%) | 1 (1.8%) | 0.11 |
Hyperkalemia | 3 (4.3%) | 2 (13%) | 1 (1.8%) | 0.11 |
Lymphocyte count decreased | 42 (60%) | 12 (80%) | 30 (55%) | 0.14 |
Encephalopathy | 4 (5.7%) | 2 (13%) | 2 (3.6%) | 0.2 |
Hypokalemia | 8 (11%) | 3 (20%) | 5 (9.1%) | 0.4 |
Alanine aminotransferase increased | 9 (13%) | 3 (20%) | 6 (11%) | 0.4 |
Fever | 4 (5.7%) | 1 (6.7%) | 3 (5.5%) | >0.9 |
Upper respiratory infection | 3 (4.3%) | 0 (0%) | 3 (5.5%) | >0.9 |
1
Statistics presented: n (%)
2
Statistical tests performed: chi-square test of independence; Fisher's exact test
|
adverse_events
adverse_events |
||
---|---|---|
Adverse events. Each row represents an adverse event. | ||
Variable Name | Description | Variable options |
adverse_event | Adverse event description | Abdominal pain to White blood cell decreased |
grade | Adverse event grade | 1 to 5 |
related | Is the event related to the CTL019 infusion? | Possibly |
Probably | ||
Unrelated | ||
Definitely | ||
start_date | Date on which the adverse event started | hidden |
subject_id | Subject identification number | hidden |
astct
astct |
||
---|---|---|
Retrospective re-grading of CRS according to ASTCT scale. Each row represents one subject. | ||
Variable Name | Description | Variable options |
end_date | CRS end date | hidden |
grade | CRS grade | 0 to 4 |
start_date | CRS start date | hidden |
subject_id | Subject identification number | hidden |
cart_expansion
cart_expansion |
||
---|---|---|
CAR T-cell expansion in vivo after infusion, measured by flow cytometry (flow) and quantitative polymerase chain reaction (qPCR). Each row represents a lab sample. | ||
Variable Name | Description | Variable options |
bbz_copies | CAR-T concentration in peripheral blood, measured by qPCR (genome copies/μg DNA) | 0 to 149883.804550858 |
cart_per_ul | CAR-T concentration in peripheral blood, measured by flow (cells/μL) | 0 to 7074 |
day_post_infusion | Day of sample collection (days post CTL019 infusion) | 0 to 30 |
subject_id | Subject identification number | hidden |
cd19_status_at_relapse
cd19_status_at_relapse |
||
---|---|---|
Leukemic phenotype at relapse with respect to CD19. Each row represents one subject. | ||
Variable Name | Description | Variable options |
cd19_relapse_phenotype | CD19 relapse phenotype | CD19 negative |
CD19 positive | ||
Lineage switch to AML | ||
CD19 subset negative | ||
cd19_relapse_pos_neg | CD19 positivity status | CD19 negative |
CD19 positive | ||
subject_id | Subject identification number | hidden |
cohort
cohort |
||
---|---|---|
Cohort assignment. Each row represents one subject. | ||
Variable Name | Description | Variable options |
blasts_in_bm | Bone marrow blast percentage | 0 to 100 |
cohort | Cohort (A = high tumor burden, B = low tumor burden) | Cohort A |
Cohort B | ||
Not Assigned | ||
date | Date of cohort assignment | hidden |
subject_id | Subject identification number | hidden |
duration_of_remission
duration_of_remission |
||
---|---|---|
Each row represents one subject. | ||
Variable Name | Description | Variable options |
cohort | Cohort (A = high tumor burden, B = low tumor burden) | Cohort A |
Cohort B | ||
event | Event class (0 = censored, 1 = event) | 0 |
1 | ||
event_type | Event type | Alternative treatment |
Last follow-up | ||
Relapsed disease | ||
alloSCT | ||
Death | ||
subject_id | Subject identification number | hidden |
time | Time to event (days) | 35 to 1077 |
cytokines
cytokines |
||
---|---|---|
Cytokine measurements. Each row represents one subject. | ||
Variable Name | Description | Variable options |
cytokine_name | Name of cytokine | FGF-Basic |
IL-1β | ||
G-CSF | ||
IL-10 | ||
IL-13 | ||
IL-6 | ||
IL-12 | ||
RANTES | ||
Eotaxin | ||
IL-17 | ||
MIP-1α | ||
GM-CSF | ||
MIP-1β | ||
MCP-1 | ||
IL-15 | ||
EGF | ||
IL-5 | ||
HGF | ||
VEGF | ||
IFN-γ | ||
IFN-α | ||
IL-1RA | ||
TNF-α | ||
IL-2 | ||
IL-7 | ||
IP-10 | ||
IL-2R | ||
MIG | ||
IL-4 | ||
IL-8 | ||
result | Concentration of cytokine in peripheral blood (pg/mL) | 2.40542044472357e-05 to 136437.286926523 |
sample_date | Date of sample collection | hidden |
subject_id | Subject identification number | hidden |
demographics
demographics |
||
---|---|---|
Baseline characteristics. Each row represents one subject. Data missing for subjects that were not assigned to a cohort. | ||
Variable Name | Description | Variable options |
birthday | Date of birth | hidden |
cns | CNS disease status | CNS1 |
NA | ||
CNS2A | ||
CNS3 | ||
gender | Gender | Male |
Female | ||
high_risk_cytogenetics | Presence of high-risk cytogenetics? | No |
Yes | ||
NA | ||
indication | Indication for CAR-T19 therapy (B-ALL type) | Relapsed |
NA | ||
Primary refractory | ||
prior_bmt | Prior stem cell transplant? | Yes |
No | ||
NA | ||
subject_id | Subject identification number | hidden |
trisomy21 | Presence of trisomy 21? | No |
NA | ||
Yes |
disease_assessment
disease_assessment |
||
---|---|---|
Disease assessment. Each row represents one study visit. | ||
Variable Name | Description | Variable options |
current_response | Current response at time of visit | Relapsed Disease |
Complete Remission with incomplete blood count recovery (CRi) | ||
Complete Remission (CR) | ||
No Response (Treatment failure) | ||
date | Date of visit | hidden |
subject_id | Subject identification number | hidden |
visit_id | Visit category | Pre-Infusion |
28 Day Follow-Up | ||
3 Month Follow-Up | ||
6 Month Follow-Up | ||
9 Month Follow-Up | ||
12 Month Follow-Up | ||
Unscheduled |
event_free_survival
event_free_survival |
||
---|---|---|
Each row represents one subject. | ||
Variable Name | Description | Variable options |
cohort | Cohort (A = high tumor burden, B = low tumor burden) | Cohort A |
Cohort B | ||
event | Event class (0 = censored, 1 = event) | 0 |
1 | ||
event_type | Event type | Alternative treatment |
Last follow-up | ||
No response | ||
Relapsed disease | ||
alloSCT | ||
Death | ||
subject_id | Subject identification number | hidden |
time | Time to event (days) | 19 to 1105 |
events
events |
||
---|---|---|
Cohort assignment. Each row represents one subject. | ||
Variable Name | Description | Variable options |
blasts_in_bm | Bone marrow blast percentage | 0 to 100 |
cohort | Cohort (A = high tumor burden, B = low tumor burden) | Cohort A |
Cohort B | ||
Not Assigned | ||
date | Date of cohort assignment | hidden |
subject_id | Subject identification number | hidden |
infusion
infusion |
||
---|---|---|
Information about CTL019 infusions. Each row represents one infusion. | ||
Variable Name | Description | Variable options |
available_cart_dose | CAR-T cell dose (cells) | 4500000 to 8.64e+08 |
date | Date of infusion | hidden |
study_day | Day of study (day 0 = day of Infusion #1) | 0 to 2 |
subject_id | Subject identification number | hidden |
total_cart_per_kg | CAR-T cell dose (cells/kg body weight) | 268000 to 14100000 |
visit_id | Visit Information | Infusion #1 |
Infusion #2 |
neurotox
neurotox |
||
---|---|---|
Neurotoxicity graded prospectively on the CTCAE scale and retrospectively on the ASTCT-ICANS scale. Each row represents one subject. | ||
Variable Name | Description | Variable options |
end_date | Neurotoxicity end date | hidden |
grade_conventional | CTCAE grade | 0 to 4 |
grade_icans | ASTCT-ICANS grade | 0 to Unable to grade |
start_date | Neurotoxicity start date | hidden |
subject_id | Subject identification number | hidden |
overall_survival
overall_survival |
||
---|---|---|
Each row represents one subject. | ||
Variable Name | Description | Variable options |
cohort | Cohort (A = high tumor burden, B = low tumor burden) | Cohort A |
Cohort B | ||
event | Event class (0 = censored, 1 = event) | 1 |
0 | ||
event_type | Event type | Death |
Last follow-up | ||
subject_id | Subject identification number | hidden |
time | Time to event (days) | 19 to 1105 |
time_to_b_cell_recovery
time_to_b_cell_recovery |
||
---|---|---|
Each row represents one subject. | ||
Variable Name | Description | Variable options |
cohort | Cohort (A = high tumor burden, B = low tumor burden) | Cohort A |
Cohort B | ||
event | Event class (0 = censored, 1 = event) | 0 |
1 | ||
event_type | Event type | Last B cell assessment by flow |
B cell recovery | ||
Relapsed disease | ||
subject_id | Subject identification number | hidden |
time | Time to event (days) | 0 to 1077 |
toci_administration
toci_administration |
||
---|---|---|
Tocilizumab administration. Each row represents one subject. | ||
Variable Name | Description | Variable options |
crs_onset_time | Date and time of CRS onset (time of first fever) | hidden |
dose_administered_mg | Tocilizumab dose given (mg) | 128 to 720 |
subject_id | Subject identification number | hidden |
toci_administration_time | Date and time of tocilizumab administration | hidden |
devtools::session_info()
─ Session info ───────────────────────────────────────────────────────────────────────────────────
setting value
version R version 4.0.1 (2020-06-06)
os macOS Catalina 10.15.7
system x86_64, darwin17.0
ui RStudio
language (EN)
collate en_US.UTF-8
ctype en_US.UTF-8
tz America/New_York
date 2020-12-14
─ Packages ───────────────────────────────────────────────────────────────────────────────────────
package * version date lib source
abind 1.4-5 2016-07-21 [1] CRAN (R 4.0.0)
assertthat 0.2.1 2019-03-21 [2] CRAN (R 4.0.0)
backports 1.1.10 2020-09-15 [1] CRAN (R 4.0.2)
base64enc 0.1-3 2015-07-28 [1] CRAN (R 4.0.0)
bayesplot 1.7.2 2020-05-28 [1] CRAN (R 4.0.0)
binom * 1.1-1 2014-01-02 [1] CRAN (R 4.0.2)
blob 1.2.1 2020-01-20 [1] CRAN (R 4.0.0)
boot 1.3-25 2020-04-26 [2] CRAN (R 4.0.1)
broom * 0.7.0 2020-07-09 [1] CRAN (R 4.0.2)
callr 3.5.1 2020-10-13 [1] CRAN (R 4.0.2)
car 3.0-8 2020-05-21 [1] CRAN (R 4.0.0)
carData 3.0-4 2020-05-22 [1] CRAN (R 4.0.0)
cellranger 1.1.0 2016-07-27 [1] CRAN (R 4.0.0)
checkmate 2.0.0 2020-02-06 [1] CRAN (R 4.0.0)
class 7.3-17 2020-04-26 [2] CRAN (R 4.0.1)
cli 2.1.0 2020-10-12 [1] CRAN (R 4.0.2)
codetools 0.2-16 2018-12-24 [2] CRAN (R 4.0.1)
colorspace 1.4-1 2019-03-18 [1] CRAN (R 4.0.0)
colourpicker 1.0 2017-09-27 [1] CRAN (R 4.0.0)
commonmark 1.7 2018-12-01 [1] CRAN (R 4.0.0)
conflicted * 1.0.4 2019-06-21 [1] CRAN (R 4.0.0)
cowplot 1.0.0 2019-07-11 [1] CRAN (R 4.0.0)
crayon 1.3.4 2017-09-16 [2] CRAN (R 4.0.0)
crosstalk 1.1.0.1 2020-03-13 [1] CRAN (R 4.0.0)
curl 4.3 2019-12-02 [1] CRAN (R 4.0.0)
data.table 1.12.8 2019-12-09 [1] CRAN (R 4.0.0)
dataMeta * 0.1.1.9000 2020-10-06 [1] Github (skadauke/dataMeta@2e8c85a)
DBI 1.1.0 2019-12-15 [1] CRAN (R 4.0.0)
dbplyr 1.4.4 2020-05-27 [1] CRAN (R 4.0.0)
desc 1.2.0 2018-05-01 [2] CRAN (R 4.0.0)
DescTools * 0.99.36 2020-05-23 [1] CRAN (R 4.0.0)
devtools 2.3.0 2020-04-10 [1] CRAN (R 4.0.0)
dials * 0.0.6 2020-04-03 [1] CRAN (R 4.0.0)
DiceDesign 1.8-1 2019-07-31 [1] CRAN (R 4.0.0)
digest 0.6.25 2020-02-23 [2] CRAN (R 4.0.0)
distill 1.1 2020-12-02 [1] CRAN (R 4.0.1)
downlit 0.2.1 2020-11-04 [1] CRAN (R 4.0.2)
dplyr * 1.0.2 2020-08-18 [1] CRAN (R 4.0.2)
DT 0.15 2020-08-05 [1] CRAN (R 4.0.2)
dygraphs 1.1.1.6 2018-07-11 [1] CRAN (R 4.0.0)
ellipsis 0.3.1 2020-05-15 [2] CRAN (R 4.0.0)
evaluate 0.14 2019-05-28 [2] CRAN (R 4.0.0)
expm 0.999-4 2019-03-21 [1] CRAN (R 4.0.0)
fansi 0.4.1 2020-01-08 [2] CRAN (R 4.0.0)
farver 2.0.3 2020-01-16 [1] CRAN (R 4.0.0)
fastmap 1.0.1 2019-10-08 [1] CRAN (R 4.0.0)
forcats * 0.5.0 2020-03-01 [1] CRAN (R 4.0.0)
foreach 1.5.0 2020-03-30 [1] CRAN (R 4.0.0)
foreign 0.8-80 2020-05-24 [2] CRAN (R 4.0.1)
fs 1.5.0 2020-07-31 [1] CRAN (R 4.0.2)
furrr 0.1.0 2018-05-16 [1] CRAN (R 4.0.0)
future 1.17.0 2020-04-18 [1] CRAN (R 4.0.0)
generics 0.0.2 2018-11-29 [2] CRAN (R 4.0.0)
ggplot2 * 3.3.1 2020-05-28 [1] CRAN (R 4.0.0)
ggpubr * 0.3.0 2020-05-04 [1] CRAN (R 4.0.0)
ggridges 0.5.2 2020-01-12 [1] CRAN (R 4.0.0)
ggsignif 0.6.0 2019-08-08 [1] CRAN (R 4.0.0)
globals 0.12.5 2019-12-07 [1] CRAN (R 4.0.0)
glue * 1.4.2 2020-08-27 [1] CRAN (R 4.0.2)
gower 0.2.2 2020-06-23 [1] CRAN (R 4.0.2)
GPfit 1.0-8 2019-02-08 [1] CRAN (R 4.0.0)
gridExtra 2.3 2017-09-09 [1] CRAN (R 4.0.0)
gt * 0.2.2 2020-08-05 [1] CRAN (R 4.0.2)
gtable 0.3.0 2019-03-25 [1] CRAN (R 4.0.0)
gtools 3.8.2 2020-03-31 [1] CRAN (R 4.0.0)
gtsummary * 1.3.5 2020-09-29 [1] CRAN (R 4.0.1)
haven 2.3.1 2020-06-01 [1] CRAN (R 4.0.0)
here * 0.1 2017-05-28 [1] CRAN (R 4.0.0)
highr 0.8 2019-03-20 [1] CRAN (R 4.0.0)
hms 0.5.3 2020-01-08 [1] CRAN (R 4.0.0)
htmltools 0.5.0 2020-06-16 [1] CRAN (R 4.0.2)
htmlwidgets 1.5.1 2019-10-08 [1] CRAN (R 4.0.0)
httpuv 1.5.4 2020-06-06 [1] CRAN (R 4.0.1)
httr 1.4.2 2020-07-20 [1] CRAN (R 4.0.2)
igraph 1.2.5 2020-03-19 [1] CRAN (R 4.0.0)
infer * 0.5.1 2019-11-19 [1] CRAN (R 4.0.0)
inline 0.3.15 2018-05-18 [1] CRAN (R 4.0.0)
ipred 0.9-9 2019-04-28 [1] CRAN (R 4.0.0)
iterators 1.0.12 2019-07-26 [1] CRAN (R 4.0.0)
janeaustenr 0.1.5 2017-06-10 [1] CRAN (R 4.0.0)
jsonlite 1.7.1 2020-09-07 [1] CRAN (R 4.0.2)
kableExtra * 1.2.1 2020-08-27 [1] CRAN (R 4.0.2)
km.ci 0.5-2 2009-08-30 [1] CRAN (R 4.0.0)
KMsurv 0.1-5 2012-12-03 [1] CRAN (R 4.0.0)
knitr 1.30 2020-09-22 [1] CRAN (R 4.0.2)
labeling 0.3 2014-08-23 [1] CRAN (R 4.0.0)
later 1.1.0.1 2020-06-05 [1] CRAN (R 4.0.1)
lattice 0.20-41 2020-04-02 [2] CRAN (R 4.0.1)
lava 1.6.8 2020-09-26 [1] CRAN (R 4.0.2)
lhs 1.0.2 2020-04-13 [1] CRAN (R 4.0.0)
lifecycle 0.2.0 2020-03-06 [1] CRAN (R 4.0.0)
listenv 0.8.0 2019-12-05 [1] CRAN (R 4.0.0)
lme4 1.1-23 2020-04-07 [1] CRAN (R 4.0.0)
loo 2.2.0 2019-12-19 [1] CRAN (R 4.0.0)
lubridate * 1.7.9 2020-06-08 [2] CRAN (R 4.0.1)
magrittr 1.5 2014-11-22 [2] CRAN (R 4.0.0)
markdown 1.1 2019-08-07 [1] CRAN (R 4.0.0)
MASS 7.3-51.6 2020-04-26 [2] CRAN (R 4.0.1)
Matrix 1.2-18 2019-11-27 [2] CRAN (R 4.0.1)
matrixStats 0.56.0 2020-03-13 [1] CRAN (R 4.0.0)
memoise 1.1.0 2017-04-21 [1] CRAN (R 4.0.0)
mgcv 1.8-31 2019-11-09 [2] CRAN (R 4.0.1)
mime 0.9 2020-02-04 [1] CRAN (R 4.0.0)
miniUI 0.1.1.1 2018-05-18 [1] CRAN (R 4.0.0)
minqa 1.2.4 2014-10-09 [1] CRAN (R 4.0.0)
modelr 0.1.8 2020-05-19 [1] CRAN (R 4.0.0)
munsell 0.5.0 2018-06-12 [1] CRAN (R 4.0.0)
mvtnorm 1.1-0 2020-02-24 [1] CRAN (R 4.0.0)
naniar * 0.5.1 2020-04-30 [1] CRAN (R 4.0.0)
nlme 3.1-148 2020-05-24 [2] CRAN (R 4.0.1)
nloptr 1.2.2.1 2020-03-11 [1] CRAN (R 4.0.0)
nnet 7.3-14 2020-04-26 [2] CRAN (R 4.0.1)
openxlsx 4.1.5 2020-05-06 [1] CRAN (R 4.0.0)
parsnip * 0.1.1 2020-05-06 [1] CRAN (R 4.0.0)
pillar 1.4.6 2020-07-10 [1] CRAN (R 4.0.2)
pkgbuild 1.1.0 2020-07-13 [1] CRAN (R 4.0.2)
pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.0.0)
pkgload 1.1.0 2020-05-29 [2] CRAN (R 4.0.0)
plyr 1.8.6 2020-03-03 [1] CRAN (R 4.0.0)
prettyunits 1.1.1 2020-01-24 [2] CRAN (R 4.0.0)
pROC 1.16.2 2020-03-19 [1] CRAN (R 4.0.0)
processx 3.4.4 2020-09-03 [1] CRAN (R 4.0.2)
prodlim 2019.11.13 2019-11-17 [1] CRAN (R 4.0.0)
promises 1.1.1 2020-06-09 [1] CRAN (R 4.0.2)
ps 1.3.3 2020-05-08 [2] CRAN (R 4.0.0)
purrr * 0.3.4 2020-04-17 [1] CRAN (R 4.0.0)
R6 2.4.1 2019-11-12 [2] CRAN (R 4.0.0)
Rcpp 1.0.5 2020-07-06 [1] CRAN (R 4.0.2)
readr * 1.3.1 2018-12-21 [1] CRAN (R 4.0.0)
readxl 1.3.1 2019-03-13 [1] CRAN (R 4.0.0)
recipes * 0.1.13 2020-06-23 [1] CRAN (R 4.0.2)
remotes 2.2.0 2020-07-21 [1] CRAN (R 4.0.2)
reprex 0.3.0 2019-05-16 [1] CRAN (R 4.0.0)
reshape2 1.4.4 2020-04-09 [1] CRAN (R 4.0.0)
rio 0.5.16 2018-11-26 [1] CRAN (R 4.0.0)
rlang 0.4.8 2020-10-08 [1] CRAN (R 4.0.2)
rmarkdown 2.5 2020-10-21 [1] CRAN (R 4.0.1)
rpart 4.1-15 2019-04-12 [2] CRAN (R 4.0.1)
rprojroot 1.3-2 2018-01-03 [2] CRAN (R 4.0.0)
rsample * 0.0.7 2020-06-04 [1] CRAN (R 4.0.1)
rsconnect 0.8.16 2019-12-13 [1] CRAN (R 4.0.0)
rstan 2.19.3 2020-02-11 [1] CRAN (R 4.0.0)
rstanarm 2.19.3 2020-02-11 [1] CRAN (R 4.0.0)
rstantools 2.1.0 2020-06-01 [1] CRAN (R 4.0.0)
rstatix 0.5.0 2020-04-28 [1] CRAN (R 4.0.0)
rstudioapi 0.11 2020-02-07 [2] CRAN (R 4.0.0)
rvest 0.3.5 2019-11-08 [1] CRAN (R 4.0.0)
sass 0.2.0 2020-03-18 [1] CRAN (R 4.0.0)
scales * 1.1.1 2020-05-11 [1] CRAN (R 4.0.0)
sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 4.0.0)
shiny 1.5.0 2020-06-23 [1] CRAN (R 4.0.2)
shinyjs 1.1 2020-01-13 [1] CRAN (R 4.0.0)
shinystan 2.5.0 2018-05-01 [1] CRAN (R 4.0.0)
shinythemes 1.1.2 2018-11-06 [1] CRAN (R 4.0.0)
simplecolors * 0.1.0 2020-02-01 [1] CRAN (R 4.0.0)
SnowballC 0.7.0 2020-04-01 [1] CRAN (R 4.0.0)
StanHeaders 2.21.0-3 2020-05-28 [1] CRAN (R 4.0.0)
statmod 1.4.34 2020-02-17 [1] CRAN (R 4.0.0)
stringi 1.5.3 2020-09-09 [1] CRAN (R 4.0.2)
stringr * 1.4.0 2019-02-10 [1] CRAN (R 4.0.0)
survival * 3.1-12 2020-04-10 [1] CRAN (R 4.0.0)
survminer * 0.4.7 2020-05-28 [1] CRAN (R 4.0.0)
survMisc 0.5.5 2018-07-05 [1] CRAN (R 4.0.0)
testthat 2.3.2 2020-03-02 [2] CRAN (R 4.0.0)
threejs 0.3.3 2020-01-21 [1] CRAN (R 4.0.0)
tibble * 3.0.4 2020-10-12 [1] CRAN (R 4.0.2)
tidymodels * 0.1.0 2020-02-16 [1] CRAN (R 4.0.0)
tidyposterior 0.0.2 2018-11-15 [1] CRAN (R 4.0.0)
tidypredict 0.4.5 2020-02-10 [1] CRAN (R 4.0.0)
tidyr * 1.1.2 2020-08-27 [1] CRAN (R 4.0.2)
tidyselect 1.1.0 2020-05-11 [1] CRAN (R 4.0.0)
tidytext 0.2.4 2020-04-17 [1] CRAN (R 4.0.0)
tidyverse * 1.3.0 2019-11-21 [1] CRAN (R 4.0.2)
timeDate 3043.102 2018-02-21 [1] CRAN (R 4.0.0)
tokenizers 0.2.1 2018-03-29 [1] CRAN (R 4.0.0)
tune * 0.1.0 2020-04-02 [1] CRAN (R 4.0.0)
usethis 1.6.3 2020-09-17 [1] CRAN (R 4.0.2)
vctrs 0.3.4 2020-08-29 [1] CRAN (R 4.0.2)
viridisLite 0.3.0 2018-02-01 [1] CRAN (R 4.0.0)
visdat 0.5.3 2019-02-15 [1] CRAN (R 4.0.0)
webshot 0.5.2 2019-11-22 [1] CRAN (R 4.0.0)
withr 2.3.0 2020-09-22 [1] CRAN (R 4.0.2)
workflows * 0.1.1 2020-03-17 [1] CRAN (R 4.0.0)
xfun 0.18 2020-09-29 [1] CRAN (R 4.0.1)
xml2 1.3.2 2020-04-23 [1] CRAN (R 4.0.0)
xtable 1.8-4 2019-04-21 [1] CRAN (R 4.0.0)
xts 0.12-0 2020-01-19 [1] CRAN (R 4.0.0)
yaml 2.2.1 2020-02-01 [1] CRAN (R 4.0.0)
yardstick * 0.0.6 2020-03-17 [1] CRAN (R 4.0.0)
zip 2.1.1 2020-08-27 [1] CRAN (R 4.0.2)
zoo 1.8-8 2020-05-02 [1] CRAN (R 4.0.0)
[1] /Users/kadaukes/Library/R/4.0/library
[2] /Library/Frameworks/R.framework/Versions/4.0/Resources/library