4. 质量分数统计指标:平均质量、中位质量、低质量比例、GC含量与质量关系

拿到一批FASTQ数据,我们总不能只靠肉眼扫一遍就下结论。质量分数这玩意儿,必须用量化的指标来评估。我习惯先看几个核心指标,它们能快速暴露数据里藏着的问题。

今天咱们就聊聊这四个统计指标:平均质量、中位质量、低质量比例,还有 GC 含量与质量的关系。说白了,就是一套组合拳,把批次数据的好坏摸透。

4.1 平均质量分数——最直接的“体温计”

平均质量,就是个老生常谈的指标。简单,也容易理解。把一个Read中所有碱基的Q值加起来,除以碱基总数,就得到这个Read的平均质量。

计算方式:

平均质量 = sum(Q1, Q2, ..., Qn) / n

嗯,但这里有个坑。我遇到过不少新手,直接用所有碱基的Q值求算术平均。其实也没错,但在批量对比时,我更喜欢用质量加权平均,或者直接看每碱基平均质量的分布曲线。

举个例子。我曾经处理一批肿瘤样本,平均质量都在Q30以上。数据经理很满意,觉得可以直接往下走。我没急着点头,把平均质量的逐循环分布图拉出来一看——前10个循环质量好得离谱,后100个循环直接跌到Q20以下。你想想看,整体平均质量被前几个循环硬生生拉高了。这个所谓“好批次”,其实后半段数据基本是废的。

所以我个人习惯:平均质量要看整体,更要看分布。一个完美的平均质量值,不代表每个位置都靠谱。

4.2 中位质量分数——比平均更抗噪

平均质量容易被极端值带偏。这时候,中位质量就派上用场了。

中位质量,就是把一个Read所有碱基的Q值排序,取中间那个值。它不受少数极差或极好的碱基影响,能更稳定地反映Read的“普遍质量水平”。

为什么要关注它?我给你们说个真实案例。有次我在评估一个低深度测序项目,发现平均质量掉到了Q28,但中位质量还在Q34。当时我挺疑惑的,拉出质量分布图一看——原来Read的5'端有几段很差的接头残留,拉低了平均值,但Read的主体部分质量其实不错。如果只看平均质量,我可能会把这个批次直接毙掉。但中位质量告诉我:别急,数据还能救。

我的建议:

计算中位质量时,最好用降序排列的Q值文件来快速获取。很多工具(如Seqtk)都能做到。我一般会写个小脚本,批量统计每个样本的中位质量,做成散点图,一眼就能看出哪些样本是“虚胖的高分”。

# 一个简单的Python片段,计算每条Read的中位质量
import numpy as np

