比对率与基因表达分布:质控指标应用案例
本章我们聊个很实际的话题。你跑完一个RNA-seq项目,面对一堆FASTQ文件,第一件事做什么?我个人的习惯是先看比对率,再看基因表达分布。这两个指标放在一起,能告诉你这批数据到底能不能用,或者哪里出了幺蛾子。
说白了,比对率反映的是你的测序片段有多少能「认祖归宗」,回到参考基因组上。基因表达分布则告诉你测序过程是不是公平——有没有某几个基因占掉绝大部分reads,其他基因都被埋没。两者结合,基本能判断数据质量是否过关。
比对率:你的数据与参考基因组有多「默契」
比对率这个概念很简单:成功比对到参考基因组的reads数占总reads数的百分比。但它的实际意义非常大。我在项目中遇到过几次比对率只有50%左右的样本,后来发现是参考基因组版本选错了,或者样本本身有严重污染。
一般来讲,对于人类等模式生物,如果使用合适的比对工具,比如STAR或Hisat2,比对率应该在80%到95%之间。低于70%就要引起警觉。当然,不同样本类型会有差异。我整理了一张常见的比对率预期范围表,方便你对照:
| 样本类型 | 比对工具 | 正常比对率范围 | 备注 |
|---|---|---|---|
| 人类组织(总RNA) | STAR | 85% - 95% | 视rRNA去除效率而定 |
| 人类细胞系(mRNA) | STAR | 90% - 98% | polyA捕获纯度影响大 |
| 小鼠组织(总RNA) | STAR | 82% - 92% | 与人类接近 |
| 细菌(全转录组) | Bowtie2 | 75% - 90% | 参考基因组完整性是关键 |
| 植物(总RNA) | STAR | 70% - 85% | 多倍体时比对率偏低 |
为什么会这样?因为总RNA中还有大量rRNA和tRNA片段,如果去rRNA失败,这些read会比对到重复区域或被丢弃。mRNA方法则只抓polyA尾的转录本,所以比对率通常更高。所以对比对率的判断,要结合你的建库策略来看。
基因表达分布:一次测序的「公平性」检查
比对率过关后我通常会立刻做一件事:看基因表达的整体分布。具体来说,就是检查每个基因的count数分布情况。如果一个样本中前10个高表达基因占到了所有reads的80%以上,你得小心了——这很可能是PCR扩增偏好或测序深度不足造成的表达假象。
我记得有一次,一个肿瘤对照项目的几个样本,表达分布呈现出极端「长尾」,大部分基因只有个位数count,但有两个基因的count突破了百万。后来排查发现,建库时那几个样本的PCR循环数调高了,导致扩增严重偏好。这个案例让我意识到,只看比对率根本不够,分布曲线会泄露更多信息。
通常我使用featureCounts得到count矩阵后,会跑一个简单的R脚本来检查分布:
# 假设count_matrix是基因x样本的data.frame
# 计算每个样本的top10基因占比
top10_ratio <- apply(count_matrix, 2, function(x) {
sorted <- sort(x, decreasing = TRUE)
sum(sorted[1:10]) / sum(x)
})
# 如果某个样本top10占比超过0.6,标记为红色flag
flagged <- which(top10_ratio > 0.6)
cat("异常样本索引:", flagged, "\n")
这个脚本很简单,但非常实用。我在多个项目中用它快速筛选出有问题的样本。对了,还有一个常见的误区:不要只看单样本的分布,还要看样本间的一致性。同一处理的生物学重复,表达分布应该高度相似。如果出现一两个样本分布明显偏离,大概率是建库或测序过程出了问题。
重点理解:比对率告诉你「测到了多少」,基因表达分布告诉你「测得均不均匀」。两者缺一不可。只盯着比对率不看分布的,往往会在后续差异分析中发现假阳性——那些高表达基因其实只是PCR的「宠儿」。
两者联合诊断:一个实际案例
前面讲了些理论,现在我拿一个做过的RNA-seq质控项目当例子。这个项目有12个样本,来自人类肌肉组织,我们做的是全转录组分析。第一阶段跑完STAR比对后,有2个样本比对率分别为65%和68%,其余10个都在87%-92%之间。
我第一反应是:那两个样本可能有问题。但仔细看了比对日志后发现,它们的输入reads总数是其他样本的2倍,说明测序深度没问题。查了样品记录才发现,那2个样本在取样时被混入了少量细菌。处理方式是:重新提取RNA,重新建库。
如果你也碰到类似情况,我建议先跑一个FastQC,看看有没有接头污染或GC含量异常。然后对比基因表达分布。在我那个案例中,那2个异常样本还有另一个特征——基因表达分布中位数远高于其他样本。这是因为细菌的转录本对某些代谢基因有偏好,导致整体表达模式被带偏。
所以,当你看到比对率和表达分布都有异常时,几乎可以确定样本质量有问题。反过来,如果比对率正常但分布异常,那问题大概率出在建库或扩增环节。
常见陷阱与排查思路
总结一下我在多个项目中碰到的常见陷阱,以及对应的排查方法:
- 陷阱一:参考基因组版本不一致
- 现象:某个批次样本比对率突降10%以上
- 排查:检查比对日志中mapped和unmapped的比例分布
- 解决方案:统一参考基因组版本,重新比对
- 陷阱二:样本混合或交叉污染
- 现象:表达分布中出现不应该存在的组织特异性基因
- 排查:用基因表达谱做聚类分析,看异常样本是否单独成一簇
- 解决方案:重新取材建库
- 陷阱三:PCR扩增偏好导致的高表达基因膨胀
- 现象:前10个基因占据总reads的70%以上
- 排查:对比同一样本的不同扩增轮次是否稳定
- 解决方案:减少PCR循环数,或使用UMI扣除PCR duplicates
- 陷阱四:测序深度不均导致的部分基因缺失
- 现象:多数基因count为0,但少数基因count极高
- 排查:检查FastQC中的per-base质量分布,看末尾是否有低质量段
- 解决方案:增加测序数据量,或后期过滤低表达基因
如果实在拿不准,还有一种简单的方法:把每个样本的基因表达均值和中位数做散点图。正常样本会形成一个紧凑的椭圆区域,异常样本会明显偏离。这个技巧我屡试不爽。
另外,我记得刚入行时经常踩的一个坑是:以为比对率越高数据就越好。后来做过一次合成污染测试,就是把人类RNA和酵母RNA按不同比例混合,然后比对到人类参考基因组。结果显示,随着酵母RNA比例升高,比对率下降,但基因表达分布却出现了更多低表达的「噪声基因」。这说明,比对率无法告诉你library中有没有外来RNA,但表达分布可以。
所以,我的核心观点是:
- 比对率是第一道防线,用于快速筛选大面积异常。
- 基因表达分布是第二道防线,用于检测更隐蔽的建库偏倚和污染。
- 两道防线结合使用,能覆盖RNA-seq质控中的绝大多数问题场景。
最后,给你一个实际操作建议:建立一个固定的质控流程。每次拿到新数据,先跑比对率,再画基因表达分布图。整个过程用脚本自动化,方便批量处理。我个人的习惯是在项目目录下放一个qc_summary/文件夹,里面保存每个样本的比对率和分布图PDF,一个月后再回看,能帮你省下大量重采样的成本。
这张图展示了我推荐的联合质控流程。从原始FASTQ开始,先比对计算比对率,同时做表达定量得到count矩阵,然后评估表达分布。最后将两者的结果联合诊断,判断质控是否通过。图中的虚线反馈环是重点——当表达分布出现异常时,必须回看比对率,看是不是比对阶段出了问题。双向验证才是可靠的质控做法。