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

26 new chunks@main #540

Merged
merged 77 commits into from
Sep 7, 2022
Merged

26 new chunks@main #540

merged 77 commits into from
Sep 7, 2022

Conversation

gogonzo
Copy link
Contributor

@gogonzo gogonzo commented Jul 28, 2022

fixes:

See the quosure PR
insightsengineering/teal.code#49

App with fixed modules

pkgload::load_all("teal.code")
pkgload::load_all("teal.transform")
pkgload::load_all("teal")
pkgload::load_all("teal.modules.clinical")
library(scda)
library(dplyr)
library(scda)
library(nestcolor)

ADSL <- synthetic_cdisc_data("latest")$adsl
ADLB <- synthetic_cdisc_data("latest")$adlb
ADTTE <- synthetic_cdisc_data("latest")$adtte
ADRS <- synthetic_cdisc_data("latest")$adrs %>%
  mutate(AVALC = d_onco_rsp_label(AVALC)) %>%
  filter(PARAMCD != "OVRINV" | AVISIT == "FOLLOW UP")

add_event_flags <- function(dat) {
  dat <- dat %>%
    dplyr::mutate(
      TMPFL_SER = AESER == "Y",
      TMPFL_REL = AEREL == "Y",
      TMPFL_GR5 = AETOXGR == "5",
      TMP_SMQ01 = !is.na(SMQ01NAM),
      TMP_SMQ02 = !is.na(SMQ02NAM),
      TMP_CQ01 = !is.na(CQ01NAM)
    )
  column_labels <- list(
    TMPFL_SER = "Serious AE",
    TMPFL_REL = "Related AE",
    TMPFL_GR5 = "Grade 5 AE",
    TMP_SMQ01 = aesi_label(dat[["SMQ01NAM"]], dat[["SMQ01SC"]]),
    TMP_SMQ02 = aesi_label("Y.9.9.9.9/Z.9.9.9.9 AESI"),
    TMP_CQ01 = aesi_label(dat[["CQ01NAM"]])
  )
  formatters::var_labels(dat)[names(column_labels)] <- as.character(column_labels)
  dat
}
ADAE <- synthetic_cdisc_data("latest")$adae |> add_event_flags()
ADAE <- ADAE %>% dplyr::filter(!((AETOXGR == 1) & (AESEV == "MILD") & (ARM == "A: Drug X")))

ADQS <- synthetic_cdisc_data("latest")$adqs %>%
  dplyr::filter(ABLFL != "Y" & ABLFL2 != "Y") %>%
  dplyr::filter(AVISIT %in% c("WEEK 1 DAY 8", "WEEK 2 DAY 15", "WEEK 3 DAY 22")) %>%
  dplyr::mutate(
    AVISIT = as.factor(AVISIT),
    AVISITN = rank(AVISITN) %>%
      as.factor() %>%
      as.numeric() %>%
      as.factor() # making consecutive numeric factor
  )


ADAETTE <- synthetic_cdisc_data("latest")$adaette
ADAETTE <- ADAETTE %>%
  dplyr::filter(PARAMCD %in% c("AETTE1", "AETTE2", "AETTE3")) %>%
  dplyr::mutate(is_event = CNSR == 0) %>%
  dplyr::mutate(n_events = as.integer(is_event))

arm_ref_comp <- list(
  ARM = list(
    ref = value_choices("ADSL", "ARM", subset = function(data) {
      return(levels(data$ARM)[2])
    }),
    comp = value_choices("ADSL", "ARM", subset = function(data) {
      return(levels(data$ARM)[c(1, 3)])
    })
  ),
  ARMCD = list(
    ref = value_choices("ADSL", "ARMCD", subset = function(data) {
      return(levels(data$ARMCD)[2])
    }),
    comp = value_choices("ADSL", "ARMCD", subset = function(data) {
      return(levels(data$ARMCD)[c(1, 3)])
    })
  )
)

