The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Using association plot

NEST CoreDev

teal application to use association plot with various datasets types

This vignette will guide you through the four parts to create a teal application using various types of datasets using the association plot module tm_g_association():

  1. Load libraries
  2. Create data sets
  3. Create an app variable
  4. Run the app

1 - Load libraries

library(teal.modules.general) # used to create the app
library(dplyr) # used to modify data sets

2 - Create data sets

Inside this app 4 datasets will be used

  1. ADSL A wide data set with subject data
  2. ADRS A long data set with response data for subjects at different time points of the study
  3. ADTTE A long data set with time to event data
  4. ADLB A long data set with lab measurements for each subject
data <- teal_data()
data <- within(data, {
  ADSL <- teal.modules.general::rADSL %>%
    mutate(TRTDUR = round(as.numeric(TRTEDTM - TRTSDTM), 1))
  ADRS <- teal.modules.general::rADRS
  ADTTE <- teal.modules.general::rADTTE
  ADLB <- teal.modules.general::rADLB %>%
    mutate(CHGC = as.factor(case_when(
      CHG < 1 ~ "N",
      CHG > 1 ~ "P",
      TRUE ~ "-"
    )))
})
datanames <- c("ADSL", "ADRS", "ADTTE", "ADLB")
datanames(data) <- datanames
join_keys(data) <- default_cdisc_join_keys[datanames]

3 - Create an app variable

This is the most important section. We will use the teal::init() function to create an app. The data will be handed over using teal.data::teal_data(). The app itself will be constructed by multiple calls of tm_g_association() using different combinations of data sets.

# configuration for a single wide dataset
mod1 <- tm_g_association(
  label = "Single wide dataset",
  ref = data_extract_spec(
    dataname = "ADSL",
    select = select_spec(
      label = "Select variable:",
      choices = variable_choices(data[["ADSL"]]),
      selected = "AGE",
      fixed = FALSE
    )
  ),
  vars = data_extract_spec(
    dataname = "ADSL",
    select = select_spec(
      label = "Select variables:",
      choices = variable_choices(data[["ADSL"]]),
      selected = "BMRKR1",
      multiple = TRUE,
      fixed = FALSE
    )
  )
)

# configuration for two wide datasets
mod2 <- tm_g_association(
  label = "Two wide datasets",
  ref = data_extract_spec(
    dataname = "ADSL",
    select = select_spec(
      label = "Select variable:",
      choices = variable_choices(data[["ADSL"]], c("AGE", "SEX", "STRATA1", "RACE")),
      selected = "STRATA1",
      multiple = FALSE,
      fixed = FALSE
    )
  ),
  vars = data_extract_spec(
    dataname = "ADSL",
    select = select_spec(
      label = "Select variables:",
      choices = variable_choices(data[["ADSL"]], c("AGE", "SEX", "RACE", "COUNTRY")),
      selected = c("AGE", "COUNTRY", "RACE"),
      multiple = TRUE,
      fixed = FALSE
    )
  )
)

# configuration for multiple long datasets
mod3 <- tm_g_association(
  label = "Multiple different long datasets",
  ref = data_extract_spec(
    dataname = "ADTTE",
    select = select_spec(
      label = "Select variables:",
      choices = variable_choices(data[["ADTTE"]]),
      selected = "AVAL",
      multiple = FALSE,
      fixed = FALSE
    ),
    filter = filter_spec(
      label = "Select endpoint:",
      vars = "PARAMCD",
      choices = value_choices(data[["ADTTE"]], "PARAMCD", "PARAM"),
      selected = c("PFS", "EFS"),
      multiple = TRUE
    )
  ),
  vars = data_extract_spec(
    dataname = "ADRS",
    reshape = TRUE,
    select = select_spec(
      label = "Select variable:",
      choices = variable_choices(data[["ADRS"]], c("AVALC", "BMRKR1", "BMRKR2", "ARM")),
      selected = "AVALC",
      multiple = TRUE,
      fixed = FALSE
    ),
    filter = list(
      filter_spec(
        label = "Select endpoints:",
        vars = "PARAMCD",
        choices = value_choices(data[["ADRS"]], "PARAMCD", "PARAM"),
        selected = "BESRSPI",
        multiple = TRUE
      ),
      filter_spec(
        label = "Select endpoints:",
        vars = "AVISIT",
        choices = levels(data[["ADRS"]]$AVISIT),
        selected = "SCREENING",
        multiple = TRUE
      )
    )
  )
)

