3. FASTQ文件质量评估:FastQC的原理、运行与结果解读

拿到FASTQ文件之后,第一件事是什么?我个人习惯,不是急着比对,而是先跑一遍FastQC。这就像做饭之前先看看食材新不新鲜——如果数据本身有问题,后面的分析都是白搭。

FastQC是干啥的?说白了,它就是给测序数据做“体检”的。它会告诉你每条read的质量怎么样、GC含量正不正常、有没有接头污染、有没有过表达序列……这些指标直接决定了你的数据能不能用、怎么用。

我曾经在一次RNA-seq项目中,拿到数据就跑下游分析,结果差异基因怎么都调不出来。后来回头一看,FastQC报告里明明标了“接头污染严重”——嗯,从那以后我再也不跳过快检了。

3.1 FastQC核心原理

FastQC的工作方式其实挺直观的。它逐条读取FASTQ文件,把每个碱基的质量分数、GC含量、序列长度、重复率等信息统计出来,然后汇总成一份HTML报告。

它的核心逻辑可以用一句话概括:

  • 读取FASTQ —— 逐条处理,不修改原文件
  • 统计指标 —— 质量分布、碱基组成、GC含量、N比例、长度分布、重复序列、过表达序列、接头污染
  • 生成报告 —— 每个指标都配了图,还给了“通过/警告/失败”的评判

评判标准呢?FastQC内置了一套阈值:

模块正常(绿色)警告(黄色)失败(红色)
Per base quality全部位置中位数 > 28中位数 < 28但 > 20中位数 < 20
Per sequence quality大部分序列质量 > 28平均质量 < 28的比例 > 15%平均质量 < 28的比例 > 50%
GC content正态分布,峰值在期望GC附近稍有偏差明显偏离正态
Adapter content接头比例 < 0.1%0.1% - 1%> 1%
小提示:绿色不100%安全,红色不100%废数据。我曾遇到一个WGS样本,Per base quality全是红色,但一看是测序仪早期循环质量偏低,后续位置其实不错。红色只是提醒,不是判死刑。
FastQC质量评估流程 输入FASTQ文件 质量控制核心流程(逐条读取FASTQ) 基本信息统计 Per base quality / Per sequence quality GC content / N content 污染与重复检测 Adapter content / Overrepresented sequences Sequence duplication levels 输出HTML报告 + 评判结果

3.2 运行FastQC

安装FastQC很简单。我用的是conda环境:

conda install -c bioconda fastqc

运行方式也够直接:

fastqc sample1.fastq.gz -o ./qc_output

-o参数指定输出目录,不加的话报告就生成在当前目录。如果你想一次跑多个样本:

fastqc sample1.fastq.gz sample2.fastq.gz sample3.fastq.gz -o ./qc_output -t 4

-t是线程数,我通常设成4~8,看服务器核心数。你想想看,如果一个样本跑5分钟,32个样本用单线程跑就得两个半小时——用16线程,十几分钟搞定。

注意:跑多个文件时,FastQC会把每个文件独立生成一份报告,不会合并。批量分析时,我习惯用multiqc做汇总,后面会讲到。

还有几个有用的参数:

  • --extract:同时解压zip报告(默认不解压)
  • --nogroup:关闭碱基位置分组,查看每个位置的详细质量(但报告会变大)
  • --contaminants:指定污染序列文件,自定义检测

曾经有一次,我跑FastQC发现大量序列被标记为“overrepresented”,但查来查去不是接头。后来用--contaminants指定了自己建的污染序列库,发现是实验室的质粒污染——嗯,那次之后我再也不用默认的污染检测了。

3.3 结果解读实战

FastQC会生成两个文件:一个HTML报告和一个zip压缩包。解压后能看到每项指标的原始数据和图表。下面我挑几个核心模块,讲讲怎么看、怎么判断。

3.3.1 Per base quality (每个碱基位置的质量)

这个图是箱线图,横轴是read上的位置,纵轴是Phred质量分数。红线是中位数,蓝线是均值,黄色箱体是四分位距。

正常的数据长这样:前面质量高(Q > 30),后面慢慢下降,但始终保持在Q20以上。

