daisybio / cyanus

A Systematic Comparison of Differential Analysis Methods for CyTOF Data & CYANUS App
https://exbio.wzw.tum.de/cyanus/
GNU General Public License v3.0
4 stars 2 forks source link

Access medians per conditions #6

Open JudithBernett opened 2 years ago

JudithBernett commented 2 years ago

In case you want to access the exact median expressions per condition (or other stats), we have prepared a script for you. First, download your sce object using the button on the upper right. Then, modify your paths:

path_to_sce <- "~/Downloads/sce.rds"
path_to_output <- "~/Downloads/medians_per_condition.csv"
condition <- "condition"
sample_id <- "sample_id"

Install and load packages

install.packages("data.table")
install.packages("ggplot2")
if (!require("BiocManager", quietly = TRUE))
  install.packages("BiocManager")

BiocManager::install("SingleCellExperiment")

library(SingleCellExperiment)
library(data.table)
library(ggplot2)

Read in your SCE object

sce <- readRDS(path_to_sce)

Extract the expression data and add metadata information

exprs_dt <- data.table(t(assays(sce)$exprs))
exprs_dt[, (condition) := colData(sce)[, condition]]
exprs_dt[, (sample_id) := colData(sce)[, sample_id]]
# reformat for easier calculation
exprs_dt <- melt(exprs_dt, id.vars = c(condition, sample_id), variable.name = "marker", value.name = "exprs")

Calculate medians per condition

median_dt <- exprs_dt[, median(exprs), by=c(condition, "marker")]
colnames(median_dt) <- c(condition, "marker", "median")
print(median_dt)
# export
fwrite(median_dt, path_to_output)

Sanity check: reproduce boxplot from CYANUS

# calculate medians per condition per sample id
median_per_sample_dt <- exprs_dt[, median(exprs), by=c(condition, sample_id, "marker")]
colnames(median_per_sample_dt) <- c(condition, sample_id, "marker", "median")

ggplot()+
  geom_boxplot(data = median_per_sample_dt, aes(x = get(condition), y = median, color = get(condition)))+
  geom_point(data = median_dt, aes(x = get(condition), y = median))+
  facet_wrap(~marker, scales = "free_y")+
  theme_bw()

Attention: the median per marker per condition is not the same as the median over the medians per marker per condition per sample id. This is why the black points do not match the boxplot lines exactly.

JudithBernett commented 2 years ago

calculate_medians_cyanus.R.zip