第五章:在 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
- 前四章完成,
projHeme2
含IterativeLSI
- 运行第 2 步代码,得到
Clusters
列 -
table()
看分布,无 NA - 混淆矩阵批次混占比 < 10 %
- 如需 scran,换列名并重跑比较
跑通以上 5 步,第五章即毕业。