
单细胞 RNA-seq 质量控制:技能亮点
Written By

技能练习生
为什么说"QC 决定了你研究的上限"
1.1 单细胞 QC 的独特挑战
挑战一:细胞质量差异极大
与传统 bulk RNA-seq 不同,单细胞数据的细胞质量呈现极端异质性:
数据示例(来自真实 PBMC 数据集):
- 高质量 T 细胞:检测到 2500 个基因,线粒体基因比例 3%
- 低质量/垂死细胞:仅检测到 200 个基因,线粒体基因比例 35%
- 空液滴(空 droplet):检测到 50 个基因,线粒体基因比例 80%
如果不进行 QC:
- 低质量细胞会形成独立的"垃圾簇",干扰聚类分析
- 高线粒体比例的细胞会掩盖真实的生物学差异
- 浪费计算资源分析无效数据
挑战二:固定阈值不适用于所有场景
常见误区:直接套用文献中的固定阈值(如 mt < 5%)
为什么这是错的?
不同组织/细胞类型的线粒体含量差异巨大:
| 组织类型 | 正常线粒体比例 | 是否需要过滤 |
|---|---|---|
| 免疫细胞(PBMC) | 3-8% | >10% 需过滤 |
| 心肌细胞 | 15-25% | >30% 才需过滤 |
| 肝细胞 | 8-15% | >20% 需过滤 |
| 肿瘤细胞 | 5-20% | 视具体类型而定 |
结论:必须基于数据本身的分布选择阈值,而非使用固定值。
挑战三:过度过滤与过滤不足的平衡
过度过滤的风险:
- 丢失稀有细胞群(如干细胞、特定亚群)
- 引入选择偏差,影响下游分析
- 低转录量细胞(如静息细胞)被误删
过滤不足的风险:
- 聚类结果混乱
- 差异表达分析不可靠
- 细胞类型注释错误
关键:采用保守的过滤策略(permissive filtering),宁可保留一些噪音,也不丢失真实信号。
1.2 QC 的三大核心维度
维度一:测序深度与基因检出
指标:
- n_counts:每细胞检测到的 UMI 总数(测序深度)
- n_genes:每细胞检测到的基因数(基因检出数)
生物学意义:
- 高质量细胞:高 n_counts + 高 n_genes
- 低质量细胞:低 n_counts + 低 n_genes(可能是破碎细胞)
- 双细胞(doublet):异常高的 n_counts + n_genes(两个细胞被误认为一个)
典型分布:
高质量 PBMC 数据:
- n_counts: 中位数 5,000-10,000
- n_genes: 中位数 1,500-2,500可视化示例:
期望分布(单峰,略右偏):
│ ╱╲
│ ╱ ╲
│ ╱ ╲_____╱
│_____╱ ╲___│
低 高 异常高
质量区 双细胞维度二:细胞活性与状态
指标:
- pct_counts_mt:线粒体基因 UMI 占比
- pct_counts_ribo:核糖体基因 UMI 占比
- pct_counts_hb:血红蛋白基因 UMI 占比(针对血液样本)
生物学意义:
| 指标 | 高比例 | 低比例 |
|---|---|---|
| 线粒体 | 细胞死亡/应激/破损 | 健康细胞 |
| 核糖体 | 高代谢活性(增殖细胞) | 静息/分化细胞 |
| 血红蛋白 | 红细胞污染(血液样本) | 正常(非血液样本) |
线粒体基因的判断标准:
- 人类:基因名以
MT-开头(如MT-CO1) - 小鼠:基因名以
mt-开头(如mt-Co1) - 其他物种:需查阅对应的前缀规则
特殊案例:
- 心肌细胞:正常线粒体比例 15-25%(能量需求高)
- 增殖细胞:核糖体比例高(蛋白质合成活跃)
维度三:技术伪影识别
常见技术问题:
-
空液滴(Empty Droplets)
- 特征:极低的 n_counts 和 n_genes
- 原因:无细胞的液滴被错误捕获
- 处理:使用
EmptyDrops算法或简单阈值过滤
-
双细胞(Doublets)
- 特征:异常高的 n_counts 和 n_genes
- 原因:两个细胞被封装在同一个液滴
- 处理:使用
Scrublet或DoubletFinder检测
-
环境 RNA(Ambient RNA)
- 特征:低质量细胞中高表达管家基因
- 原因:细胞破裂释放 RNA 被其他细胞捕获
- 处理:使用
SoupX或CellBender纠正
-
细胞周期干扰
- 特征:聚类主要由细胞周期驱动
- 原因:细胞周期基因高度表达掩盖其他差异
- 处理:回归或使用
scVI等方法校正
1.3 MAD 方法的优势
什么是 MAD?
MAD(Median Absolute Deviation,中位数绝对偏差) 是一种鲁棒的统计量,用于衡量数据的离散程度:
MAD = median(|xi - median(x)|)计算示例:
数据:[1, 2, 2, 3, 3, 4, 100] # 100 是异常值
中位数:3
MAD = median([2, 1, 1, 0, 0, 1, 97]) = 1
# 与标准差对比:
标准差 = 37.5 # 被异常值拉大
MAD = 1 # 不受异常值影响MAD 过滤策略
核心思想:将偏离中位数超过 n 个 MAD 的细胞视为异常值
# 计算阈值
median = np.median(data)
mad = np.median(np.abs(data - median))
lower_threshold = median - n_mads * mad
upper_threshold = median + n_mads * mad
# 过滤
valid_cells = (data > lower_threshold) & (data < upper_threshold)推荐参数:
- n_mads = 3:宽松过滤,保留更多细胞(本教程推荐)
- n_mads = 5:极宽松过滤,适用于数据量少或稀有细胞群
- n_mads = 2:严格过滤,适用于高置信度数据
优势对比:
| 方法 | 自适应性 | 鲁棒性 | 过滤强度 | 推荐场景 |
|---|---|---|---|---|
| 固定阈值(mt < 5%) | ❌ | ❌ | 未知 | ❌ 不推荐 |
| Z-score 方法 | ✅ | ❌(受异常值影响) | 适中 | ⚠️ 可用 |
| MAD 方法 | ✅ | ✅ | 保守(permissive) | ✅ 强烈推荐 |
| 百分位数(5%-95%) | ✅ | ⚠️ | 过严 | ⚠️ 小数据集 |
实际案例:
数据集 A(高质量 PBMC,10K 细胞):
- 固定阈值(mt < 5%):保留 8,500 细胞(丢失 15%)
- MAD(n_mads=3):保留 9,200 细胞(丢失 8%)
数据集 B(低质量肿瘤,5K 细胞):
- 固定阈值(mt < 5%):保留 1,200 细胞(丢失 76%!)
- MAD(n_mads=3):保留 3,800 细胞(丢失 24%)结论:MAD 方法在各种数据集上表现稳定,是首选策略。
1.4 QC 流程全景图
输入数据(.h5ad / .h5)
↓
┌───────────────────────┐
│ 1. 计算 QC 指标 │
│ - n_counts, n_genes │
│ - mt%, ribo%, hb% │
└───────────────────────┘
↓
┌───────────────────────┐
│ 2. 可视化数据分布 │
│ - 小提琴图 │
│ - 散点图 │
│ - 直方图 │
└───────────────────────┘
↓
┌───────────────────────┐
│ 3. 识别异常值(MAD) │
│ - 自动计算阈值 │
│ - 生成过滤 mask │
└───────────────────────┘
↓
┌───────────────────────┐
│ 4. 应用过滤 │
│ - 过滤细胞 │
│ - 过滤低表达基因 │
└───────────────────────┘
↓
┌───────────────────────┐
│ 5. 验证结果 │
│ - 检查过滤后分布 │
│ - 确保合理保留率 │
└───────────────────────┘
↓
输出高质量数据(ready for downstream analysis)1.5 常见误区与最佳实践
❌ 误区 1:过滤越严格越好
错误观念:认为应该尽可能多地过滤"可疑"细胞
问题:
- 稀有细胞群(频率 < 5%)可能被误删
- 静息细胞(低转录活性)被误认为低质量
- 数据量损失过多,影响统计功效
正确做法:
- 使用保守的阈值(n_mads = 3 或 5)
- 保留率建议 > 70%
- 检查是否丢失已知细胞类型
❌ 误区 2:套用文献中的固定阈值
错误观念:直接使用论文中报告的 QC 阈值
问题:
- 不同组织/物种的基线不同
- 不同平台(10X v2 vs v3)的分布不同
- 实验条件影响数据质量
正确做法:
- 基于数据分布选择阈值
- 使用 MAD 等自适应方法
- 参考文献但不盲从
❌ 误区 3:忽略基因层面的过滤
错误观念:只过滤细胞,不过滤基因
问题:
- 低表达基因增加噪音和计算负担
- 影响 HVG 选择和降维
正确做法:
- 过滤在 < 10-20 个细胞中表达的基因
- 或使用更宽松阈值(< 3 个细胞)保留稀有转录本
✅ 最佳实践清单
- 数据驱动:基于数据分布选择阈值,而非固定值
- 保守过滤:宁可保留一些噪音,不丢失真实信号
- 可视化检查:每次过滤后检查 QC 指标分布
- 迭代优化:首次过滤后,根据结果调整参数
- 记录决策:记录使用的阈值和理由,便于重现
- 领域知识:结合特定组织/细胞类型的生物学特性
1.6 QC 的时间投入
典型时间投入(10K 细胞数据集):
| 步骤 | 手动分析 | 自动化脚本 |
|---|---|---|
| 数据加载 | 1 分钟 | < 1 秒 |
| 计算 QC 指标 | 2 分钟 | < 1 秒 |
| 可视化检查 | 5 分钟 | 自动生成 |
| 确定阈值 | 10-15 分钟 | 自动(MAD) |
| 应用过滤 | 1 分钟 | < 1 秒 |
| 总计 | 20-25 分钟 | < 2 分钟 |
投资回报率:
- 前期投入:学习和编写 QC 脚本(2-3 小时)
- 长期收益:每次分析节省 15-20 分钟,避免重复劳动
- 质量提升:减少下游分析问题的 80%+
下一章
现在你已经理解了单细胞 QC 的核心价值和方法论,是否迫不及待想要实践?
在第二章中,我们将通过一个完整的实战案例,带你亲身体验从数据加载到质控过滤的全流程。即使你没有任何编程基础,也能在 20 分钟内完成第一次单细胞 QC。
→ 继续阅读:第二章 - 快速入门