def median_quality(qual_scores):
    """
    qual_scores: 整数列表,比如 [30, 35, 28, ...]
    """
    sorted_scores = sorted(qual_scores)
    n = len(sorted_scores)
    if n % 2 == 0:
        return (sorted_scores[n//2 - 1] + sorted_scores[n//2]) / 2
    else:
        return sorted_scores[n//2]

# 示例
read_scores = [30, 35, 38, 22, 40, 28]
print(f"中位质量: {median_quality(read_scores)}")

4.3 低质量比例——揪出数据里的“老鼠屎”

平均和中位都看完了,接下来就得问问:数据里到底有多少“烂碱基”?这就是低质量比例要回答的问题。

通常我们把Q值低于某个阈值(比如Q20)的碱基标记为低质量。然后统计整个文库或每条Read中,低质量碱基占总碱基数的比例。

注意:

低质量比例不像平均质量那么好糊弄。一条Read如果前半段全是Q40,后半段全是Q5,平均质量可能还不错,但低质量比例会直接告诉你——这条Read后半段不能用了。我在做变异检测时,尤其看重这个指标,因为它直接影响假阳性率。

我举个例子。一个WGS样本,平均质量Q32,中位质量Q34,看起来都还行。但仔细一看,低质量比例(Q<20)竟然高达8%。这意味着1亿条Read里,有800万条是“残次品”。这些Read在比对时会乱飘,产生大量配对异常和重复标记问题。

我曾经因为没留意这个指标,跑完变异检测后发现有大量假阳性位点。回头看,那些位点对应的Read基本都是低质量区间里的。从那以后,低质量比例就是我的必查项,而且我习惯用碱基数的权重而不是Read数的权重来算,更准确。

# 用碱基权重计算低质量比例
total_bases = 150 * 1000000  # 假设100万条150bp的Read
low_qual_bases = 9500000     # 低质量碱基数

low_qual_ratio = low_qual_bases / total_bases * 100
print(f"低质量比例(碱基权重): {low_qual_ratio:.2f}%")

4.4 GC含量与质量的关系——隐藏的“质量密码”

这个点很多人会忽略。GC含量跟质量有关系吗?我告诉你,关系大了去了。

先看一个现象。我在处理不同批次数据时发现,有些批次GC含量在45%~55%之间,质量曲线特别平滑。而GC含量偏低(比如低于35%)或偏高(比如高于65%)的Read,质量往往断崖式下跌。为什么会这样?

原因主要有两个:

  1. 文库构建偏差:PCR扩增阶段,GC含量极端区域更容易出现扩增偏好或失败,导致这些Read的覆盖深度骤减,测序质量也随之下降。
  2. 测序化学特性:测序时的荧光信号强度跟碱基组成有关。GC含量过高或过低都会导致信号解析困难,产生更多错误。

我记得有次跑一个宏基因组建库,样本来自极端环境,GC含量普遍偏高。跑完一看,质量分布图上出现了一个奇怪的“双峰”:40%的Read质量很好(Q35+),60%的Read质量很差(Q20左右)。后来一查,高质量的Read恰恰是GC含量正常的区间,低质量的Read都被高GC区间占据。这就是典型的GC偏差导致的质量分化。

实操检查方法:

我通常会绘制GC含量 vs 平均质量的散点图。横轴是每条Read的GC百分比,纵轴是平均质量。如果看到一条明显的“倒U型”曲线,中间高两边低,那就说明GC含量跟质量脱不了干系。这时候就要考虑是否需要调整文库构建方案或使用GC校正的比对工具。

指标汇总与批次关联思路

好了,四个指标都聊完了。现在把它们串起来,看看怎么用它们做批次关联分析。

指标 作用 批次关联应用场景
平均质量 反映整体质量水平 对比不同批次的基础质量差异
中位质量 抗极端值,反映普遍质量 快速筛选批次中的“异常Read”
低质量比例 量化不合格碱基占比 判断批次是否需要过滤、裁剪
GC含量-质量关系 揭示文库偏差导致的质量问题 识别批次是否为特定类型样本建库

在实际工作中,我一般会这样操作:先算每个样本的这四个指标,然后按批次汇总。看看不同批次间的平均质量和中位质量有没有系统性偏差。再对比低质量比例,如果某个批次的比例比其他批次高出一截,那就得警惕了。

GC含量与质量的关系我通常放在最后做,因为它的计算量略大。但一旦发现,往往能精准定位到建库环节的问题。我知道,有时一批样本质量下降,并不是测序仪的问题,而是样本本身GC含量太极端。

质量分数统计指标分析流程 原始FASTQ数据 平均质量 整体水平评估 中位质量 抗异常值评估 低质量比例 量化劣质碱基 注意分布异常 (逐循环分布) 稳定反映普遍质量 (筛选异常Read) 决定过滤条件 (低质量阈值设置) GC含量 vs 质量关系 揭示文库构建偏差 综合质量评估报告

嗯,总结一下。这四个指标就像四把尺子,从不同维度量测数据的健康度。平均质量给个大概印象,中位质量稳住重心,低质量比例揪出坏账,GC含量关系揭示深层原因。

你搞懂了它们,批次之间的质量差异就逃不出你的眼睛。说到底,数据分析的很多问题,根源都在这些最基本的质量统计上。