细胞类型注释——给每个细胞贴上正确标签
细胞间通信分析,说到底得先知道「谁在跟谁说话」。你想想看,如果连细胞身份都不清楚,那后面画的网络图就是一笔糊涂账。我个人习惯将细胞注释看作生物信息学分析中最关键的一步——方向对了,后面的路才好走。
今天我带你梳理一下细胞类型注释的常用方法,以及如何用好Marker基因这块敲门砖。
注释的本质:不仅要「分群」,更要「认亲」
单细胞测序做完聚类,我们拿到的是一个个「细胞簇」。但这些簇对应什么细胞类型?需要借助已知的分子标记来匹配。
我在项目中遇到过这样的坑:聚类效果好,看起来团块分明,但一查Marker基因,发现某个簇同时表达了T细胞和NK细胞的标志物。后来仔细排查,原来是双细胞没滤干净。嗯,这里要注意——Marker基因的质量直接决定注释准确度。
| 注释层次 | 依赖信息 | 典型做法 |
|---|---|---|
| 粗粒度 | 少数高特异Marker | CD3E→T细胞,CD19→B细胞 |
| 细粒度 | 多基因组合+亚群特征 | CD4+FOXP3→调节T细胞 |
| 功能级 | 通路活性+功能标记 | IFNG+TBX21→Th1效应状态 |
Marker基因:注释的“身份证”
Marker基因,说白了就是某个细胞类型的独家签名。一个好的Marker基因需要满足:在该细胞类型中稳定高表达,在其他类型中表达量低甚至不表达。
我记得之前接触过一个项目,想从PBMC数据中注释出树突状细胞亚群。光靠单个CD1C不够——它虽然富集于髓样DC,但在部分单核细胞中也有表达。后来我用CD1C+FCER1A+CLEC10A三个基因联合筛选,才把cDC2挑干净。
实际工作中,Marker基因的来源主要有两处:一是文献和数据库(如CellMarker、PanglaoDB),二是用差异表达分析从自己的数据中挖掘。我的习惯是先查数据库,再结合实验验证。
常用注释方法:三条路,各有利弊
现在主流的注释方法有三类。我按推荐度从高到低给你排一下:
- 基于Marker基因的人工注释:最传统,也最灵活。你对照已知Marker列表,逐个鉴定每个簇的身份。适合有经验的分析者,能处理罕见亚群。
- 自动注释工具:如SingleR、CellTypist。它们拿你的数据跟参考数据库比对,自动打标签。速度快,适合批量处理,但依赖参考数据的质量。
- 无监督+先验知识结合:先用无监督聚类拿到初步分群,再利用已知生物学知识进行归属判断。我比较喜欢这种方式——既保留了数据本身的特征,又不脱离生物学背景。
这里有一个坑:自动注释也不是万能的。我曾经遇到过用SingleR注释外周血样本,结果把一部分单核细胞标成了DC。后来查原因,是因为参考数据中没有充分覆盖跨组织变异。所以,自动注释的结果一定要做人工复核。
实战案例:三步走,快速上手注释
下面用一个简化流程示范,假设你已经完成了降维聚类和差异表达分析。
第一步:挑选候选Marker
用差异表达结果,找每个族高表达的Top基因。用文献或数据库筛选出已知的细胞类型标记。
# 这里展示一个简单的筛选逻辑
# 差异表达结果已存储为 de_table
# 筛选条件:avg_log2FC > 1 且 p_val_adj < 0.05
marker_candidates <- de_table[
de_table$avg_log2FC > 1 & de_table$p_val_adj < 0.05,
]
# 人工核对候选Marker与已知注释表的匹配情况
第二步:多基因交叉验证
对每个候选细胞类型,列出2-3个特异性基因,用可视化检查表达分布。
# 示例:检查T细胞和NK细胞的Marker表达
markers_to_check <- c("CD3D", "CD8A", "NKG7", "GNLY")
DotPlot(seurat_obj, features = markers_to_check) + RotatedAxis()
# 如果某个簇CD3D高而NKG7低,倾向注释为T细胞
# 如果NKG7高而CD3D低,倾向注释为NK细胞
第三步:全局一致性调整
将注释结果放到整体上下文中,检查是否有矛盾。例如某类细胞出现在不该出现的组织位置,或者某些Marker组合出现异常。
我个人比较喜欢用Seurat的FindAllMarkers配合SingleR做双向验证——机器学习给初筛,人工做终审。
我的一些实战心得
做了这么多年单细胞分析,我总结了几条实用经验:
- 参考数据别死心眼:同一个细胞类型在不同组织中的Marker表达有差异。比如组织驻留巨噬细胞与循环单核细胞的标记就不同。
- 关注低表达基因:有些高特异的Marker本身就是低表达。我遇到过很多情况——CD4在调节T细胞中表达不高,但跟FOXP3组合起来就是金标准。
- 重视质量控制的反馈:注释结果异常有时不是注释方法的问题,而是上游数据有问题。簇中出现跨谱系Marker共表达,先查双细胞率和批次效应。
其实细胞注释更像是一门艺术——优秀的语境判断力和扎实的生物学背景,往往比代码水平更重要。我在带学生时总强调:工具在变,但理解细胞身份的思维方式不会变。