# configuration for wide and long datasets
mod4 <- tm_g_association(
  label = "Wide and long datasets",
  ref = data_extract_spec(
    dataname = "ADRS",
    select = select_spec(
      choices = variable_choices(data[["ADRS"]], c("AVAL", "AVALC")),
      selected = "AVALC",
      multiple = FALSE,
      fixed = FALSE,
      label = "Selected variable:"
    ),
    filter = list(
      filter_spec(
        vars = "PARAMCD",
        choices = value_choices(data[["ADRS"]], "PARAMCD", "PARAM"),
        selected = levels(data[["ADRS"]]$PARAMCD),
        multiple = TRUE,
        label = "Select response"
      ),
      filter_spec(
        vars = "AVISIT",
        choices = levels(data[["ADRS"]]$AVISIT),
        selected = levels(data[["ADRS"]]$AVISIT),
        multiple = TRUE,
        label = "Select visit:"
      )
    )
  ),
  vars = data_extract_spec(
    dataname = "ADSL",
    select = select_spec(
      choices = variable_choices(data[["ADSL"]], c("SEX", "AGE", "RACE", "COUNTRY", "BMRKR1", "STRATA1", "ARM")),
      selected = "AGE",
      multiple = TRUE,
      fixed = FALSE,
      label = "Select variable:"
    )
  )
)

# configuration for the same long dataset (same subsets)
mod5 <- tm_g_association(
  label = "Same long datasets (same subsets)",
  ref = data_extract_spec(
    dataname = "ADRS",
    select = select_spec(
      choices = variable_choices(data[["ADRS"]]),
      selected = "AVALC",
      multiple = FALSE,
      fixed = FALSE,
      label = "Select variable:"
    )
  ),
  vars = data_extract_spec(
    dataname = "ADRS",
    select = select_spec(
      choices = variable_choices(data[["ADRS"]]),
      selected = "PARAMCD",
      multiple = TRUE,
      fixed = FALSE,
      label = "Select variable:"
    )
  )
)

# configuration for the same long dataset (different subsets)
mod6 <- tm_g_association(
  label = "Same long datasets (different subsets)",
  ref = data_extract_spec(
    dataname = "ADLB",
    filter = list(
      filter_spec(
        vars = "PARAMCD",
        choices = value_choices(data[["ADLB"]], "PARAMCD", "PARAM"),
        selected = levels(data[["ADLB"]]$PARAMCD)[1],
        multiple = FALSE,
        label = "Select lab:"
      ),
      filter_spec(
        vars = "AVISIT",
        choices = levels(data[["ADLB"]]$AVISIT),
        selected = levels(data[["ADLB"]]$AVISIT)[1],
        multiple = FALSE,
        label = "Select visit:"
      )
    ),
    select = select_spec(
      choices = variable_choices(data[["ADLB"]], c("AVAL", "CHG2", "PCHG2")),
      selected = "AVAL",
      multiple = FALSE
    )
  ),
  vars = data_extract_spec(
    dataname = "ADLB",
    filter = list(
      filter_spec(
        vars = "PARAMCD",
        choices = value_choices(data[["ADLB"]], "PARAMCD", "PARAM"),
        selected = levels(data[["ADLB"]]$PARAMCD)[1],
        multiple = FALSE,
        label = "Select labs:"
      ),
      filter_spec(
        vars = "AVISIT",
        choices = levels(data[["ADLB"]]$AVISIT),
        selected = levels(data[["ADLB"]]$AVISIT)[1],
        multiple = FALSE,
        label = "Select visit:"
      )
    ),
    select = select_spec(
      choices = variable_choices(data[["ADLB"]]),
      selected = "STRATA1",
      multiple = TRUE
    )
  )
)

# initialize the app
app <- init(
  data = data,
  modules = modules(
    # tm_g_association ----
    modules(
      label = "Association plot",
      mod1,
      mod2,
      mod3,
      mod4,
      mod5,
      mod6
    )
  )
)

4 - Run the app

A simple shiny::shinyApp() call will let you run the app. Note that app is only displayed when running this code inside an R session.

shinyApp(app$ui, app$server, options = list(height = 1024, width = 1024))

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.