## ----setup, include = FALSE--------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 5, warning = FALSE, message = FALSE, eval = FALSE ) ## ----load-bluecode, eval=FALSE------------------------------------------------ # library(dicepro) # # data(BlueCode) # # cat("BlueCode dimensions :", dim(BlueCode), "\n") # cat("Number of cell types :", ncol(BlueCode), "\n") # cat("Number of genes :", nrow(BlueCode), "\n") # print(head(colnames(BlueCode), 5L)) ## ----bluecode-compartments, eval=FALSE---------------------------------------- # compartments <- list( # Immune = colnames(BlueCode)[1:9], # Stromal = colnames(BlueCode)[10:17], # Endothelial = colnames(BlueCode)[18:20], # Epithelial = colnames(BlueCode)[21:25], # Muscle = colnames(BlueCode)[26:34] # ) # for (comp in names(compartments)) { # cat(sprintf(" %s (%d): %s\n", # comp, # length(compartments[[comp]]), # paste(compartments[[comp]], collapse = ", "))) # } ## ----load-cellmixtures, eval=FALSE-------------------------------------------- # data(CellMixtures) # # cat("CellMixtures dimensions :", dim(CellMixtures), "\n") # cat("Sample names :", colnames(CellMixtures), "\n") # cat("First 5 gene names :", head(rownames(CellMixtures), 5L), "\n") ## ----gene-overlap, eval=FALSE------------------------------------------------- # n_ref <- nrow(BlueCode) # n_bulk <- nrow(CellMixtures) # n_common <- length(intersect(rownames(BlueCode), rownames(CellMixtures))) # # cat(sprintf( # "Reference genes : %d\nBulk genes : %d\nCommon genes : %d (%.1f%% of reference)\n", # n_ref, n_bulk, n_common, 100 * n_common / n_ref # )) ## ----expr-dist, eval=FALSE---------------------------------------------------- # log2_bulk <- log2(as.matrix(CellMixtures) + 1) # boxplot( # log2_bulk, # las = 2, # col = "#2c7bb680", # ylab = expression(log[2](counts + 1)), # main = "CellMixtures: expression distribution per sample" # ) ## ----run-dicepro, eval=FALSE-------------------------------------------------- # out <- dicepro( # reference = as.matrix(BlueCode), # bulk = as.matrix(CellMixtures), # methodDeconv = "FARDEEP", # W_prime = 0, # bulkName = "CellMixtures", # refName = "BlueCode", # hp_max_evals = 150L, # algo_select = "random", # output_path = tempdir(), # hspaceTechniqueChoose = "all" # ) ## ----best-hp, eval=FALSE------------------------------------------------------ # cat("Best lambda :", out$hyperparameters$lambda, "\n") # cat("Best gamma :", out$hyperparameters$gamma, "\n") # cat("Loss :", out$metrics$loss, "\n") # cat("Constraint :", out$metrics$constraint, "\n") ## ----plot-hyperopt, eval=FALSE, fig.height=9---------------------------------- # out$plot_hyperopt ## ----plot-pareto, eval=FALSE-------------------------------------------------- # out$plot ## ----proportion-heatmap, eval=FALSE, fig.height=6----------------------------- # prop_mat <- as.matrix(out$H) # prop_sorted <- prop_mat[, order(colMeans(prop_mat), decreasing = TRUE)] # # heatmap( # prop_sorted, # Rowv = NA, # Colv = NA, # col = colorRampPalette(c("white", "#2c7bb6", "#d7191c"))(50L), # scale = "none", # margins = c(12, 6), # main = "Estimated cell-type proportions -- CellMixtures", # xlab = "Cell type", # ylab = "Sample" # ) ## ----top-ct, eval=FALSE, fig.height=4----------------------------------------- # mean_props <- sort(colMeans(prop_mat), decreasing = TRUE) # # par(mar = c(10, 4, 3, 1)) # barplot( # mean_props, # las = 2, # col = "#2c7bb6", # ylab = "Mean proportion", # main = "Mean estimated proportions across samples", # cex.names = 0.65 # ) ## ----stacked-bar, eval=FALSE, fig.height=5------------------------------------ # top10 <- names(sort(colMeans(prop_mat), decreasing = TRUE))[seq_len(10L)] # prop_top10 <- prop_mat[, top10, drop = FALSE] # # cols <- colorRampPalette( # c("#2c7bb6", "#abd9e9", "#ffffbf", "#fdae61", "#d7191c", # "#1a9641", "#a6d96a", "#762a83", "#c2a5cf", "#e7d4e8") # )(10L) # # barplot( # t(prop_top10), # col = cols, # legend = colnames(prop_top10), # args.legend = list(x = "topright", cex = 0.55, ncol = 2L), # las = 1, # ylab = "Proportion", # xlab = "Sample", # main = "Per-sample cell composition (top 10 cell types)", # border = NA # ) ## ----compartment-summary, eval=FALSE, fig.height=4---------------------------- # ct_to_comp <- c( # setNames(rep("Immune", 9L), compartments$Immune), # setNames(rep("Stromal", 8L), compartments$Stromal), # setNames(rep("Endothelial", 3L), compartments$Endothelial), # setNames(rep("Epithelial", 5L), compartments$Epithelial), # setNames(rep("Muscle", 9L), compartments$Muscle) # ) # # shared_ct <- intersect(colnames(prop_mat), names(ct_to_comp)) # comp_props <- vapply( # unique(ct_to_comp), # function(comp) { # cts <- names(ct_to_comp)[ct_to_comp == comp & names(ct_to_comp) %in% shared_ct] # if (length(cts) == 0L) return(NA_real_) # mean(rowSums(prop_mat[, cts, drop = FALSE])) # }, # numeric(1L) # ) # # comp_cols <- c( # Immune = "#2c7bb6", # Stromal = "#fdae61", # Endothelial = "#1a9641", # Epithelial = "#d7191c", # Muscle = "#762a83" # ) # # barplot( # sort(comp_props, decreasing = TRUE), # col = comp_cols[names(sort(comp_props, decreasing = TRUE))], # ylab = "Mean proportion", # las = 1, # main = "Mean estimated proportion by tissue compartment", # border = NA # ) ## ----session-info, eval=FALSE------------------------------------------------- # sessionInfo()