核心质控指标概览:常用指标介绍

做单细胞分析的第一步,就是看懂那些常见的质控指标。我刚入行时面对那一堆nFeature、nCount、percent.mt真是头大,后来踩了不少坑才摸清楚门道。这一节我们挨个捋一遍,我把每个指标的本质、经验阈值和常见陷阱都聊透。

先看一张整体关系图,方便你脑子里先搭个框架。

单细胞质控指标决策流程 原始计数矩阵 基因数 / UMI总数 低质量 / 空液滴 双细胞 线粒体比例 死亡 / 受损细胞 较高 → 过滤 核糖体比例 代谢活跃?备用 红细胞污染 Hb基因高表达 最终过滤 保留 / 剔除
整体逻辑:先看基因数和UMI把明显异常的细胞筛掉,再看线粒体比例揪出死亡细胞,最后根据组织类型决定是否处理核糖体和红细胞污染。不是所有指标都要一套固定阈值,要结合样本背景灵活调整。

基因数(nFeature_RNA)

说白了,就是每个细胞里检测到了多少种不同的基因。我习惯先看这个指标的分布,因为它直接反映细胞的复杂度和质量。

  • 正常范围:200~5000(10x数据,人/鼠)。低于200的基本是空液滴或死细胞,高于5000的可能是双细胞。
  • 为什么重要:基因数太低,后续的聚类和差异表达就没法做;太高又可能是污染。
  • 我踩过的坑:有一次一个样本的nFeature_RNA普遍只有100~300,我以为是组织太难处理,后来发现是建库时漏加了反转录酶……
# Seurat 中的可视化
VlnPlot(sce, features = "nFeature_RNA")
经验阈值:下限我一般设 200,但如果测的是纯化后的稀少细胞(如中性粒细胞),可以降到 100。上限通常设 5000,但对于容易聚集的细胞(如肿瘤细胞系),我可能会放宽到 6000。

UMI总数(nCount_RNA)

基因数管“品种”,UMI总数管“数量”。每个基因可能有多条转录本,UMI就统计了总的分子数。

  • 和基因数的关系:两者通常呈正相关,但如果某细胞nCount很高而nFeature很低,很可能是单个基因大量扩增(比如免疫细胞中某条链的过度表达)。
  • 异常情况:nCount特别高但nFeature也高 → 双细胞;nCount低但nFeature正常 → 测序深度不足。
个人习惯:我会同时画散点图,把nCount_RNA和nFeature_RNA放到一个图里,那些偏离对角线的点就是重点关注对象。
# 双指标散点图
FeatureScatter(sce, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")

线粒体基因比例(percent.mt)

这是质控里最关键的指标之一。计算方法是线粒体基因的UMI总和除以总UMI。比例过高意味着细胞膜破损,细胞质里的RNA漏出去了,只剩下核外的线粒体基因。

  • 常用阈值:10%~20%。我一般用15%作为默认值。
  • 避坑指南:我曾经处理过一个脂肪组织样本,所有细胞percent.mt都高达40%以上。起初以为是组织解离太暴力,后来发现是脂肪细胞代谢旺盛,线粒体本身比例就高。所以不能一刀切——先看看有没有一个明显的双峰分布,有的话就在谷底切。
# 计算线粒体比例(R语言)
sce[["percent.mt"]] <- PercentageFeatureSet(sce, pattern = "^MT-")

# 查看分布
hist(sce$percent.mt, breaks=50, main="线粒体比例分布")
abline(v=15, col="red", lwd=2)
注意:不同物种的线粒体基因前缀不同。人用^MT-,小鼠用^mt-(注意大小写),斑马鱼用^mt-或^MT-。做混样数据时务必核对。

核糖体基因比例

这个指标用的人相对少一点,但有时很管用。核糖体基因(如RPL/RPS)在活跃分裂的细胞中表达高,但死细胞里也会因为核糖体RNA稳定而偏高。

  • 应用场景:如果percent.mt正常但核糖体比例异常高(比如>50%),可能说明细胞处于应激状态或者样本处理过程有RNA降解。
  • 我的做法:一般不会用来过滤,而是作为一个辅助参考。如果你看到核糖体比例>60%且同时nFeature很低,那这个细胞大概率快不行了。
# 计算核糖体比例
sce[["percent.rb"]] <- PercentageFeatureSet(sce, pattern = "^RP[SL]")  # 人/小鼠通用

红细胞污染

这个指标主要针对血液或骨髓样本。红细胞本身没有核,但它们的RNA(特别是血红蛋白基因,如HBA1、HBB)会在单细胞数据中出现,因为红细胞在裂解过程中会释放RNA。

  • 怎么算:取血红蛋白基因(HBA1、HBA2、HBB、HBD等)的UMI总和除以总UMI。
  • 阈值:我通常看绝对值,如果某个细胞中血红蛋白基因占了总UMI的5%以上,我就标记为红细胞污染,准备剔除。
  • 避坑指南:我曾经在骨髓样本中发现一群细胞全部表达高水平的HBB,一开始以为是红细胞前体,后来发现是实验过程中红细胞没裂解干净。用这个指标一下就抓出来了。
# 计算红细胞污染比例
hb_genes <- grep("^HB[^(P)]", rownames(sce), value = TRUE)  # 排除HBP
sce[["percent.hb"]] <- PercentageFeatureSet(sce, features = hb_genes)
指标典型阈值常见问题建议动作
nFeature_RNA200~5000过低 → 空液滴/死细胞;过高 → 双细胞视分布调整下限,上限可放至6000
nCount_RNA通常与nFeature联动偏离对角线 → 异常表达或双细胞配合散点图检查
percent.mt10%~20%过高 → 细胞死亡/膜破损找双峰谷底切,勿死套固定值
核糖体比例一般不设硬阈值异常高 → 应激/降解辅助判断,不强制过滤
红细胞污染血红蛋白基因占比>5%骨髓/血液样本常见直接过滤,避免影响聚类
一句话总结:基因数和UMI看“有没有货”,线粒体比例看“活不活”,红细胞看“干不干净”,核糖体当参考。我每次跑完质控都会把这几个指标画在一个仪表板里,几分钟就能定位问题。

嗯,这些指标就是质控的“基本功”。你可以先用它们走一遍过滤流程,等积累了经验再去研究更高级的质控方法——比如用细胞周期基因、用机器学习做异常检测。但相信我,把上面这五个指标吃透了,90%的常见问题都逃不过你的眼。