3. 细胞质量控制核心指标:从数字到生物学直觉

做单细胞分析,第一步就是质控。这一步做不好,后面再牛的算法也救不回来。我见过太多人上来就跑流程,结果跑出来的聚类全是死细胞或空液滴。今天咱们就把几个核心指标掰开了揉碎了讲清楚。

质量控制本质上是回答三个问题:这个液滴里是不是真的有一个活细胞?细胞状态怎么样?有没有异常?答案就藏在 UMI 计数、基因检出数、线粒体比例和核糖体比例这几个数字里。

单细胞质控核心指标逻辑图 原始表达矩阵 UMI 计数 基因检出数 线粒体比例 核糖体比例 检测 mRNA 捕获效率 判断液滴内容物多少 低 → 空液滴 / 细胞死亡 反映转录组复杂度 区分细胞类型与活性 低 → 死细胞 / 双细胞 细胞应激 / 损伤标志 线粒体基因占比较高 高 → 细胞膜破损 翻译活性指示 代谢活跃细胞的标志 异常低 → 细胞状态差 四个指标联合判断 → 筛选高质量单细胞 ⚠ 常见阈值:500-1000 UMI / 200-500 基因 / <20% 线粒体

3.1 UMI 计数:你的细胞到底说了多少话

UMI,全称是 Unique Molecular Identifier。每个 mRNA 分子在反转录时都会绑上一个独特的条形码。说白了,UMI 计数就是统计这个液滴里检测到了多少个独特的 mRNA 分子。

这个数字的意义很直接——它告诉你细胞里面正在转录的基因有多少"拷贝数"。为什么在乎这个?

  • 太低(<500):很可能是个空液滴,或者细胞已经裂解到只剩碎片了。我个人习惯把下限设在 500-1000 之间,具体看平台。
  • 太高(>20000):小心双细胞!两个细胞被包在同一个液滴里,UMI 数会翻倍。我遇到过一批 10x 数据,UMI 计数分布出现了一个很长的尾巴,一看就是双细胞污染严重。
  • 太整齐:这个有点反直觉。如果所有细胞的 UMI 数都一模一样,反而可疑。真实的细胞群体,UMI 分布应该是偏态的——少数细胞转录活跃,多数细胞安静。

实际操作建议:先看密度图,找 UMI 分布的自然拐点。不要死用教科书阈值。我做过一批 PBMC 数据,拐点在 1200 左右,但同样的参数放到脑组织数据上就完全不对。

小技巧:用 Seurat 的 VlnPlot 看一下 nCount_RNA 分布。如果出现明显的多峰,特别是右侧小峰,基本可以肯定是双细胞。

3.2 基因检出数:转录组的丰富度

基因检出数很好理解——在这个细胞里,有多少种不同的基因被检测到了。它和 UMI 计数是亲戚关系,但含义不同。

UMI 多可能只是因为少数几个高表达基因在疯狂转录,比如 T 细胞的 CD3 家族。而基因检出数多,说明这个细胞的转录组复杂,各种通路都在活跃。

场景 基因检出数特征 可能解释
正常活细胞 200-5000(视细胞类型) 转录活性正常,基因表达多样性好
空液滴 <100 只有环境 RNA 污染,没有细胞
死细胞 100-300,且 UMI 低 mRNA 已降解,剩余少量片段
双细胞 异常高(比如 >6000) 两个细胞的基因集合叠加

我曾经处理过一批肝组织样本,基因检出数普遍偏低,大概只有 800-1000。一开始我还以为试剂出了问题,后来才发现是肝细胞太大,10x 微流控芯片捕获效率天然低。你想想看,同样的参数套到 PBMC 上就不合适。

3.3 线粒体比例:细胞是否还活着

这个指标很多人都在用,但真正理解它的人不多。线粒体基因(比如 MT-CO1、MT-ND2 这些)在活细胞中通常占比不高,一般在 5%-15%。

为什么会偏高?我解释给你听:

  • 细胞膜破损了,细胞质里的 mRNA 跑掉了,但线粒体是双层膜结构,更耐破损。所以留下来的 RNA 里,线粒体比例就相对升高了。
  • 真正的应激反应——有些细胞在受到压力时,会主动上调线粒体基因表达。

避坑指南:我曾经见过一批数据,线粒体比例高达 40%,用户以为是细胞死亡,结果我一看,那是心肌细胞!心肌细胞的能量需求高,线粒体比例天生就高。一定要结合细胞类型来判断阈值。

工业界常见的做法是:

# Seurat 中的质控
pbmc[["percent.mt"]] <- PercentageFeatureSet(pbmc, pattern = "^MT-")
# 过滤:线粒体比例小于 20%
pbmc <- subset(pbmc, subset = percent.mt < 20)

不过这个 20% 真的是经验值。我做过一个神经元的项目,线粒体比例超过 10% 就全是死细胞了。但换成肝细胞,25% 都还有很不错的基因表达谱。

3.4 核糖体比例:翻译活性的晴雨表

核糖体基因,就是那些编码 rRNA 和核糖体蛋白的基因。它们在细胞里有一个特点——表达量极高。一个活跃的细胞里,核糖体 RNA 可能占总 RNA 的 30%-50%。

为什么也要测它?

  • 太低了:说明细胞翻译活性很低,可能是静息期或衰老细胞。
  • 太高了:超过 60% 时,说明其他基因的表达被压制了。我遇到过几次这种情况,最后发现是测序深度不够,反而只捕获了高表达的核糖体基因。
  • 和线粒体比例对照看:如果线粒体比例高但核糖体比例低,这个细胞基本可以确定是濒死的。反过来,两者都高,可能只是细胞代谢特别旺盛。

我的个人经验:计算核糖体比例时,注意物种差异。人类用 "^RP[SL]",小鼠也是 "^RP[SL]",但植物、鱼类的基因名命名规则不同。我吃过这个亏,跑了半天发现一个核糖体都没抓到,原来是基因名没对上。

# 计算核糖体比例(人类)
pbmc[["percent.ribo"]] <- PercentageFeatureSet(pbmc, pattern = "^RP[SL]")

3.5 联合判断:别只看单一指标

做质控最忌讳的就是盯死一个指标。我见过有人只看线粒体比例,结果把一群低 UMI 但高线粒体的细胞都保留了——后来发现是空液滴污染。

正确的做法是做一个联合过滤逻辑:

# 多条件联合过滤
cells_keep <- rownames(pbmc@meta.data)[
  pbmc$nCount_RNA > 500 &
  pbmc$nCount_RNA < 20000 &
  pbmc$nFeature_RNA > 200 &
  pbmc$nFeature_RNA < 5000 &
  pbmc$percent.mt < 20 &
  pbmc$percent.ribo > 5
]

这个组合拳打下来,基本能保证你留下的细胞是高质量的单细胞悬液。我习惯在过滤后再画一个四指标的散点图矩阵,看一眼是否还有异常簇。如果还有,那就还得调。

嗯,记住一点:质控参数没有银弹。不同组织、不同平台、不同实验条件,阈值都不一样。你的目标不是套一个完美的数字,而是通过这几个指标理解你的数据到底发生了什么。当你看到线粒体比例高就想到细胞膜破损,看到 UMI 计数低就怀疑空液滴,看到基因检出数异常高就警觉双细胞——那时你就真正掌握质控了。