前言
Immugent在之前的一篇推文SCPA(四):系统评估疾病状态下功能通路的改变中,已经介绍了如何使用SCPA对疾病状态下的多种细胞进行功能差异评估。今天Immugent再来以各种组织中T细胞的差异为主要研究对象,来展示如何使用SCPA来揭示,某种细胞在不同组织中的功能异质性。不同于之前只是简单的关注两组之间的差异,本期Immugent将介绍如何在多分组的情况下在功能通路层面揭示细胞之间的功能异质性。
代码实操
library(SCPA)
library(Seurat)
library(msigdbr)
library(magrittr)
library(tidyverse)
library(ComplexHeatmap)
tissue_data <- readRDS("szabo_t_cell.rds")
DimPlot(tissue_data, split.by = "tis_stim", group.by = "fine", ncol = 4)
pws <- c("kegg", "reactome", "biocarta", "wiki", "pid")
pathways <- msigdbr("Homo sapiens") %>%
filter(grepl(paste(pws, collapse = "|"), gs_subcat, ignore.case = T) |
grepl("HALLMARK", x = gs_name, ignore.case = T)) %>%
format_pathways()
cell_types <- unique(tissue_data$fine)
split_tissue <- SplitObject(tissue_data, split.by = "tissue")
# We first create empty lists to store results from the for loop
bl_bm <- list(); bl_ln <- list(); bl_lung <- list()
for (i in cell_types) {
# We extract expression data using `seurat_extract` based on tissue, cell_type ("fine"), and stimulation ("none")
blood <- seurat_extract(split_tissue$bl,
meta1 = "fine", value_meta1 = i,
meta2 = "stimulation", value_meta2 = "none")
bm <- seurat_extract(split_tissue$bm,
meta1 = "fine", value_meta1 = i,
meta2 = "stimulation", value_meta2 = "none")
ln <- seurat_extract(split_tissue$ln,
meta1 = "fine", value_meta1 = i,
meta2 = "stimulation", value_meta2 = "none")
lung <- seurat_extract(split_tissue$lung,
meta1 = "fine", value_meta1 = i,
meta2 = "stimulation", value_meta2 = "none")
# We then compare all tissues to the blood using `compare_pathways`
print(paste("comparing", i))
bl_bm[[i]] <- compare_pathways(list(blood, bm), pathways)
bl_ln[[i]] <- compare_pathways(list(blood, ln), pathways)
bl_lung[[i]] <- compare_pathways(list(blood, lung), pathways)
}
hm <- all_data %>%
Heatmap(name = "Qval",
show_row_names = F,
top_annotation = col_an,
border = T,
show_row_dend = F,
show_column_dend = F,
show_column_names = F)
ht <- draw(hm)
apply(all_data, 1, var) %>%
data.frame() %>%
set_colnames("variance") %>%
arrange(desc(variance)) %>%
rownames_to_column("pathway") %>%
ggplot(aes(reorder(pathway, variance), variance)) +
geom_point(shape = 21, cex = 3, fill = "royalblue2", color = 'black', stroke = 0.2) +
scale_x_discrete(expand = c(0.04, 0.04)) +
labs(x = "Pathway", y = "Variance") +
theme(axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
panel.background = element_blank(),
panel.border = element_rect(fill = NA))
tissue_data$neat <- case_when(tissue_data$tissue == "bl" ~ "Blood",
tissue_data$tissue == "bm" ~ "BM",
tissue_data$tissue == "lung" ~ "Lung",
tissue_data$tissue == "ln" ~ "LN")
plots <- VlnPlot(df, c("DEFA1", "DEFA3"), pt.size = 0, group.by = "neat", ncol = 1, combine = F)
p1 <- VlnPlot(df, "DEFA1", pt.size = 0, group.by = "neat", ncol = 1) +
theme(axis.text.x = element_blank(),
axis.title.x = element_blank(),
plot.title = element_blank()) +
NoLegend() +
ylab("Log1p")
p2 <- VlnPlot(df, "DEFA3", pt.size = 0, group.by = "neat", ncol = 1) +
theme(axis.title.x = element_blank(),
plot.title = element_blank()) +
NoLegend() +
ylab("Log1p")
patchwork::wrap_plots(p1, p2, ncol = 1)
说在最后
从上面分析结果我们可以看出,不同于之前的软件只能进行两组之间的差异分析,SCPA可以对多组之间的功能进行差异评估。并且通过对所有细胞的所有通路进行层次聚类后,可以特异性挑选出在某一组中特异性活跃的功能通路。但是需要注意的是,不同于双分组可以通过logFC来评估两组之间某一因素的差异程度,多分组只能通过特异性来进行评估,在SCPA中使用Variance来表示。
好啦,本期分享到此就结束了,我们下期再会~~
网友评论