4. 原始数据质量评估——FastQC:从跑起来到看明白

做GATK变异检测的第一步,不是直接上比对,也不是调参数。

而是看一眼你的原始数据好不好。

我见过太多人,花了一周调GATK参数,结果问题出在原始数据上——接头没去掉、质量太差、或者某个cycle集体挂掉。

说白了,原始数据质量评估就是给整个分析流程探路。这步省了,后面全是白搭。

4.1 运行FastQC:最没技术含量但最容易被坑的一步

FastQC的安装不用我多说了,直接用conda或者下载jar包都行。我个人习惯用conda,环境干净,也好管理。

conda install -c bioconda fastqc

跑起来更简单,一行命令的事儿:

fastqc -o fastqc_out -t 4 sample_1.fastq.gz sample_2.fastq.gz

参数不多,但我提几个容易忽略的点:

  • -o:指定输出目录。不指定?文件直接扔当前目录,乱得你想哭。
  • -t:线程数。双端测序是两个文件,设置4个线程差不多。别设太少,也别设太多把服务器跑死。
  • --extract:默认不解压,只生成zip。我一般不加,因为HTML够用了。
我的经验:跑FastQC之前,检查一下fastq文件有没有损坏。我遇到过压缩包少了一块,FastQC跑一半直接崩,报错信息还不明不白。用 gzip -t 提前测一下,省得浪费时间。
gzip -t sample_1.fastq.gz

如果文件通过,再跑FastQC。我一般在批量跑之前,先抽一个样本试试,确认命令和参数没问题,再扔给集群批量跑。

4.2 质量报告解读:不是所有"Failed"都是问题

跑完之后,你会得到一堆HTML和zip文件。打开HTML,你会看到11个模块,每个模块用绿色、黄色、红色表示通过、警告、失败。

但我要说的是:别看到红色就慌。

有些模块在特定测序平台下就是会Fail,比如某些平台的末端质量确实会掉。这不是数据有问题,而是平台特性。你得结合你的实验设计和测序平台来判断。

4.2.1 碱基质量:最核心的指标

这个模块展示每个位置的碱基质量分数。我用一个真实项目的例子来说明:

假设你拿到一个报告,前10个cycle质量很高(Q>35),然后逐渐下降,最后几个cycle掉到Q20以下。这太正常了。测序反应越往后,荧光信号衰减,质量自然下降。

但如果你看到这样的情况:某个cycle突然断崖式下跌,比如cycle 50之前全是Q35+,cycle 51直接掉到Q10——这大概率是仪器问题,或者该cycle的试剂出了问题。

我曾在一个项目中遇到这种情况,当时重新跑了一遍测序才解决问题。

注意:如果整条read的质量都低于Q20,那这个样本基本废了。你想想看,Q20意味着每100个碱基就有1个错误。对于变异检测来说,这根本没法用。

4.2.2 GC含量:别被双峰骗了

GC含量分布图理论上应该是个高斯分布,中心在物种的GC含量附近。人类基因组大概41%左右。

但是!如果出现双峰,不一定就是污染。

我在项目中发现过很多次,明明是PCR重复导致的双峰,却被人当成批次效应处理了。还有一种情况是转录组数据——不同基因的表达水平差异大,也会导致GC分布异常。所以做RNA-seq的时候,GC含量双峰是常态。

真正该警惕的情况是:双峰明显偏离物种预期GC含量。比如人类样本出现35%和55%两个峰,那很可能是污染了细菌或者其他物种的DNA。

4.2.3 接头污染:Kmer分析和overrepresented sequences

FastQC通过两个模块来判断接头污染:一个是过表达序列(Overrepresented sequences),一个是Kmer分析。

我的经验是:先看Overrepresented sequences。如果报告显示比对到Illumina通用接头或你的自定义接头,那就确认接头污染了。

但是,有一类情况容易被忽略。那就是:测序长度刚好等于插入片段长度,接头根本没有出现在read里。这种情况下Overrepresented sequences模块是干净的,但Adapter Content模块如果用了默认接头库,可能会报假阳性。

所以我的建议是:跑FastQC时指定你的实际接头序列。

fastqc -o fastqc_out --adapters my_adapters.fa sample_1.fastq.gz

4.3 关键指标速查表

我整理了一个表格,方便你快速判断哪些指标需要重点关注:

指标 良好 警告 失败 我的建议
Per base sequence quality 全部Q>30 部分区域Q20-30 大段区域Q<20 低于Q20的区域直接trim掉
GC含量分布 单峰,接近理论值 轻微偏移 双峰或多峰 确认是否有PCR bias或污染
Adapter Content 0% <5% >5% 必须去接头,否则比对会出问题
Overrepresented sequences 无 <0.1% >0.1% 检查是否是真富集还是污染
Per sequence quality scores 主峰Q>30 主峰Q20-30 主峰Q<20 整体质量差的样本考虑重测

4.4 FastQC质控核心流程

下面这张图概括了FastQC质控的完整链条。你可以把它当作一个检查清单,确保每一步都不遗漏。

FastQC 质控核心流程 输入FASTQ文件 运行FastQC 生成质量报告 碱基质量 Q30占比、质量分布 GC含量 分布形状、偏移程度 接头污染 Adapter/Overrep 通过 → 下游分析 | 失败 → 处理后再跑 检查三个核心指标,综合判断

嗯,这图里其实已经包含了核心判断逻辑。你看,从输入文件到最后决策,中间只有三个关键节点:碱基质量、GC含量、接头污染。这三个通过了,你的数据基本就合格了。

4.5 避坑指南:我踩过的几个大坑

做了这么多年,有些坑实在值得单独拎出来说:

  • 坑一:FastQC版本不同,结果不同 我曾有一次升级FastQC后,同一个样本的报告从"通过"变成了"警告"。原因是新版加入了更严格的统计方法。所以做项目时,我建议固定一个版本,至少在项目期间不要升级。
  • 坑二:只看图像不看数值 有位同事问我为什么某个模块是黄色,我点开一看,数值是18%。嗯,模块的判定阈值不是死的,但具体数值才是你做决定的关键。比如Per base sequence quality模块,如果只有最后一个位置掉到Q20,而且你的read长度是150bp,那完全不用管。但如果是前50bp都掉到Q20,那就严重了。
  • 坑三:以为所有模块都是必须通过的 再次强调:Per tile sequence quality模块在Illumina某些平台下天然就会Fail。因为不同tile(或者叫lane)之间确实存在差异。只要不是极端情况,不用太纠结。
一句话总结:FastQC是质控的起点,不是终点。它告诉你数据质量如何,但具体怎么处理,还得靠你的专业判断。别被红绿灯牵着鼻子走。

4.6 实操建议:批量报告怎么看

如果你有几十个样本,一个个点开HTML看,效率太低了。

我一般用MultiQC聚合所有FastQC报告。一行命令搞定:

multiqc fastqc_out/ -o multiqc_report

MultiQC会把所有样本的11个模块汇总成一个大报告,按模块对比、按样本对比,一目了然。而且它会把所有Failed和Warning的样本标红,你一眼就能找到问题样本。

我个人习惯是先看MultiQC的"General Statistics"表格,检查每个样本的基础数据量、Q30占比、GC含量。如果有异常,再点开该样本的详细报告细看。