data <- cdisc_data(
    cdisc_dataset("ADSL", ADSL, code = "ADSL <- synthetic_cdisc_data('latest')$adsl"),
    cdisc_dataset("ADAE", ADAE,
      code = '
      add_event_flags <- function(dat) {
        dat <- dat %>%
          dplyr::mutate(
            TMPFL_SER = AESER == "Y",
            TMPFL_REL = AEREL == "Y",
            TMPFL_GR5 = AETOXGR == "5",
            TMP_SMQ01 = !is.na(SMQ01NAM),
            TMP_SMQ02 = !is.na(SMQ02NAM),
            TMP_CQ01 = !is.na(CQ01NAM)
          )
        column_labels <- list(
          TMPFL_SER = "Serious AE",
          TMPFL_REL = "Related AE",
          TMPFL_GR5 = "Grade 5 AE",
          TMP_SMQ01 = aesi_label(dat[["SMQ01NAM"]], dat[["SMQ01SC"]]),
          TMP_SMQ02 = aesi_label("Y.9.9.9.9/Z.9.9.9.9 AESI"),
          TMP_CQ01 = aesi_label(dat[["CQ01NAM"]])
        )
        formatters::var_labels(dat)[names(column_labels)] <- as.character(column_labels)
        dat
      }
      ADAE <- synthetic_cdisc_data("latest")$adae |> add_event_flags()
      ADAE <- ADAE %>% dplyr::filter(!((AETOXGR == 1) & (AESEV == "MILD") & (ARM == "A: Drug X")))
      '
    ),
    cdisc_dataset("ADLB", ADLB, code = 'ADLB <- synthetic_cdisc_data("latest")$adlb'),
    cdisc_dataset("ADRS", ADRS, code = 'ADRS <- synthetic_cdisc_data("latest")$adrs %>%
      mutate(AVALC = d_onco_rsp_label(AVALC)) %>%
      filter(PARAMCD != "OVRINV" | AVISIT == "FOLLOW UP")'),
    cdisc_dataset("ADTTE", ADTTE, code = 'ADTTE <- synthetic_cdisc_data("latest")$adtte'),
    cdisc_dataset("ADQS", ADQS, code = 'ADQS <- synthetic_cdisc_data("latest")$adqs %>%
      dplyr::filter(ABLFL != "Y" & ABLFL2 != "Y") %>%
      dplyr::filter(AVISIT %in% c("WEEK 1 DAY 8", "WEEK 2 DAY 15", "WEEK 3 DAY 22")) %>%
      dplyr::mutate(
        AVISIT = as.factor(AVISIT),
        AVISITN = rank(AVISITN) %>%
          as.factor() %>%
          as.numeric() %>%
          as.factor() # making consecutive numeric factor
      )'
    ),
    cdisc_dataset("ADAETTE", ADAETTE, code = '
      ADAETTE <- synthetic_cdisc_data("latest")$adaette
      ADAETTE <- ADAETTE %>%
        dplyr::filter(PARAMCD %in% c("AETTE1", "AETTE2", "AETTE3")) %>%
        dplyr::mutate(is_event = CNSR == 0) %>%
        dplyr::mutate(n_events = as.integer(is_event))
    '),
    check = TRUE
  )

app <- init(
  data = data,
  filter = list(ADSL = list(ARMCD = c("ARM A", "ARM B"))),
  modules = modules(
    tm_g_barchart_simple(
      label = "ADAE Analysis",
      x = data_extract_spec(
        dataname = "ADSL",
        select = select_spec(
          choices = variable_choices(
            ADSL,
            c(
              "ARM", "ACTARM", "SEX",
              "RACE", "ITTFL", "SAFFL", "STRATA2"
            )
          ),
          selected = "ACTARM",
          multiple = FALSE
        )
      ),
      fill = list(
        data_extract_spec(
          dataname = "ADSL",
          select = select_spec(
            choices = variable_choices(
              ADSL,
              c(
                "ARM", "ACTARM", "SEX",
                "RACE", "ITTFL", "SAFFL", "STRATA2"
              )
            ),
            selected = "SEX",
            multiple = FALSE
          )
        ),
        data_extract_spec(
          dataname = "ADAE",
          select = select_spec(
            choices = variable_choices(ADAE, c("SEX", "AETOXGR", "AESEV", "AESER")),
            selected = NULL,
            multiple = FALSE
          )
        )
      ),
      x_facet = list(
        data_extract_spec(
          dataname = "ADAE",
          select = select_spec(
            choices = variable_choices(ADAE, c("AETOXGR", "AESEV", "AESER")),
            selected = "AETOXGR",
            multiple = FALSE
          )
        ),
        data_extract_spec(
          dataname = "ADSL",
          select = select_spec(
            choices = variable_choices(
              ADSL,
              c(
                "ARM", "ACTARM", "SEX",
                "RACE", "ITTFL", "SAFFL", "STRATA2"
              )
            ),
            selected = NULL,
            multiple = FALSE
          )
        )
      ),
      y_facet = list(
        data_extract_spec(
          dataname = "ADAE",
          select = select_spec(
            choices = variable_choices(ADAE, c("AETOXGR", "AESEV", "AESER")),
            selected = "AESEV",
            multiple = FALSE
          )
        ),
        data_extract_spec(
          dataname = "ADSL",
          select = select_spec(
            choices = variable_choices(
              ADSL,
              c(
                "ARM", "ACTARM", "SEX",
                "RACE", "ITTFL", "SAFFL", "STRATA2"
              )
            ),
            selected = NULL,
            multiple = FALSE
          )
        )
      )
    ),
    tm_g_ci(
      label = "Confidence Interval Plot",
      x_var = data_extract_spec(
        dataname = "ADSL",
        select = select_spec(
          choices = c("ARMCD", "BMRKR2"),
          selected = c("ARMCD"),
          multiple = FALSE,
          fixed = FALSE
        )
      ),
      y_var = data_extract_spec(
        dataname = "ADLB",
        filter = list(
          filter_spec(
            vars = "PARAMCD",
            choices = levels(ADLB$PARAMCD),
            selected = levels(ADLB$PARAMCD)[1],
            multiple = FALSE,
            label = "Select lab:"
          ),
          filter_spec(
            vars = "AVISIT",
            choices = levels(ADLB$AVISIT),
            selected = levels(ADLB$AVISIT)[1],
            multiple = FALSE,
            label = "Select visit:"
          )
        ),
        select = select_spec(
          label = "Analyzed Value",
          choices = c("AVAL", "CHG"),
          selected = "AVAL",
          multiple = FALSE,
          fixed = FALSE
        )
      ),
      color = data_extract_spec(
        dataname = "ADSL",
        select = select_spec(
          label = "Color by variable",
          choices = c("SEX", "STRATA1", "STRATA2"),
          selected = c("STRATA1"),
          multiple = FALSE,
          fixed = FALSE
        )
      )
    ),
    tm_g_forest_rsp(
      label = "Forest Response",
      dataname = "ADRS",
      arm_var = choices_selected(
        variable_choices(ADSL, c("ARM", "ARMCD")),
        "ARMCD"
      ),
      arm_ref_comp = arm_ref_comp,
      paramcd = choices_selected(
        value_choices(ADRS, "PARAMCD", "PARAM"),
        "INVET"
      ),
      subgroup_var = choices_selected(
        variable_choices(ADSL, names(ADSL)),
        c("BMRKR2", "SEX")
      ),
      strata_var = choices_selected(
        variable_choices(ADSL, c("STRATA1", "STRATA2")),
        "STRATA2"
      ),
      plot_height = c(600L, 200L, 2000L),
      default_responses = list(
        BESRSPI = list(
          rsp = c("Stable Disease (SD)", "Not Evaluable (NE)"),
          levels = c(
            "Complete Response (CR)", "Partial Response (PR)", "Stable Disease (SD)",
            "Progressive Disease (PD)", "Not Evaluable (NE)"
          )
        ),
        INVET = list(
          rsp = c("Complete Response (CR)", "Partial Response (PR)"),
          levels = c(
            "Complete Response (CR)", "Not Evaluable (NE)", "Partial Response (PR)",
            "Progressive Disease (PD)", "Stable Disease (SD)"
          )
        ),
        OVRINV = list(
          rsp = c("Progressive Disease (PD)", "Stable Disease (SD)"),
          levels = c("Progressive Disease (PD)", "Stable Disease (SD)", "Not Evaluable (NE)")
        )
      )
    ),
    tm_g_forest_tte(
      label = "Forest Survival",
      dataname = "ADTTE",
      arm_var = choices_selected(
        variable_choices(ADSL, c("ARM", "ARMCD")),
        "ARMCD"
      ),
      arm_ref_comp = arm_ref_comp,
      paramcd = choices_selected(
        value_choices(ADTTE, "PARAMCD", "PARAM"),
        "OS"
      ),
      subgroup_var = choices_selected(
        variable_choices(ADSL, names(ADSL)),
        c("BMRKR2", "SEX")
      ),
      strata_var = choices_selected(
        variable_choices(ADSL, c("STRATA1", "STRATA2")),
        "STRATA2"
      ),
      plot_height = c(600, 200, 2000)
    ),
    tm_g_ipp(
      label = "Individual Patient Plot",
      dataname = "ADLB",
      arm_var = choices_selected(
        value_choices(ADLB, "ARMCD"),
        "ARM A"
      ),
      paramcd = choices_selected(
        value_choices(ADLB, "PARAMCD"),
        "ALT"
      ),
      aval_var = choices_selected(
        variable_choices(ADLB, c("AVAL", "CHG")),
        "AVAL"
      ),
      avalu_var = choices_selected(
        variable_choices(ADLB, c("AVALU")),
        "AVALU",
        fixed = TRUE
      ),
      id_var = choices_selected(
        variable_choices(ADLB, c("USUBJID")),
        "USUBJID",
        fixed = TRUE
      ),
      visit_var = choices_selected(
        variable_choices(ADLB, c("AVISIT")),
        "AVISIT"
      ),
      base_var = choices_selected(
        variable_choices(ADLB, c("BASE")),
        "BASE",
        fixed = TRUE
      ),
      add_baseline_hline = FALSE,
      separate_by_obs = FALSE
    ),
    tm_g_km(
      label = "KM PLOT",
      dataname = "ADTTE",
      arm_var = choices_selected(
        variable_choices(ADSL, c("ARM", "ARMCD", "ACTARMCD")),
        "ARM"
      ),
      paramcd = choices_selected(
        value_choices(ADTTE, "PARAMCD", "PARAM"),
        "OS"
      ),
      #arm_ref_comp = arm_ref_comp,
      strata_var = choices_selected(
        variable_choices(ADSL, c("SEX", "BMRKR2")),
        "SEX"
      ),
      facet_var = choices_selected(
        variable_choices(ADSL, c("SEX", "BMRKR2")),
        NULL
      )
    ),
    tm_a_mmrm(
      label = "MMRM",
      dataname = "ADQS",
      aval_var = choices_selected(c("AVAL", "CHG"), "AVAL"),
      id_var = choices_selected(c("USUBJID", "SUBJID"), "USUBJID"),
      arm_var = choices_selected(c("ARM", "ARMCD"), "ARM"),
      visit_var = choices_selected(c("AVISIT", "AVISITN"), "AVISIT"),
      arm_ref_comp = arm_ref_comp,
      paramcd = choices_selected(
        choices = value_choices(ADQS, "PARAMCD", "PARAM"),
        selected = "FKSI-FWB"
      ),
      cov_var = choices_selected(c("BASE", "AGE", "SEX", "BASE:AVISIT"), NULL)
    ),
    tm_g_lineplot(
      label = "Line Plot",
      dataname = "ADLB",
      strata = choices_selected(
        variable_choices(ADSL, c("ARM", "ARMCD", "ACTARMCD")),
        "ARM"
      ),
      y = choices_selected(
        variable_choices(ADLB, c("AVAL", "BASE", "CHG", "PCHG")),
        "AVAL"
      ),
      param = choices_selected(
        value_choices(ADLB, "PARAMCD", "PARAM"),
        "ALT"
      )
    ),
    tm_g_pp_adverse_events(
      label = "Adverse events",
      dataname = "ADAE",
      parentname = "ADSL",
      patient_col = "USUBJID",
      plot_height = c(600L, 200L, 2000L),
      aeterm = choices_selected(
        choices = variable_choices(ADAE, "AETERM"),
        selected = "AETERM"
      ),
      tox_grade = choices_selected(
        choices = variable_choices(ADAE, "AETOXGR"),
        selected = "AETOXGR"
      ),
      causality = choices_selected(
        choices = variable_choices(ADAE, "AEREL"),
        selected = "AEREL"
      ),
      outcome = choices_selected(
        choices = variable_choices(ADAE, "AEOUT"),
        selected = "AEOUT"
      ),
      action = choices_selected(
        choices = variable_choices(ADAE, "AEACN"),
        selected = "AEACN"
      ),
      time = choices_selected(
        choices = variable_choices(ADAE, "ASTDY"),
        selected = "ASTDY"
      ),
      decod = NULL
    ),
    tm_t_ancova(
       label = "ANCOVA table",
       dataname = "ADQS",
       avisit = choices_selected(
         choices = value_choices(ADQS, "AVISIT"),
         selected = "WEEK 1 DAY 8"
       ),
       arm_var = choices_selected(
         choices = variable_choices(ADSL, c("ARM", "ACTARMCD", "ARMCD")),
         selected = "ARMCD"
       ),
       arm_ref_comp = arm_ref_comp,
       aval_var = choices_selected(
         choices = variable_choices(ADQS, c("CHG", "AVAL")),
         selected = "CHG"
       ),
       cov_var = choices_selected(
         choices = variable_choices(ADQS, c("BASE", "STRATA1", "SEX")),
         selected = "STRATA1"
       ),
       paramcd = choices_selected(
         choices = value_choices(ADQS, "PARAMCD", "PARAM"),
         selected = "FKSI-FWB"
       )
    ),
    tm_t_events(
      label = "Adverse Event Table",
      dataname = "ADAE",
      arm_var = choices_selected(c("ARM", "ARMCD"), "ARM"),
      llt = choices_selected(
        choices = variable_choices(ADAE, c("AETERM", "AEDECOD")),
        selected = c("AEDECOD")
      ),
      hlt = choices_selected(
        choices = variable_choices(ADAE, c("AEBODSYS", "AESOC")),
        selected = "AEBODSYS"
      ),
      add_total = TRUE,
      event_type = "adverse event"
    ),
    tm_t_coxreg(
      label = "Cox Reg.",
      dataname = "ADTTE",
      arm_var = choices_selected(c("ARM", "ARMCD", "ACTARMCD"), "ARM"),
      arm_ref_comp = arm_ref_comp,
      paramcd = choices_selected(
        value_choices(ADTTE, "PARAMCD", "PARAM"), "OS"
      ),
      strata_var = choices_selected(
        c("COUNTRY", "STRATA1", "STRATA2"), "STRATA1"
      ),
      cov_var = choices_selected(
        c("AGE", "BMRKR1", "BMRKR2", "REGION1"), "AGE"
      ),
      multivariate = TRUE
    ),
    tm_t_events_by_grade(
      label = "Adverse Events by Grade Table",
      dataname = "ADAE",
      arm_var = choices_selected(c("ARM", "ARMCD"), "ARM"),
      llt = choices_selected(
        choices = variable_choices(ADAE, c("AETERM", "AEDECOD")),
        selected = c("AEDECOD")
      ),
      hlt = choices_selected(
        choices = variable_choices(ADAE, c("AEBODSYS", "AESOC")),
        selected = "AEBODSYS"
      ),
      grade = choices_selected(
        choices = variable_choices(ADAE, c("AETOXGR", "AESEV")),
        selected = "AETOXGR"
      )
    ),
    tm_t_events_patyear(
      label = "AE rate adjusted for patient-years at risk Table",
      dataname = "ADAETTE",
      arm_var = choices_selected(
        choices = variable_choices(ADSL, c("ARM", "ARMCD")),
        selected = "ARMCD"
      ),
      add_total = TRUE,
      events_var = choices_selected(
        choices = variable_choices(ADAETTE, "n_events"),
        selected = "n_events",
        fixed = TRUE
      ),
      paramcd = choices_selected(
        choices = value_choices(ADAETTE, "PARAMCD", "PARAM"),
        selected = "AETTE1"
      )
    ),
    tm_t_events_summary(
      label = "Adverse Events Summary",
      dataname = "ADAE",
      arm_var = choices_selected(
        choices = variable_choices("ADSL", c("ARM", "ARMCD")),
        selected = "ARM"
      ),
      flag_var_anl = choices_selected(
        choices = variable_choices("ADAE",  names(ADAE)[startsWith(names(ADAE), "TMPFL_")]),
        selected =  names(ADAE)[startsWith(names(ADAE), "TMPFL_")][1],
        keep_order = TRUE,
        fixed = FALSE
      ),
      flag_var_aesi = choices_selected(
        choices = variable_choices("ADAE", names(ADAE)[startsWith(names(ADAE), "TMP_")]),
        selected = names(ADAE)[startsWith(names(ADAE), "TMP_")][1],
        keep_order = TRUE,
        fixed = FALSE
      ),
      add_total = TRUE
    )
  )
)

runApp(app)

@gogonzo gogonzo added the core label Jul 29, 2022
@mhallal1
Copy link
Collaborator

mhallal1 commented Aug 3, 2022

tm_t_events and tm_t_ancova are done on this branch: 26_new_chunks_MH_modules@26_new_chunks@main

* quosure

* merged_data to merge_inputs - two modules

Co-authored-by: Mahmoud Hallal <mahmoud.hallal@roche.com>
@Polkas
Copy link
Contributor

Polkas commented Aug 4, 2022

@Polkas
Copy link
Contributor

Polkas commented Aug 10, 2022

coverage of tmc modules in the teal.gallery (tmc related apps, the same result for all apps teal.gallery::list_apps())

tmc_gallery <- unique(unlist(lapply(c("efficacy", "safety", "patient-profile"), \(x)
                      stringr::str_extract_all(teal.gallery::get_app_code(x), "tm_[a-z_]*")[[1]])))
tmc_modules <- grep("tm_", ls(asNamespace("teal.modules.clinical")), value = TRUE)
length(tmc_modules)
# 35
setdiff(tmc_modules, tmc_gallery)
# Only 4 (out of 35) tmc modules are not in the teal.gallery
# c("tm_g_barchart_simple", "tm_g_ci", "tm_g_ipp", "tm_t_shift_by_arm_by_worst")

@gogonzo

gogonzo and others added 2 commits August 31, 2022 15:55
Co-authored-by: Nikolas Burkoff <nikolas.burkoff@roche.com>
# Update UI choices depending on selection of previous options
shiny::observeEvent(input$grade, {
anl <- datasets$get_data(dataname, filtered = FALSE)
anl <- data[[dataname]]()
Copy link
Contributor

Choose a reason for hiding this comment

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

I assume having filtered data instead of unfiltered here is OK

Copy link
Contributor Author

Choose a reason for hiding this comment

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

unfiltered is ok but what's happening in this observer is funny. observeEvent can't return anything and also you can't pass the validate statement further - this means that observeEvent is completelly redundant here.

R/tm_g_ci.R Show resolved Hide resolved
)

data_chunk <- shiny::reactive({
merged_data_q <- shiny::reactive({
Copy link
Collaborator

Choose a reason for hiding this comment

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

Selecting SEX in x variable renders a red error:
Screenshot from 2022-09-05 14-41-44

Copy link
Collaborator

@mhallal1 mhallal1 left a comment

Choose a reason for hiding this comment

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

Except for the last comment, the previous comments have been addressed and the apps retested with filters --> LGTM.

@gogonzo gogonzo changed the base branch from main to teal_refactor@main September 6, 2022 20:16
@gogonzo gogonzo merged commit 2b616fa into teal_refactor@main Sep 7, 2022
@gogonzo gogonzo deleted the 26_new_chunks@main branch September 7, 2022 08:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants