single cell ATAC(5)使用ArchR聚类

第五章:在 ArchR 降维结果上给细胞贴标签(聚类)

一句话先读:本章只做一件事------在低维空间里把细胞聚成群,再对照样本来源看批次是否干净。


一、总流程:先做什么 → 后做什么 → 为什么

顺序 动作 目的
1 确认已有降维对象 projHeme2 且含 IterativeLSI 聚类必须在低维空间做
2 addClusters(..., method="Seurat") 快速得细胞群落
3 查看 & 统计 projHeme2$Clusters 心里对规模有数
4 confusionMatrix() + 热图 验证批次是否混杂
5 可选:method="scran" 再聚类 换个视角,更敏感
6 比较两种结果一致性 决定最终用谁

二、详细拆解(代码 + 可调参数 + 常见坑)

1. 前置检查

r 复制代码
# 确保降维已完成
projHeme2@reducedDims[["IterativeLSI"]]   # 不报错即可
  • :前面没跑 addIterativeLSI() 会直接报错。

2. Seurat 聚类(一键完成)

r 复制代码
projHeme2 <- addClusters(
  input        = projHeme2,
  reducedDims  = "IterativeLSI",
  method       = "Seurat",
  name         = "Clusters",   # 新列名,可改
  resolution   = 0.8         # 越大 cluster 越多
)
  • 可调参数
    • resolution:0.2--1.2 试不同粒度
    • Seurat::FindClusters() 其余参数通过 ... 传入,如 algorithm=1

3. 查看聚类结果

r 复制代码
head(projHeme2$Clusters)     # 每个细胞的 cluster ID
table(projHeme2$Clusters)    # 每群细胞数
  • :出现 NA 说明部分细胞被 QC 过滤,需回溯。

4. 批次质检(混淆矩阵)

聚类混合矩阵(cluster confusion matrix)

为了更好了解样本在cluster的分布

r 复制代码
library(ArchR)
cM <- confusionMatrix(
  paste0(projHeme2$Clusters),
  paste0(projHeme2$Sample)
)

# 归一化热图
cM <- cM / Matrix::rowSums(cM)
pheatmap::pheatmap(
  as.matrix(cM),
  color       = paletteContinuous("whiteBlue"),
  border_color = "black"
)
  • 解读 :行 = cluster,列 = 样本
    • 某列独占一行 → 批次效应明显,需回 Harmony/BBKNN 处理
    • 建议批次混占比 < 10 %

5. scran 聚类(可选)

除了Seurat, ArchR还能够使用scran进行聚类分析,我们只需要修改addClusters()中的method参数即可。

r 复制代码
projHeme2 <- addClusters(
  input        = projHeme2,
  reducedDims  = "IterativeLSI",
  method       = "scran",
  name         = "ScranClusters",
  k            = 15   # kNN 邻居数
)
  • 注意
    • k 相当于 Seurat 的 k.param,数据大可提高
    • 列名不要与第 2 步重名

6. 一致性比较(可选)

r 复制代码
table(projHeme2$Clusters, projHeme2$ScranClusters)
  • 差异大?
    • 结合 UMAP 人工判断
    • 或取交集/并集做稳健标记

三、最小可复现 checklist

  • 前四章完成,projHeme2IterativeLSI
  • 运行第 2 步代码,得到 Clusters
  • table() 看分布,无 NA
  • 混淆矩阵批次混占比 < 10 %
  • 如需 scran,换列名并重跑比较

跑通以上 5 步,第五章即毕业。

复制代码