HD数据做细胞注释,我这段时间被折腾得够呛,今天把思路彻底理清了,赶紧写下来。
先说说背景。HD,也就是亨廷顿舞蹈症(Huntington's Disease),这类数据做单细胞转录组分析,最头疼的就是细胞注释这一关。因为HD样本通常来自患者或者疾病模型,细胞状态、比例构成和正常组织差异非常大,直接用常规流程跑,注释结果经常让人怀疑人生。我最近处理的一批HD数据,走了不少弯路,但最终把注释流程跑通了,准确率也上来了。这篇就把我的思路更新和经验教训完整盘一遍。
1. 为什么HD数据的细胞注释这么难啃
很多朋友拿到HD的单细胞数据,第一步就是套用Seurat的标准流程,FindAllMarkers跑完,拿几个经典marker一标,完事。但HD数据真不是这么玩的。
1.1 三大天然痛点
第一,组织微环境失衡。HD患者的纹状体(striatum)区域,中型多棘神经元(MSN)大量死亡,而星形胶质细胞、小胶质细胞会反应性增生。这意味着你拿到的细胞比例和正常组织完全不同,某些稀有细胞类型可能压根检测不到,而原本占大头的神经元占比骤降。如果不去管这个背景,聚类结果里的细胞群往往会被过度合并或者过度拆分。
第二,细胞状态异常。HD的病理过程会诱导细胞进入应激状态、凋亡前期状态,甚至出现异常的分化中间态。这些细胞在转录组层面既不像正常的成熟细胞,也不完全像前体细胞,marker表达是"半吊子"状态,常规注释工具很容易就丢到Unknown里去了。
第三,参考数据偏差。现在常用的注释参考集,尤其是那些基于健康组织构建的数据库,对HD样本的覆盖基本为零。用这些参考做label transfer,大概率会把疾病状态的特异性细胞群错标成邻近的细胞类型。
1.2 一个必须转变的思路
我以前也是"先聚类再注释"的思维,后来发现这个顺序在HD数据上行不通。正确的做法应该是先建立细胞类型的"预期框架",再反过来指导聚类和注释。
这是什么意思?就是说,在正式跑流程之前,先基于HD的已知病理学知识,把样本里应该存在哪些细胞类型、哪些类型有异常状态、哪些是应该重点关注的亚群,全部列出来。这个听起来好像很抽象,但实际操作中非常有用,它能帮你在后续的聚类参数调整、marker选择、注释结果校正时,始终有个判断依据。
2. 注释方案选型:三家主流思路的实测对比
现在做细胞注释,主流不外乎三种方案:人工marker注释、参考数据集label transfer、自动化注释工具。我这次三种都跑了,结论是:只信任何一种都会翻车。
2.1 人工marker注释:慢,但底线保证
人工注释的优势不用多说,免疫细胞、胶质细胞这些大类的marker非常经典,像PTPRC(CD45)标记所有免疫细胞,SLC17A7标记兴奋性神经元,GAD1/2标记抑制性神经元,AQP4标记星形胶质细胞,TMEM119标记稳态小胶质细胞。我一般在拿到聚类结果后,第一件事就是跑这些核心marker的FeaturePlot,把大类分清楚。
但问题在于,HD数据里很多细胞的marker表达会偏离正常范围。举个例子,小胶质细胞在HD里会从稳态表型转向疾病相关表型,TMEM119下调,而GPNMB、CST7这类基因上调。你要是只看TMEM119,就会把一群已经激活的小胶质细胞漏掉,甚至标成别的类型。
2.2 参考数据集label transfer:快,但容易穿帮
用SingleR或者Seurat的Anchor-based transfer,好处是快,几分钟能跑完整个数据集。我这次用的是HD相关模型数据作为参考,搭配了多个公开数据集交叉验证。
结果很能说明问题:对于正常组织中比例很高的细胞类型(比如各种T细胞亚群),label transfer的表现还行;但对HD特异性变化的细胞,比如疾病相关胶质细胞,transfer结果一塌糊涂——参考集里根本没有这个标签,算法只能硬塞一个最相近的,结果就是错标。
2.3 自动化注释工具:省力,但原生模型不能直接用
我也试过CellTypist、ScType这一类的工具。CellTypist用的是预训练模型,开箱即用,但对HD这种疾病状态,它的数据库覆盖很差。ScType需要自己输入marker列表,这个灵活度高一些,但marker列表怎么筛选是个技术活,后面我会细讲。
最后我的结论是:用ScType做初筛,用人工marker做验证,用参考transfer做交叉检查。三者取交集,才能得到相对可信的注释结果。
3. 实操细节:我到底怎么跑通的
3.1 数据预处理阶段的特殊处理
HD数据在质控阶段就要留个心眼。常规质控是按线粒体比例、基因数、UMI数划线,但HD样本里,受损伤的神经元往往线粒体比例偏高。机械地设定一个严格阈值(比如线粒体比例 >10% 全删),可能把本就不多的神经元又砍掉一大半。
我的做法是:先做一次宽松的质控(线粒体比例 < 20%),跑完初聚类之后,看哪些cluster的线粒体基因表达特别高但又有明确的细胞类型marker,再决定是保留还是去除。对于HD数据,很多时候这些"高线粒体"的细胞恰恰是疾病状态下的应激神经元,属于要关注的靶细胞群体,不能一删了之。
3.2 聚类分辨率的反复调参
聚类的resolution参数直接用默认值0.8,在HD数据上效果一般。我最后把resolution在0.4到1.5之间都试了一遍,结合前面说的"预期框架"来评估哪个参数下,细胞分群最符合病理学认知。
这里我的经验是:HD数据宁可resolution偏高,也不要偏低。因为偏低会把处于不同状态的细胞群合并到一起,比如把正常小胶质细胞和疾病相关小胶质细胞混为一群,后面注释就完全分不开了。
3.3 注释的"黄金组合拳"
我最终稳定的注释流程是这样的:
- 用Seurat标准流程跑完PCA和UMAP,先确定一个基础分辨率。
- 用ScType导入自己整理的marker列表,做一个初步的自动标注。
- 对自动标注置信度低(score不高)的cluster,手工检查FeaturePlot和DotPlot。
- 用SingleR配合多个参考数据集做交叉验证。
- 重点cluster(比如神经元亚群、胶质细胞亚群)单独提取出来做亚聚类,二次注释。
这五步走完,基本能覆盖95%以上的细胞群。剩下5%,要么是双重污染,要么是真正的未知细胞状态,我会标记为"Unknown/Transitional",而不是强行赋予一个错误标签。
4. 常见问题与排查技巧实录
4.1 问题一:某一大类细胞完全分不出来
HD数据里最常见的坑:抑制性神经元亚群(MSN)死活分不出来,或者分出来之后marker图谱一塌糊涂。
排查思路是先确认是否因为dropout率太高。HD样本中神经元往往捕获效率低,基因表达矩阵稀疏。我处理的方式是,先对MSN做一个亚聚类,然后用cluster-specific的marker重新标准化再注释。有时候把resolution调到1.2以上,MSN的D1型(DRD1阳性)和D2型(DRD2阳性)就能勉强分开。
4.2 问题二:参考transfer结果与人工注释冲突
这个几乎必然会遇到。比如SingleR把一群细胞标成"Astrocyte",但人工marker显示这群细胞还共表达小胶质细胞的标志基因。这大概率是双重污染或者细胞重叠,不是注释本身的问题。此时不能盲目信任何一方,我会用scDbFinder之类的工具做双细胞预测,或者干脆把这群细胞拆出来,看它们的top marker到底是偏向哪个方向。
4.3 问题三:marker列表不好使
ScType这类工具对marker列表的要求非常高。我从几个基因数据库拉来的marker,很多在HD数据里不是特异性表达的。后来调整策略:优先选择"细胞类型特异性强 + 表达稳定"的基因,比如以转录因子为主,因为转录因子在细胞命运决定中相对稳定,而一些细胞表面分子在应激状态下波动太大。
5. 从注释到解读:别让结果流于表面
注释做完不是终点。对于HD数据,注释结果必须反过来服务于生物学问题——你到底想找哪些细胞群在疾病中发生变化?是比例变化、状态转变、还是细胞通讯异常?
5.1 亚群比例的"假变化"陷阱
HD样本中,如果某个细胞类型比例上升,不一定是真实增多。比如神经元大量死亡后,剩余的免疫细胞在总数中占比天然变高,这是一种"分母效应"。我在汇报结果时,会同时报告绝对细胞数和相对比例两个指标,有条件的话还会用免疫荧光或者流式细胞术做外部验证。
5.2 伪时序分析的顺序洞察
注释清楚哪些是疾病相关胶质细胞、哪些是正常细胞后,可以用Monocle3做拟时序分析,把细胞状态转化的路径画出来。这个在HD研究中非常出彩——能直接展示小胶质细胞从稳态表型一步步过渡到疾病相关表型的过程。注释质量直接影响轨迹推断的可靠性,所以前面注释工作越扎实,后面分析越省心。
6. 目前的不足与可扩展方向
最后聊聊我这套流程的局限和下一步想做的事。
第一,亚群注释的颗粒度还不够。目前大方向(神经元、胶质细胞、免疫细胞)没问题,但神经元亚群、特别是MSN的D1/D2亚型区分,还是不够稳。后续想结合HD特有的病理变化,构建一个专门针对纹状体区域的参考注释集。
第二,跨数据集整合的批次效应。我测试过多个HD公开数据集,不同实验间的批次效应非常强,直接merge后注释结果漂移严重。Harmony这类整合工具能缓解,但也会抹掉部分真实生物学差异,这个平衡点还在找。
第三,我打算在拿到更多的病理验证数据后,把这套注释流程打包成一个小工具放出来,方便做HD研究但又不精通单细胞注释的朋友直接用。目前先用代码脚本维护着,等验证充分了再整理成标准pipiline。
如果这个思路对你有启发,或者你在HD数据注释上有什么独门技巧,欢迎在评论区交流,互相抄抄作业。