Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce teal_data class #75

Closed
wants to merge 15 commits into from
26 changes: 10 additions & 16 deletions RNA-seq/app.R
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,19 @@ options(shiny.useragg = FALSE)

nest_logo <- "https://raw.githubusercontent.com/insightsengineering/hex-stickers/main/PNG/nest.png"

# code>
mae <- hermes::multi_assay_experiment
mae_data <- dataset("MAE", mae)

adtte <- scda::synthetic_cdisc_data("rcd_2022_06_27")$adtte %>%
ADTTE <- scda::synthetic_cdisc_data("rcd_2022_06_27")$adtte %>%
dplyr::mutate(is_event = CNSR == 0)

data <- teal_data(
dataset(
"ADTTE",
adtte,
code = 'adtte <- scda::synthetic_cdisc_data("rcd_2022_06_27")$adtte %>%
dplyr::mutate(is_event = CNSR == 0)'
),
dataset("MAE", mae)
)
MAE <- hermes::multi_assay_experiment

app <- init(
data = data,
data = teal_data(
ADTTE = ADTTE, MAE = MAE,
chlebowa marked this conversation as resolved.
Show resolved Hide resolved
code = quote({
ADTTE <- scda::synthetic_cdisc_data("rcd_2022_06_27")$adtte %>%
dplyr::mutate(is_event = CNSR == 0)
MAE <- hermes::multi_assay_experiment
})
),
modules = modules(
tm_front_page(
label = "App Info",
Expand Down
324 changes: 154 additions & 170 deletions early-dev/app.R
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ options(shiny.useragg = FALSE)

nest_logo <- "https://raw.githubusercontent.com/insightsengineering/hex-stickers/main/PNG/nest.png"


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Usually there is only one blank line between nest_logo and everything that comes after

Suggested change

ADSL <- synthetic_cdisc_data("latest")$adsl

# derive ADSL treatment duration
Expand Down Expand Up @@ -187,181 +188,164 @@ fact_vars_asl <- names(Filter(isTRUE, sapply(ADSL, is.factor)))
date_vars_asl <- names(ADSL)[vapply(ADSL, function(x) inherits(x, c("Date", "POSIXct", "POSIXlt")), logical(1))]
demog_vars_asl <- names(ADSL)[!(names(ADSL) %in% c("USUBJID", "STUDYID", date_vars_asl))]

# create cdisc_dataset objects to pass into app

adsl <- cdisc_dataset(
dataname = "ADSL",
x = ADSL,
code = 'ADSL <- synthetic_cdisc_data("latest")$adsl
adsl_labels <- teal.data::col_labels(ADSL, fill = FALSE)
ADSL <- ADSL %>%
mutate(
TRTDURD = as.numeric(as.Date(TRTEDTM) - as.Date(TRTSDTM)) + 1,
DTHFL = ifelse(!is.na(DTHDT), "Y", NA),
EOSSTT = factor(EOSSTT, levels = c("COMPLETED", "ONGOING", "DISCONTINUED"))
) %>%
teal.data::col_relabel(
TRTDURD = "Treatment Duration in Days",
DTHFL = "Death Flag",
DCSREAS = "Reason for Study Discontinuation",
EOSSTT = "End of Study Status"
) %>%
droplevels()
teal.data::col_labels(ADSL)[c(names(adsl_labels))] <- adsl_labels'
)

adae <- cdisc_dataset(
dataname = "ADAE",
x = ADAE,
keys = c("STUDYID", "USUBJID", "AETERM", "AESEQ"),
code = 'ADAE <- synthetic_cdisc_data("latest")$adae
# derive common flags for AEs
ADAE <- ADAE %>%
mutate_at(
c("AESOC", "AEBODSYS", "AEHLT", "AEDECOD", "AETERM", "AELLT"),
as.character
) %>%
mutate(
RELFL = ifelse(AEREL == "Y", "Y", "N"),
CTC35FL = ifelse(AETOXGR %in% c("3", "4", "5"), "Y", "N"),
SERFL = ifelse(AESER == "Y", "Y", "N"),
RELSERFL = ifelse(AEREL == "Y" & AESER == "Y", "Y", "N"),
AEREL1 = (AEREL == "Y" & ACTARM == "A: Drug X"),
AEREL2 = (AEREL == "Y" & ACTARM == "B: Placebo"),
ASTDT = as.Date(ASTDTM),
AENDT = as.Date(AENDTM)
) %>%
teal.data::col_relabel(
RELFL = "Related AE",
CTC35FL = "Grade >=3 AE",
SERFL = "Serious AE",
RELSERFL = "Related Serious AE",
AEREL1 = "AE related to A: Drug X",
AEREL2 = "AE related to B: Placebo",
ASTDT = "Analysis Start Date",
AENDT = "Analysis End Date",
AESOC = "Primary System Organ Class",
AEBODSYS = "Body System or Organ Class",
AEHLT = "High Level Term",
AEDECOD = "Dictionary-Derived Term",
AETERM = "Reported Term for the Adverse Event",
AELLT = "Lowest Level Term"
)',
vars = list(ADSL = adsl)
)

adcm <- cdisc_dataset(
dataname = "ADCM",
x = ADCM,
code = 'ADCM <- synthetic_cdisc_data("latest")$adcm
ADCM <- ADCM %>%
mutate(
ASTDT = as.Date(ASTDTM),
AENDT = as.Date(AENDTM)
) %>%
teal.data::col_relabel(
ASTDT = "Analysis Start Date",
AENDT = "Analysis End Date"
)',
vars = list(ADSL = adsl)
)

adex <- cdisc_dataset(
dataname = "ADEX",
x = ADEX,
code = 'ADEX <- synthetic_cdisc_data("latest")$adex
ADEX <- ADEX %>%
mutate(
ASTDT = as.Date(ASTDTM),
AENDT = as.Date(AENDTM)
) %>%
teal.data::col_relabel(
ASTDT = "Analysis Start Date",
AENDT = "Analysis End Date"
)',
vars = list(ADSL = adsl)
)

adtr <- cdisc_dataset(
dataname = "ADTR",
x = ADTR,
keys = c("STUDYID", "USUBJID", "PARAMCD", "AVISIT"),
code = 'ADTR <- synthetic_cdisc_data("latest")$adtr
adtr_labels <- teal.data::col_labels(ADTR, fill = FALSE)
ADTR <- ADTR %>%
mutate(
PCHG = ifelse(AVISIT == "BASELINE", 0, PCHG),
CHG = ifelse(AVISIT == "BASELINE", 0, CHG),
AVAL = ifelse(AVISIT == "BASELINE", BASE, AVAL),
AVALC = ifelse(AVISIT == "BASELINE", as.character(BASE), AVALC)
) %>%
dplyr::filter(AVISIT != "SCREENING")
teal.data::col_labels(ADTR) <- adtr_labels',
var = list(ADSL = adsl)
)

adtrwf <- cdisc_dataset(
dataname = "ADTRWF",
x = ADTRWF,
keys = c("STUDYID", "USUBJID", "PARAMCD", "AVISIT"),
code = 'ADTRWF <- ADTR %>%
dplyr::filter(AVISIT != "BASELINE")
teal.data::col_labels(ADTRWF) <- teal.data::col_labels(ADTR, fill = FALSE)',
vars = list(ADTR = adtr)
)

adrs <- cdisc_dataset(
dataname = "ADRS",
x = ADRS,
code = 'ADRS <- synthetic_cdisc_data("latest")$adrs
adrs_labels <- teal.data::col_labels(ADRS, fill = FALSE)
ADRS <- ADRS %>%
filter(PARAMCD %in% c("BESRSPI", "INVET")) %>%
mutate(ADT = as.Date(ADTM)) %>%
droplevels()
teal.data::col_labels(ADRS) <- c(adrs_labels, "Analysis Date")',
vars = list(ADSL = adsl)
)

adrsswim <- cdisc_dataset(
dataname = "ADRSSWIM",
x = ADRSSWIM,
keys = c("STUDYID", "USUBJID", "PARAMCD", "AVISIT"),
code = 'ADRSSWIM <- synthetic_cdisc_data("latest")$adrs %>%
dplyr::filter(PARAMCD == "OVRINV") %>%
arrange(USUBJID)',
vars = list(ADSL = adsl)
)

adlb <- cdisc_dataset(
dataname = "ADLB",
x = ADLB,
code = 'ADLB <- synthetic_cdisc_data("latest")$adlb
ADLB <- ADLB %>%
mutate(
ADT = as.Date(ADTM),
LBSTRESN = as.numeric(LBSTRESC)
) %>%
teal.data::col_relabel(
ADT = "Analysis Date",
LBSTRESN = "Numeric Result/Finding in Standard Units"
)',
vars = list(ADSL = adsl)
keys_list <- teal.data:::default_cdisc_keys
jk <- teal.data::join_keys(
teal.data::join_key("ADSL", "ADSL", keys = get_cdisc_keys("ADSL")),
teal.data::join_key("ADAE", "ADAE", keys = get_cdisc_keys("ADAE")),
teal.data::join_key("ADCM", "ADCM", keys = get_cdisc_keys("ADCM")),
teal.data::join_key("ADEX", "ADEX", keys = get_cdisc_keys("ADEX")),
teal.data::join_key("ADRS", "ADRS", keys = get_cdisc_keys("ADRS")),
teal.data::join_key("ADLB", "ADLB", keys = get_cdisc_keys("ADLB")),
teal.data::join_key("ADTR", "ADTR", keys = c("STUDYID", "USUBJID", "PARAMCD", "AVISIT")),
teal.data::join_key("ADTRWF", "ADTRWF", keys = c("STUDYID", "USUBJID", "PARAMCD", "AVISIT")),
teal.data::join_key("ADRSSWIM", "ADRSSWIM", keys = get_cdisc_keys("ADRS")),
teal.data::join_key("ADAE", keys_list[["ADAE"]]$parent, keys = keys_list[["ADAE"]]$foreign),
teal.data::join_key("ADCM", keys_list[["ADCM"]]$parent, keys = keys_list[["ADCM"]]$foreign),
teal.data::join_key("ADEX", keys_list[["ADEX"]]$parent, keys = keys_list[["ADEX"]]$foreign),
teal.data::join_key("ADRS", keys_list[["ADRS"]]$parent, keys = keys_list[["ADRS"]]$foreign),
teal.data::join_key("ADLB", keys_list[["ADLB"]]$parent, keys = keys_list[["ADLB"]]$foreign),
teal.data::join_key("ADTR", "ADSL", keys = c("STUDYID", "USUBJID", "PARAMCD", "AVISIT")),
teal.data::join_key("ADTRWF", "ADSL", keys = c("STUDYID", "USUBJID", "PARAMCD", "AVISIT")),
teal.data::join_key("ADRSSWIM", keys_list[["ADRS"]]$parent, keys = keys_list[["ADRS"]]$foreign)
gogonzo marked this conversation as resolved.
Show resolved Hide resolved
)

## Setup App
app <- teal::init(
data = cdisc_data(
adsl,
adae,
adex,
adcm,
adtr,
adtrwf,
adrs,
adrsswim,
adlb,
check = TRUE
ADSL = ADSL,
ADAE = ADAE,
ADCM = ADCM,
ADEX = ADEX,
ADTR = ADTR,
ADTRWF = ADTRWF,
ADRS = ADRS,
ADRSSWIM = ADRSSWIM,
ADLB = ADLB,
code = quote({
ADSL <- synthetic_cdisc_data("latest")$adsl

# derive ADSL treatment duration
adsl_labels <- teal.data::col_labels(ADSL, fill = FALSE)
ADSL <- ADSL %>%
mutate(
TRTDURD = as.numeric(as.Date(TRTEDTM) - as.Date(TRTSDTM)) + 1,
DTHFL = ifelse(!is.na(DTHDT), "Y", NA),
EOSSTT = factor(EOSSTT, levels = c("COMPLETED", "ONGOING", "DISCONTINUED"))
) %>%
teal.data::col_relabel(
TRTDURD = "Treatment Duration in Days",
DTHFL = "Death Flag",
DCSREAS = "Reason for Study Discontinuation",
EOSSTT = "End of Study Status"
) %>%
droplevels()
teal.data::col_labels(ADSL)[c(names(adsl_labels))] <- adsl_labels

ADAE <- synthetic_cdisc_data("latest")$adae

# derive common flags for AEs
adae_labels <- teal.data::col_labels(ADAE, fill = FALSE)
ADAE <- ADAE %>%
mutate_at(c("AESOC", "AEBODSYS", "AEHLT", "AEDECOD", "AETERM", "AELLT"), as.character) %>%
mutate(
RELFL = ifelse(AEREL == "Y", "Y", "N"),
CTC35FL = ifelse(AETOXGR %in% c("3", "4", "5"), "Y", "N"),
SERFL = ifelse(AESER == "Y", "Y", "N"),
RELSERFL = ifelse(AEREL == "Y" & AESER == "Y", "Y", "N"),
AEREL1 = (AEREL == "Y" & ACTARM == "A: Drug X"),
AEREL2 = (AEREL == "Y" & ACTARM == "B: Placebo"),
ASTDT = as.Date(ASTDTM),
AENDT = as.Date(AENDTM)
) %>%
teal.data::col_relabel(
RELFL = "Related AE",
CTC35FL = "Grade >=3 AE",
SERFL = "Serious AE",
RELSERFL = "Related Serious AE",
AEREL1 = "AE related to A: Drug X",
AEREL2 = "AE related to B: Placebo",
ASTDT = "Analysis Start Date",
AENDT = "Analysis End Date",
AESOC = "Primary System Organ Class",
AEBODSYS = "Body System or Organ Class",
AEHLT = "High Level Term",
AEDECOD = "Dictionary-Derived Term",
AETERM = "Reported Term for the Adverse Event",
AELLT = "Lowest Level Term"
)

ADCM <- synthetic_cdisc_data("latest")$adcm

# process ADCM
ADCM <- ADCM %>%
mutate(
ASTDT = as.Date(ASTDTM),
AENDT = as.Date(AENDTM)
) %>%
teal.data::col_relabel(
ASTDT = "Analysis Start Date",
AENDT = "Analysis End Date"
)

ADEX <- synthetic_cdisc_data("latest")$adex

# process ADEX
ADEX <- ADEX %>%
mutate(
ASTDT = as.Date(ASTDTM),
AENDT = as.Date(AENDTM)
) %>%
teal.data::col_relabel(
ASTDT = "Analysis Start Date",
AENDT = "Analysis End Date"
)

ADTR <- synthetic_cdisc_data("latest")$adtr

# process ADTR
adtr_labels <- teal.data::col_labels(ADTR, fill = FALSE)
ADTR <- ADTR %>%
mutate(
PCHG = ifelse(AVISIT == "BASELINE", 0, PCHG),
CHG = ifelse(AVISIT == "BASELINE", 0, CHG),
AVAL = ifelse(AVISIT == "BASELINE", BASE, AVAL),
AVALC = ifelse(AVISIT == "BASELINE", as.character(BASE), AVALC)
) %>%
filter(AVISIT != "SCREENING")
teal.data::col_labels(ADTR) <- adtr_labels

ADTRWF <- ADTR %>%
filter(AVISIT != "BASELINE")
teal.data::col_labels(ADTRWF) <- teal.data::col_labels(ADTR, fill = FALSE)


# process ADRS
ADRSSWIM <- synthetic_cdisc_data("latest")$adrs %>%
filter(PARAMCD == "OVRINV") %>%
arrange(USUBJID)

ADRS <- synthetic_cdisc_data("latest")$adrs
adrs_labels <- teal.data::col_labels(ADRS, fill = FALSE)
ADRS <- ADRS %>%
filter(PARAMCD %in% c("BESRSPI", "INVET")) %>%
mutate(ADT = as.Date(ADTM)) %>%
droplevels()
teal.data::col_labels(ADRS) <- c(adrs_labels, "Analysis Date")

ADLB <- synthetic_cdisc_data("latest")$adlb

# process ADLB
ADLB <- ADLB %>%
mutate(
ADT = as.Date(ADTM),
LBSTRESN = as.numeric(LBSTRESC)
) %>%
teal.data::col_relabel(
ADT = "Analysis Date",
LBSTRESN = "Numeric Result/Finding in Standard Units"
)
}),
chlebowa marked this conversation as resolved.
Show resolved Hide resolved
join_keys = jk
),
filter = teal_slices(
count_type = "all",
Expand Down
Loading