如果看到了什么?

  • 整体下降趋势明显:说明测序试剂消耗严重,建议从尾部截断
  • 开头几个位置质量特低:可能是测序仪启动的不稳定,或者引物残留
  • 中间突然掉质量:这个我遇到过,一般是某个循环出了问题
注意:如果整个read的质量都很稳定但偏低(比如中位数一直Q25),先检查编码方式。有时候Phred+33和Phred+64混淆会导致误判。FastQC会自动检测,但偶尔也会出错。

3.3.2 Per sequence quality (每条序列的平均质量)

这个图展示的是每条read的平均质量分布。横轴是平均质量,纵轴是read数量。理想的图应该是单峰,峰值在高质量区(Q28~Q40)。

我看这个图有个习惯——如果峰值偏左(Q20附近)或者出现双峰,就要警惕了。双峰往往意味着混入了不同来源的数据,或者测序过程出了岔子。

3.3.3 GC content (GC含量分布)

这个模块很有意思。理论上,基因组DNA的GC含量应该呈正态分布,峰的位置由物种决定。比如人类的GC含量约41%,大肠杆菌约50%。

但有时候你会看到:

  • 多峰:可能是不同物种混在一起,或者有污染
  • 峰型偏窄:可能是PCR扩增不均匀,或者测序有偏好
  • 峰型宽但偏左/偏右:要考虑是不是有AT-rich或GC-rich序列大量的存在

我个人经验是,如果GC分布图和理论值差异太大,先别急着说污染,看看是不是文库构建时用了特定扩增方法——我做过一次全基因组扩增,GC分布就是歪的,但那并不代表数据不能用。

3.3.4 N content (N碱基比例)

N就是测序仪无法确定的碱基。如果某个位置N比例超过10%,那这个位置基本就是废的。全序列平均N比例一般不超过1%,多了就是测序质量差。

3.3.5 Sequence duplication levels (序列重复水平)

这图的横轴是重复次数,纵轴是序列占比。对于RNA-seq来说,高重复是正常的(高表达基因)。但对于DNA-seq来说,重复率过高就要考虑是不是PCR扩增偏好了。

怎么区分?我的经验是:

  • 全是单峰低重复:正常DNA-seq
  • 尾部明显抬升:可能有PCR重复
  • 整体偏高且均匀分布:可能是文库复杂度不够

3.3.6 Adapter content (接头含量)

这个模块检测的是常见的Illumina接头序列。如果接头含量超过1%,FastQC会直接标红。这时候就得用cutadapt或Trimmomatic去接头了。我曾经对接一个肿瘤WGS数据,接头含量竟然标到15%——后来发现是文库制备时双端接头的ratio没调好。

3.3.7 Overrepresented sequences (过表达序列)

这个模块会列出出现频率异常高的序列。在RNA-seq里,过表达序列可能是rRNA残留;在WGS里,可能是线粒体DNA大量富集。FastQC还会尝试匹配这些序列是否为已知的接头、引物或污染序列。

实战建议:开一个样本时,不要急着看所有模块。我一般是先看Per base quality和Adapter content,这两项决定要不要trim。如果全绿,再看GC和重复率,心里先有个底。最后才翻Overrepresented和Sequence duplication。

3.4 批量分析与报告汇总

跑完所有样本之后,手动翻几十份HTML报告太低效了。我的习惯是用MultiQC汇总所有FastQC结果:

multiqc ./qc_output --interactive

MultiQC会把所有样本的FastQC报告合并成一份交互式HTML,一个页面就能对比所有样本的质量。哪几个样本有问题、哪个模块标红了,一目了然。

记得有一次,我拿着22个肿瘤样本的MultiQC报告去开组会,老板看了一眼就说:“第三号样本质量明显不行,你们是不是搞混了?”——回去一查,果然是文库编号错了。要不怎么说数据质控不能省呢。

核心要点:
  • FastQC是FASTQ质量评估的“第一道关卡”
  • 每个模块都有对应的生物信息学意义,红色不代表废数据,绿色不代表没问题
  • 批量分析用MultiQC汇总,效率翻倍
  • 结果解读必须结合实验背景:样本类型、测序策略、文库构建方法