细胞受到各种外部刺激之后导致状态/功能/形状等发生变化(暂时/永久),这种改变现象可以被笼统称为“扰动”。
而我们作为生物医学领域的研究者,恰恰就是要研究这种“扰动”,以此探明生物学表象下的更深层次“逻辑”。
Augur工具可以帮助我们比较不同条件下单细胞RNA的扰动差异,从而初步识别出哪些细胞群体的扰动最为显著。Augur 使用的机器学习框架依赖于分类算法,随机森林(Random Forests)或逻辑回归(Logistic Regression),这些算法非常适合处理具有高维特征空间的单细胞数据。它采用的训练分类器根据细胞测量数据预测扰动状态(比如疾病与否),并根据分类的效果来优先考虑细胞类型,这一效果通过受试者效应曲线下面积(AUC)来表示。
分析流程
1.导入
# 1.导入
```{r}
rm(list = ls())
V5_path = "/Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/seurat5/"
.libPaths(V5_path)
.libPaths()
library(stringr)
library(Seurat)
library(Augur)
library(dplyr)
library(patchwork)
library(viridis)
library(qs)
library(BiocParallel)
register(MulticoreParam(workers = 4, progressbar = TRUE))
load("scRNA.Rdata")
2.数据预处理
创造出了batch/group信息
# check
table(scRNA$orig.ident)
table(scRNA$celltype)
dat <- scRNA@meta.data
# 增加一下批次信息,转换成数字
dat$batch <- ifelse(grepl("sample2|sample4|sample6", dat$orig.ident), "1", "2")
# 增加一下分组信息,这里是随意编造的
dat$group <- ifelse(grepl("sample[1-3]", dat$orig.ident), "con", "treat")
scRNA@meta.data <- dat
3.单一组别不同条件下augur分析(比如治疗前后)
# 此函数的主要目的是评估并计算每种细胞类型在特定条件(如实验组别或时间点)下的表现,通常通过计算区域下曲线(AUC)来量化。它是单一条件下的细胞类型表现的度量,可以帮助识别在特定实验设置下哪些细胞类型表现最为显著或重要。
augur <- calculate_auc(scRNA,
cell_type_col = "celltype", # 细胞亚群数据
label_col = "group", # 实验分组数据
n_threads = 8)
qsave(augur,"augur.qs")
head(augur$AUC, 5)
# # A tibble: 5 × 2
# cell_type auc
# <fct> <dbl>
# 1 NK cells 0.822
# 2 Fibroblasts 0.745
# 3 Neutrophils 0.66
# 4 B-cells 0.623
# 5 CD8+ T-cells 0.606
4.可视化
# 明确哪个细胞群体的RNA水平变化最大
# plot_lollipop函数是基于ggplot框架的,所以很容易就可以美化图片
# 还可以提取原始函数进行修改
plot_lollipop(augur) +
geom_segment(aes(xend = cell_type, yend = 0.5), size = 1) +
geom_point(size = 3, aes(color = cell_type)) + # 增加点的大小和颜色映射
scale_color_manual(values = c(
"NK cells" = "#1f77b4", # 蓝色
"Fibroblasts" = "#ff7f0e", # 橙色
"Neutrophils" = "#2ca02c", # 绿色
"B-cells" = "#d62728", # 红色
"CD8+ T-cells" = "#9467bd", # 紫色
"Monocytes" = "#8c564b", # 棕色
"Adipocytes" = "#e377c2", # 粉色
"CD4+ T-cells" = "#7f7f7f" # 灰色
))
# 结合umap
# rank模式
plot_umap(augur,scRNA,
mode = "rank",
reduction = "umap",
palette = "cividis",
augur_mode = "default",
cell_type_col = "celltype")
# default模式
plot_umap(augur,scRNA,
mode = "default",
reduction = "umap",
palette = "YlGnBu", # "viridis", "plasma", "magma", "inferno"
augur_mode = "default",
cell_type_col = "celltype")
plot_lollipop展示了在不同处理情况下(group)中变化最显著的细胞(根据AUC值)mode中的rank和default模式的区别在于是否用AUC值进行颜色映射。
5.两组别(比如A和B药)不同条件下(比如治疗前后)augur分析
# 这个函数使用来自 calculate_auc 的输出进行更深入的分析,比较两个不同条件下的AUC分数,以识别统计上显著的差异。通过置换测试(permute),该函数评估两个条件下细胞类型优先级的变化是否显著,超过了随机变化的可能性
# 拆分数据-笔者假设batch是不同的药物
scRNA.list <- SplitObject(scRNA, split.by = "batch")
# 初始化结果列表
augur_results <- list()
permuted_results <- list()
# 计算每个批次的AUC
for (i in seq_along(scRNA.list)) {
# 从列表中获取当前的Seurat对象
current_scRNA <- scRNA.list[[i]]
# 正常模式计算AUC
normal_augur <- calculate_auc(current_scRNA,
cell_type_col = "celltype",
label_col = "group",
augur_mode = "default", # 使用默认模式
n_threads = 8)
augur_results[[i]] <- normal_augur
# 置换模式计算AUC
permuted_augur <- calculate_auc(current_scRNA,
cell_type_col = "celltype",
label_col = "group",
augur_mode = "permute", # 使用置换模式
n_threads = 8)
permuted_results[[i]] <- permuted_augur
}
# 保存结果
qsave(augur_results, "augur_normal_list.qs")
qsave(permuted_results, "augur_permuted_list.qs")
# 如果需要比较第一个和第二个批次的差异
res <- calculate_differential_prioritization(augur_results[[1]],
augur_results[[2]],
permuted_results[[1]],
permuted_results[[2]],
n_subsamples = 50,
n_permutations = 1000)
res
# # A tibble: 5 × 9
# cell_type auc.x auc.y delta_auc b m z pval padj
# <fct> <dbl> <dbl> <dbl> <int> <int> <dbl> <dbl> <dbl>
# 1 Adipocytes 0.753 0.671 -0.0824 998 1000 -3.13 0.00599 0.00599
# 2 CD8+ T-cells 0.734 0.639 -0.0954 1000 1000 -4.45 0.00200 0.00500
# 3 Fibroblasts 0.711 0.790 0.0786 0 1000 4.06 0.00200 0.00500
# 4 Monocytes 0.619 0.679 0.0603 1 1000 2.93 0.00400 0.00500
# 5 CD4+ T-cells 0.588 0.645 0.0573 1 1000 3.20 0.00400 0.00500
plot_scatterplot(augur_results[[1]],augur_results[[2]],top_n = 6)+
geom_point(size = 3, aes(color = cell_type)) # 增加点的大小和颜色映射
X轴 (AUC 1) :表示第一个实验条件下的AUC值。Y轴 (AUC 2) :表示第二个实验条件下的AUC值。
对角线 :虚线表示两个条件下AUC值完全相同的情况。如果某个点位于对角线附近,说明这个细胞类型在两个条件下的AUC几乎没有变化。离线越远的点,表示AUC变化越大。
点的颜色 :颜色条代表AUC值变化的方向和大小。蓝色表示在第二个条件下AUC值降低,红色表示AUC值上升。颜色的深浅表示变化幅度,深蓝色表示负的变化较大,而深红色表示正的变化较大。
Fibroblasts:这个细胞类型位于对角线的上方,且呈红色,说明在第二个条件下,Fibroblasts的AUC值较高,优先级增加。Adipocytes:这个细胞类型位于对角线下方,且呈蓝色,说明在第二个条件下,Adipocytes的AUC值较低,优先级减少。Monocytes、CD4+ T-cells 和 CD8+ T-cells:这些细胞类型相较于对角线有不同的偏移,说明它们在两个条件下的AUC值也有所不同,但变化幅度相对较小。还有一些细胞类型的AUC值比较小所以没有被显示(不同组别/条件的影响更小)。
参考资料:
Cell type prioritization in single-cell data. Nat Biotechnol. 2021 Jan;39(1):30-34. Augur:https://github.com/neurorestore/Augur 单细胞天地:https://mp.weixin.qq.com/s/FlO4fN5AlcyZ81llzHE5Ag
注:若对内容有疑惑或者有发现明确错误的朋友,请联系后台(欢迎交流)。更多内容可关注公众号:生信方舟
- END -