单细胞Augur细胞扰动差异分析学习和整理

文摘   2024-09-30 14:06   日本  

细胞受到各种外部刺激之后导致状态/功能/形状等发生变化(暂时/永久),这种改变现象可以被笼统称为“扰动”。

而我们作为生物医学领域的研究者,恰恰就是要研究这种“扰动”,以此探明生物学表象下的更深层次“逻辑”。

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值比较小所以没有被显示(不同组别/条件的影响更小)。

参考资料:

  1. Cell type prioritization in single-cell data. Nat Biotechnol. 2021 Jan;39(1):30-34.
  2. Augur:https://github.com/neurorestore/Augur
  3. 单细胞天地:https://mp.weixin.qq.com/s/FlO4fN5AlcyZ81llzHE5Ag

:若对内容有疑惑或者有发现明确错误的朋友,请联系后台(欢迎交流)。更多内容可关注公众号:生信方舟

- END -


生信方舟
执着医学,热爱科研。站在巨人的肩膀上,学习和整理各种知识。
 最新文章