## ----setup, include = FALSE--------------------------------------------------- knitr::opts_chunk$set(collapse = TRUE, comment = "#>") ## ----load--------------------------------------------------------------------- library(splitGraph) ## ----meta--------------------------------------------------------------------- meta <- data.frame( sample_id = paste0("S", 1:8), subject_id = c("P1", "P1", "P2", "P2", "P3", "P3", "P4", "P4"), batch_id = c("B1", "B1", "B2", "B2", "B3", "B3", "B3", "B4"), site_id = c("NYC", "NYC", "NYC", "NYC", "BOS", "BOS", "BOS", "BOS"), timepoint_id = rep(c("T0", "T1"), 4), time_index = rep(c(0, 1), 4), outcome_id = c("case", "case", "ctrl", "ctrl", "case", "case", "ctrl", "ctrl"), stringsAsFactors = FALSE ) ## ----build-------------------------------------------------------------------- g <- graph_from_metadata(meta, graph_name = "quick-start") g validate_graph(g) ## ----derive-subject----------------------------------------------------------- subject_constraint <- derive_split_constraints(g, mode = "subject") subject_constraint grouping_vector(subject_constraint) ## ----constraint-table--------------------------------------------------------- head(as.data.frame(subject_constraint)[, c("sample_id", "group_id", "explanation")], 2) ## ----derive-composite--------------------------------------------------------- composite_constraint <- derive_split_constraints( g, mode = "composite", via = c("subject", "batch") ) grouping_vector(composite_constraint) ## ----spec--------------------------------------------------------------------- spec <- as_split_spec(subject_constraint, graph = g) spec ## ----spec-roles--------------------------------------------------------------- spec$group_var # the split unit spec$block_vars # coarser axes that ideally should not straddle a fold spec$time_var # ordering, when the graph carries one spec$stratum_var # the outcome level each sample has ## ----spec-table--------------------------------------------------------------- as.data.frame(spec)[, c("sample_id", "group_id", "batch_group", "site_group", "stratum", "order_rank")] ## ----spec-validate------------------------------------------------------------ validate_split_spec(spec) ## ----risks-------------------------------------------------------------------- risks <- summarize_leakage_risks(g, constraint = subject_constraint, split_spec = spec) risks unique(as.data.frame(risks)[, c("category", "severity", "severed")]) ## ----write, eval = requireNamespace("jsonlite", quietly = TRUE)--------------- path <- tempfile(fileext = ".json") write_split_spec(spec, path) validate_split_spec_json(path)$valid # Reading with validate = TRUE re-checks the file against the schema and runs # the preflight validator, instead of trusting whatever is on disk. back <- read_split_spec(path, validate = TRUE) identical(back$sample_data$group_id, spec$sample_data$group_id) ## ----bioleak, eval = FALSE---------------------------------------------------- # bioLeak::as_leaksplits(spec, data = my_frame, outcome = "y") ## ----bioleak-workaround, eval = FALSE----------------------------------------- # joined <- merge(my_frame, spec$sample_data[, c("sample_id", "group_id")], # by = "sample_id") # bioLeak::make_split_plan(joined, outcome = "y", # mode = "subject_grouped", group = "group_id") ## ----cleanup, include = FALSE------------------------------------------------- if (exists("path")) unlink(path)