4、质量控制(QC)指标与过滤技巧:UMI数、基因数、线粒体比例等阈值设置
说实话,拿到Visium数据后的第一件事,不是跑聚类,而是做质控。这一步做不好,后面再花哨的分析也是白搭。我自己就踩过这个坑——有次一个样本的淋巴瘤切片,因为没卡线粒体阈值,聚类结果硬是多出一群「假缺氧」的细胞团。
4.1 三个核心质控指标
Visium的质控,盯着三个数就够了。我习惯把它们看成「体检报告」的三项核心指标:
- UMI数(Unique Molecular Identifiers):代表每个spot里捕获的mRNA分子总数。说白了,就是这个spot里「原材料」够不够多。
- 基因数(Genes per spot):检测到的独特基因种类。代表这个spot的转录组复杂度。
- 线粒体比例(Mitochondrial ratio):线粒体基因UMI占总UMI的百分比。这个值高了,往往意味着细胞受损或正在凋亡。
为什么要同时看这三个?听我慢慢讲。
我给你们画个流程图,看一眼就懂了:
4.2 UMI数的阈值怎么定?
UMI数,是第一个要看的指标。
一般我设置的最低下限是 500 UMI/spot。但这不是死的。为什么?因为不同组织、不同捕获密度的芯片,UMI分布差异很大。
| 组织类型 | 推荐UMI下限 | 典型表现 | 常见问题 |
|---|---|---|---|
| 小鼠脑组织 | 500 - 800 | 皮质层UMI较高,白质较低 | 白质区容易把低信号spot误删 |
| 人类肿瘤组织 | 1000 - 1500 | 肿瘤核心区UMI极高,间质区偏低 | 肿瘤纯度高的区域要适当降低阈值 |
| 心脏/肌肉组织 | 300 - 500 | 整体表达量偏稀疏 | 用500以下阈值要谨慎 |
我的经验:先看整体分布直方图。取对数后如果呈双峰,那低峰对应的就是空spot或背景噪声。把阈值设在两峰之间的谷底附近,效果最好。
4.3 基因数的过滤逻辑
基因数这个指标,和UMI数强相关,但又不完全一样。我举个例子:
有的spot UMI数很高,但检测到的基因种类很少。这意味着什么呢?说明这个spot里可能只有一两种细胞类型占了主导。比如肿瘤细胞克隆扩增的区域,往往只有几百个基因,但UMI数能飙到几千。
所以我的阈值通常是:
- 下限:200 ~ 500 基因/spot。低于这个值,要么是空spot,要么是组织边缘的残片。
- 一般不设上限。除非你发现某个spot基因数异常高,高到离谱——比如超过所有spot的3倍中位数绝对偏差(MAD)。这时候通常意味着双细胞污染了。
⚠️ 特别提醒:千万不要把UMI数和基因数的阈值设成独立的两套。我建议先画一张散点图——横轴是UMI数,纵轴是基因数。那些落在左下角密密麻麻的点,才是真正要过滤掉的spot。
代码里我是这样做的:
# 基于双指标联合过滤
qc_df = sc.pp.calculate_qc_metrics(adata, percent_top=None, log1p=False, inplace=False)
# 联合判断:两个指标都低于阈值才过滤,还是任一低于就过滤?
# 我个人选择「任一低于就过滤」,更保守一些
mask_low_umi = qc_df['n_counts_by_counts'] < 500
mask_low_genes = qc_df['n_genes_by_counts'] < 200
# 保留:UMI数和基因数都达标的spot
adata = adata[~(mask_low_umi | mask_low_genes), :].copy()
4.4 线粒体比例——最容易忽略的坑
线粒体比例,我在刚开始做Visium的时候基本没管过。后来有一次分析一个肝纤维化的样本,发现有一大片区域的细胞表现出「应激状态」,所有代谢相关基因都上调了。折腾了两个月,才发现是组织切片边缘的细胞在切片过程中受损了,线粒体比例高达40%。
从那天起,我就把线粒体比例作为硬指标了。
一般推荐的阈值是:
- 组织切片样本:< 20%
- 新鲜冷冻样本:< 15%
- 石蜡包埋样本:< 25%(但这个要特别小心,石蜡样本的线粒体比例本身就偏高)
为什么会这样?你想想看,组织在包埋、切片、透化过程中,细胞膜会受损。线粒体的mRNA相对稳定,不易降解,所以受损细胞的线粒体比例就会虚高。
避坑指南:千万别以为线粒体比例高就是细胞死亡了。我发现有的代谢旺盛的组织,比如棕色脂肪或者心肌,正常状态下的线粒体比例就能到15%左右。这时候盲目降阈值,会砍掉真正的生物学信号。
4.5 实战过滤策略总结
最后,我给大家整理一个我常用的阈值速查表。你可能觉得有些保守,但稳妥总比后期重跑分析要好。
| 过滤步骤 | 阈值设置 | 过滤对象 | 调整策略 |
|---|---|---|---|
| Step 1: 低UMI | UMI < 500 | 空spot、背景噪声 | 先看直方图,观察最低峰位置 |
| Step 2: 低基因 | 基因数 < 200 | 组织边缘、破碎区域 | 结合空间位置判断,避免过度删除 |
| Step 3: 高线粒体 | 线粒体比例 > 20% | 受损细胞、凋亡区域 | 根据组织类型微调:肿瘤可放宽至25% |
| Step 4 (可选): 异常高 | UMI数 > 均值+3×SD | 双细胞、异常高表达区域 | 适用于纯度高、组织结构明确的样本 |
我个人的工作流:先用较严格的阈值跑一遍,看看丢弃的spot都分布在什么位置。如果一堆丢弃的spot恰好集中在组织的某个解剖结构上——比如说脑片的皮层——那说明阈值设得太狠了,要往回放一放。反之,如果丢弃的spot随机散布,那阈值就是合理的。
嗯,质控这块咱们就聊到这儿。记住一句话:宁可多留几个可疑的spot,也别把真有生物学意义的点误删了。后面我们做降维聚类的时候,还可以用更精细的过滤来修正。但现在,保持数据的完整性更重要。