一、测序数据质控概述:为什么需要质控?FASTQ格式简介

大家好,我是今天这门课的主讲。做生物信息分析这些年,我踩过最大的坑,就是拿过来一组数据就直接跑流程。结果跑出来一堆莫名其妙的结论,然后再回头查原始数据……嗯,浪费了整整两周时间。

从那时起,我就养成了一个习惯:任何测序数据,第一步必须是质控。说白了,数据是垃圾,分析结果就是垃圾中的垃圾。这不是什么高深的理论,而是实实在在的经验。

为什么需要质控?

你想想看,测序仪不是神仙。它会产生各种各样的错误和偏差。我见过太多项目,因为忽略了这一步,最后在发表前被审稿人怼得哑口无言。

具体来说,质控要解决这么几个核心问题:

  • 测序质量波动 —— 随着测序进行,试剂消耗,质量会逐渐下降
  • 接头污染 —— 测序读长超过插入片段长度时,会读到人工接头序列
  • N碱基比例过高 —— 测序仪无法判定的碱基用 "N" 表示,过多就是质量问题
  • 重复序列 —— PCR扩增引入的duplicate,影响变异检测准确性
  • GC含量偏差 —— 与理论分布偏差过大,可能提示文库污染或偏好性

我个人习惯:拿到任何FASTQ文件,第一件事就是跑FastQC。不跑就往下走?我不放心。为什么?因为直接拿有问题的数据做比对,map率低得离谱,你还以为是参考基因组版本选错了。

质控不是可有可无的步骤。它是整个分析流程的根基。根基不稳,上面的一切都是空中楼阁。

FASTQ格式简介

说完了为什么质控,咱们得先认识一下质控的对象——FASTQ文件。这个格式你可能已经接触过,但我敢打赌,很多人的理解停留在"知道它是存测序数据的"这个层面。

FASTQ是对FASTA格式的扩展。FASTA只有序列信息和ID行,而FASTQ额外增加了质量信息。为什么要加质量?因为测序仪知道每个碱基的读取可靠性,这种信心程度就是质量值。

一个完整的FASTQ记录由四行组成:

@SEQ_ID
GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
+
!''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65

这四行,缺一不可。

行号 标识符 内容说明
第1行 @ 序列标识符,包含测序仪信息、flowcell位置、坐标等元数据
第2行 序列 实际测得的碱基序列(A/T/C/G/N)
第3行 + 分隔符,可选地包含与第1行相同的ID
第4行 质量 与第2行碱基一一对应的质量得分(ASCII编码)

一个小细节:第3行有时只写一个 "+",不带ID。但有些流程要求严格,省略ID可能导致解析报错。我建议尽量保留完整的ID行。

质量值的编码规则

第四行的质量值,很多人第一次看到时一头雾水——为什么是一堆乱码一样的符号?

原因很简单:为了节省空间。质量得分是一个数字,范围通常是0到40。直接用数字写,每个碱基就要占2个字符。用ASCII字符表示,1个字符就够了。

目前主流有两种编码方式:

编码方式 Phred质量公式 ASCII偏移量 质量值范围
Sanger / Illumina 1.8+ Q = -10 × log₁₀(P) +33 0 ~ 41(ASCII 33~74)
Illumina 1.3 ~ 1.7 Q = -10 × log₁₀(P) +64 0 ~ 40(ASCII 64~104)

其中 P 是碱基错误的概率。Q=30 意味着错误率 1/1000,也就是碱基准确率 99.9%。

Q30 = -10 × log₁₀(0.001) = 30
Q20 = -10 × log₁₀(0.01)  = 20
Q10 = -10 × log₁₀(0.1)   = 10

现在绝大多数测序平台都使用Sanger编码(Phred+33)。你可以用 ord 函数在Python中快速验证:

python3 -c "print(ord('!'), ord('5'), ord('I'))"
# 输出: 33  53  73
# 减去33后对应的质量值: 0  20  40

我曾经遇到过一个项目,数据是Illumina 1.3时代的遗留数据,别人用+33编码去解,结果质量全部偏高,导致下游过滤阈值形同虚设。识别编码版本,是质控的第一步工作。

怎么判断编码?很简单。看质量字符串的第一个和最后一个字符的ASCII码范围。如果最小值 >= 64,那就是+64编码;如果最小值是33左右(通常是"!"),那就是+33编码。

一条FASTQ记录承载了哪些信息?

除了碱基和质量,ID行里还藏了很多东西。拿一条实际的Illumina数据举例:

@EAS139:136:FC706VJ:2:2104:15343:197393 1:Y:18:ATCACG

这串看起来乱糟糟的东西,其实结构很清晰:

字段 值 含义
仪器 EAS139 测序仪唯一标识
运行号 136 该仪器上的第几次运行
Flowcell ID FC706VJ 所用的flowcell批次标识
Lane 2 该flowcell上的第几条泳道
Tile 2104 泳道内的物理块编号
X坐标 15343 簇在tile中的X位置
Y坐标 197393 簇在tile中的Y位置
配对信息 1 1=read1, 2=read2
过滤状态 Y Y=通过, N=未通过质量控制
索引号 18 多重索引编号
Barcode ATCACG 样本barcode序列

这些元信息在做质控时非常有用。比如你可以按lane或tile分组看质量分布,定位某个run或flowcell是否存在系统性偏差。

质控的整体流程

有了上面的基础,我们来画一张图,把整个质控知识体系串起来。这样你可以在脑子里形成一张完整的地图,后面学每个具体环节就不会迷路。

测序数据质控知识体系 原始FASTQ数据 1. 质量评估(FastQC) 2. 数据清洗(修剪过滤) 碱基质量分布 GC含量分布 N碱基比例 接头污染检测 是否存在质量问题? 有问题 → 数据清洗 修剪、过滤、去接头 没问题 → 进入下游分析 比对、定量、变异检测 核心原则:先评估,后决策 不要盲目过滤所有数据,也不要跳过质控直接分析 根据具体质量报告选择合理的清洗策略

这张图把整个质控流程分成了四层。从原始数据开始,先做质量评估,然后根据评估结果判断是否存在问题,最后决定是清洗数据还是直接进入下游。

你会从这门课中学到什么?

这门课一共30章,会带你掌握以下能力:

  • 读懂质控报告 —— 不只是看"通过/警告/失败",而是深刻理解每个指标的含义
  • 熟练使用质控工具 —— FastQC、MultiQC、Trimmomatic、fastp、cutadapt 等
  • 可视化复盘 —— 用Python和R把质控结果做成专业的图表
  • 制定清洗策略 —— 针对不同数据特性,选择最合适的过滤参数

在进入下一节之前,我建议你动手做一件事:找一个真实的FASTQ文件(比如SRR号下载的公开数据),用 less 或者 head -n 20 看看它的四行结构。亲手解析一下每个碱基的质量值,算一圈Q30占比。纸上得来终觉浅,这个动作会让你对后面讲的每个指标都有了实感。