比对率与基因表达分布:质控指标应用案例

本章我们聊个很实际的话题。你跑完一个RNA-seq项目,面对一堆FASTQ文件,第一件事做什么?我个人的习惯是先看比对率,再看基因表达分布。这两个指标放在一起,能告诉你这批数据到底能不能用,或者哪里出了幺蛾子。

说白了,比对率反映的是你的测序片段有多少能「认祖归宗」,回到参考基因组上。基因表达分布则告诉你测序过程是不是公平——有没有某几个基因占掉绝大部分reads,其他基因都被埋没。两者结合,基本能判断数据质量是否过关。

比对率:你的数据与参考基因组有多「默契」

比对率这个概念很简单:成功比对到参考基因组的reads数占总reads数的百分比。但它的实际意义非常大。我在项目中遇到过几次比对率只有50%左右的样本,后来发现是参考基因组版本选错了,或者样本本身有严重污染。

一般来讲,对于人类等模式生物,如果使用合适的比对工具,比如STAR或Hisat2,比对率应该在80%到95%之间。低于70%就要引起警觉。当然,不同样本类型会有差异。我整理了一张常见的比对率预期范围表,方便你对照:

样本类型比对工具正常比对率范围备注
人类组织(总RNA)STAR85% - 95%视rRNA去除效率而定
人类细胞系(mRNA)STAR90% - 98%polyA捕获纯度影响大
小鼠组织(总RNA)STAR82% - 92%与人类接近
细菌(全转录组)Bowtie275% - 90%参考基因组完整性是关键
植物(总RNA)STAR70% - 85%多倍体时比对率偏低

为什么会这样?因为总RNA中还有大量rRNA和tRNA片段,如果去rRNA失败,这些read会比对到重复区域或被丢弃。mRNA方法则只抓polyA尾的转录本,所以比对率通常更高。所以对比对率的判断,要结合你的建库策略来看。

个人技巧:我建议拿到比对报告后,先看uniquely mapped比例,再看multimapped比例。如果multimapped超过15%,说明你的参考基因组可能有冗余序列,或者片段本身重复性强。这种情况在低复杂度样本中更常见。

基因表达分布:一次测序的「公平性」检查

比对率过关后我通常会立刻做一件事:看基因表达的整体分布。具体来说,就是检查每个基因的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个异常样本还有另一个特征——基因表达分布中位数远高于其他样本。这是因为细菌的转录本对某些代谢基因有偏好,导致整体表达模式被带偏。

所以,当你看到比对率和表达分布都有异常时,几乎可以确定样本质量有问题。反过来,如果比对率正常但分布异常,那问题大概率出在建库或扩增环节。

避坑指南:我曾经在两个月前吃过一次亏。一个项目里的细胞系样本,比对率都是92%以上,但差异分析始终不稳定。后来花了两周时间排查,最终发现是某个批次建库时polyA捕获效率不一致,导致不同样本之间的表达分布有微小但系统的偏移。这类问题在比对率上几乎看不出来,所以不要过分依赖单一指标。

常见陷阱与排查思路

总结一下我在多个项目中碰到的常见陷阱,以及对应的排查方法:

  1. 陷阱一:参考基因组版本不一致
    • 现象:某个批次样本比对率突降10%以上
    • 排查:检查比对日志中mapped和unmapped的比例分布
    • 解决方案:统一参考基因组版本,重新比对
  2. 陷阱二:样本混合或交叉污染
    • 现象:表达分布中出现不应该存在的组织特异性基因
    • 排查:用基因表达谱做聚类分析,看异常样本是否单独成一簇
    • 解决方案:重新取材建库
  3. 陷阱三:PCR扩增偏好导致的高表达基因膨胀
    • 现象:前10个基因占据总reads的70%以上
    • 排查:对比同一样本的不同扩增轮次是否稳定
    • 解决方案:减少PCR循环数,或使用UMI扣除PCR duplicates
  4. 陷阱四:测序深度不均导致的部分基因缺失
    • 现象:多数基因count为0,但少数基因count极高
    • 排查:检查FastQC中的per-base质量分布,看末尾是否有低质量段
    • 解决方案:增加测序数据量,或后期过滤低表达基因

如果实在拿不准,还有一种简单的方法:把每个样本的基因表达均值和中位数做散点图。正常样本会形成一个紧凑的椭圆区域,异常样本会明显偏离。这个技巧我屡试不爽。

另外,我记得刚入行时经常踩的一个坑是:以为比对率越高数据就越好。后来做过一次合成污染测试,就是把人类RNA和酵母RNA按不同比例混合,然后比对到人类参考基因组。结果显示,随着酵母RNA比例升高,比对率下降,但基因表达分布却出现了更多低表达的「噪声基因」。这说明,比对率无法告诉你library中有没有外来RNA,但表达分布可以。

所以,我的核心观点是:

  • 比对率是第一道防线,用于快速筛选大面积异常。
  • 基因表达分布是第二道防线,用于检测更隐蔽的建库偏倚和污染。
  • 两道防线结合使用,能覆盖RNA-seq质控中的绝大多数问题场景。

最后,给你一个实际操作建议:建立一个固定的质控流程。每次拿到新数据,先跑比对率,再画基因表达分布图。整个过程用脚本自动化,方便批量处理。我个人的习惯是在项目目录下放一个qc_summary/文件夹,里面保存每个样本的比对率和分布图PDF,一个月后再回看,能帮你省下大量重采样的成本。

比对率与基因表达分布联合质控流程 原始FASTQ数据 比对到参考基因组 计算比对率 表达定量(count矩阵) 评估基因表达分布 联合诊断 → 质控通过/失败 反馈: 分布异常时回检比对率, 避免误判。

这张图展示了我推荐的联合质控流程。从原始FASTQ开始,先比对计算比对率,同时做表达定量得到count矩阵,然后评估表达分布。最后将两者的结果联合诊断,判断质控是否通过。图中的虚线反馈环是重点——当表达分布出现异常时,必须回看比对率,看是不是比对阶段出了问题。双向验证才是可靠的质控做法。