基本 QC 指标逐个拆解
做单细胞空间数据,第一步不是跑聚类,而是看 QC 指标。
我刚开始接触这个领域时,拿到一个 10x 数据就急着往下分析,结果聚类出来的细胞群怎么看怎么不对劲。后来被前辈骂了一顿,才老老实实回来做 QC。
说白了,QC 就是给你的数据做个体检。这章我们把这五个核心指标聊透:UMI 计数、基因数、线粒体比例、核糖体比例、饱和度。
1. UMI 计数:你的细胞到底捕获了多少转录本?
UMI(Unique Molecular Identifier)是每个 mRNA 分子独有的条形码。一个 UMI 对应一个原始 mRNA 分子。UMI 计数就是每个细胞里检测到的转录本分子总数。
为什么看它?
- UMI 太低,说明细胞可能破裂或没捕获到足够 RNA
- UMI 太高,可能是双细胞或多细胞被当成一个细胞
我在项目中遇到过一种情况:某个样本的 UMI 分布出现中间一个驼峰,异常高。后来发现是微流控芯片堵了点,导致多个细胞挤进一个油滴。这种就得通过 UMI 阈值过滤掉。
怎么看具体数值?
我习惯用 Seurat 或 Scanpy 先跑个 violon plot 瞧瞧分布:
小技巧:用 ggplot2 叠加密度曲线比单纯 violon 更能看清异常尖峰。
2. 基因数:每个细胞检测到多少种基因?
基因数,也叫 feature count。它和 UMI 计数高度相关,但含义不同——UMI 是分子数,基因数是基因种类数。
常见的坑:
- 基因数极低的细胞:可能是空油滴或细胞碎片
- 基因数极高的细胞:双细胞,但有时也可能是巨噬细胞这种自身基因丰富的类型
我记得有一次分析肿瘤数据,发现一群基因数特别高的细胞,我本以为是双细胞要过滤掉。多看了一眼标记基因——结果是肿瘤细胞在增殖,转录活性爆表。嗯,这里要小心,不能一刀切。
警告:不要用全局固定阈值(比如基因数 < 500 就扔掉)。每个样本、每种组织类型都有自己的基线。先用样本自己的分布看,再用阈值。
3. 线粒体比例:细胞在“求救”还是正常?
线粒体比例 = 线粒体基因的 UMI 数 / 总 UMI 数。通常用百分比表示。
为什么重要?
细胞受损或凋亡时,线粒体会破裂,线粒体 mRNA 大量泄漏到细胞质中。这时候线粒体比例会飙升。一般正常细胞的线粒体比例在 5-20% 之间,具体看组织类型。
我踩过一个坑:用默认的 20% 阈值过滤某个脑组织样本,结果发现一大半细胞被过滤掉了。后来查文献才知道,神经元本身线粒体活性高,比例可能达到 30%。所以阈值要灵活调整。
计算方式参考:
# 在 Seurat 中
pbmc[["percent.mt"]] <- PercentageFeatureSet(pbmc, pattern = "^MT-")
# 在 Scanpy 中
pbmc.var["mt"] = pbmc.var_names.str.startswith("MT-")
sc.pp.calculate_qc_metrics(pbmc, qc_vars=["mt"], percent_top=None, log1p=False, inplace=True)
4. 核糖体比例:你的细胞在拼命制造蛋白吗?
核糖体比例和线粒体比例类似,只是统计的是核糖体基因。一般用 ^RP[SL] 或 ^RPL/^RPS 来匹配。
什么情况会异常高?
- 细胞处于高度增殖阶段:比如干细胞、肿瘤细胞
- 样本质量差:核糖体 RNA 降解后,其他 mRNA 丢失,核糖体基因占比被动升高
我建议把核糖体比例和线粒体比例放在一起看:
- 线粒体高 + 核糖体低 → 大概率细胞损伤
- 线粒体高 + 核糖体也高 → 可能是增殖中的细胞,需要结合其他指标
实际经验:很多分析 pipeline 默认不计算核糖体比例,但我个人习惯加上它。尤其是在空间转录组中,组织处理过程中的 RNA 降解难以避免,核糖体比例能帮你识别降解段。
5. 饱和度:你的测序深度够用吗?
饱和度也叫测序饱和度(Sequencing Saturation)。它表示分子捕获效率的极限——测了多少 reads 才检测到一个新 UMI。
计算公式:
饱和度的计算方法有很多种,10x 官方用:
饱和 reads = 1 - (unique UMI reads / total sequencing reads)
比如总 reads 1000,unique UMI 800,饱和 reads 200,饱和度 = 200/1000 = 0.2
指标解读:
- 饱和度低(< 30%):还能继续加深测序获得更多基因
- 饱和度高(> 70%):再加测序意义不大,重复 reads 很多
- 特别高(> 85%):可能文库复杂度低,或者起始 RNA 很少
我见过一个极端案例:某样品的饱和度达到 95%,但基因数却很低。后来发现是文库根本就没建好,大部分 reads 都是接头二聚体。由此可见,饱和度不能单独看,要和基因数、UMI 一起对照。
如果你拿到的是公共数据,很多文章会告诉你测序深度。但我建议你亲自算一遍饱和度,因为不同批次、不同平台的结果有差异。
一张图理解五个指标的关系
下面这个 SVG 把五个指标的核心作用和联动关系画出来了。每个节点代表一个 QC 维度,箭头表示它们如何互相影响。
把这些指标串起来:一个实际案例
去年我做了一个肝脏空间转录组数据集,先用了默认的 QC 参数:UMI 200-5000、基因 200-2500、线粒体 < 20%。结果跑完聚类,发现一群细胞在空间上挤在坏死区,而且表达大量的炎性因子。
我重新检查了 QC 指标,发现这些坏死区细胞的线粒体比例高达 40%,核糖体比例却只有 2%。明显是细胞破裂后的残留信号。我调整了阈值到线粒体 < 15%,这批假细胞就被过滤掉了,后续肿瘤免疫分析才变得可靠。
总结成一句话:QC 不是一次性工作,而是迭代过程。看到异常 cluster 后,回来重新检查这些指标,往往能找到原因。