FastQC简介与质控报告概述
做生物信息学这一行,特别是处理二代测序数据时,跑FastQC几乎成了我这几年最习惯的「第一件事」。你想想看,从测序仪下来的数据,原始得就像刚挖出来的矿石——里面有没有杂质、质量怎么样、需不需要过滤,光靠肉眼是看不出来的。FastQC就是那个照妖镜,帮你把数据质量摊开来,一目了然。
说白了,FastQC是一个轻量级的质控工具。它能快速扫描FASTQ格式的高通量测序数据,然后生成一个HTML格式的报告。我这几年经手了上百个项目,从RNA-seq到WGS,从单细胞到靶向测序,几乎没有哪个项目能跳过这一步。我记得第一次接触FastQC大概是十多年前了,那时候它还是个命令行小工具,现在已经成为行业标配了。
为什么要做质控?
说句实话,我刚入行那会儿,觉得质控报告就是测序厂家的噱头,数据有什么好看的,直接往下游分析不就行了?直到有一次,一个RNA-seq项目,差异基因结果特别奇怪,始终找不到生物学的解释。我花了整整两周去排查,最后发现是测序质量太差,很多read的Q值低于10。从那以后,我再也不敢跳过质控了。
质控能解决几个核心问题:
- 识别低质量数据——碱基错误率高的区域,说白了就是「噪声」,留着只会污染下游分析。
- 检测接头污染——测序读长如果比插入片段长,就会读到接头序列,这件事在双端测序里尤其常见。
- 评估文库复杂度——重复序列太多,意味着PCR扩增有偏好,这种数据在做变异检测时会引入系统偏差。
- 判断批次效应——同一批次不同lane的样品,如果质量差异显著,你就要警惕了。
FastQC报告的结构
FastQC的输出是一个HTML文件,里面包含了11个模块的评估结果。每一个模块都对应一个特定的质量维度。嗯,这里要注意,不是所有模块都有同等的重要性,但你最好都看一眼。
| 模块名称 | 评估内容 | 我着重的点 |
|---|---|---|
| Basic Statistics | 总读长数、读长长度、GC含量等基础统计 | GC含量偏离预期,往往意味着文库构建有问题 |
| Per base sequence quality | 每个碱基位置的Q值分布 | 前端或末端的质量下降,这个我最常关注 |
| Per sequence quality scores | 所有读长的平均Q值分布 | 如果整体偏低,肯定要做截断 |
| Per base sequence content | 每个位置的A/T/G/C比例 | 前几个碱基组成偏差,很常见但往往影响不大 |
| Per sequence GC content | 所有读长的GC含量分布 | 出现双峰分布时,大概率是污染 |
| Per base N content | 每个位置的N(未识别碱基)比例 | N比例高,说明测序质量极差 |
| Sequence Length Distribution | 读长长度的分布 | 长度不一致,大概率是建库时的片段选择问题 |
| Sequence Duplication Levels | 文库中重复序列的比例 | 重复率过高,提醒我PCR去冗余 |
| Overrepresented Sequences | 出现频率异常高的序列 | 我遇到过整条read都是poly-A的情况,是末端降解 |
| Adapter Content | 不同位置出现的接头序列比例 | 这个是必看,接头残留会干扰比对 |
| K-mer Content | 特定短序列(k-mer)的异常富集 | 偏向性扩增的指标,WGS里要特别小心 |
阈值设定的意义
你可能会问,报告看完了,然后呢?是直接过,还是该报warning,还是应该fail?这就引出了本教程的核心——阈值审计。
FastQC本身有默认的「好/尚可/差」的判定标准,但说实话,那套标准太笼统了。比如在Per base sequence quality模块,FastQC把Q值低于20的位置超过某个比例就判定为warning,可实际项目中,不同平台、不同文库类型,容忍度天差地别。我见过illumina的HiSeq数据,末端Q值掉到15都很正常;而mRNA-seq的数据,前端如果有GC偏差,往往不是问题,但WGBS的甲基化数据里,同样的偏差就可能是致命的。
所以我做审计时,从来不会全盘接受FastQC的默认阈值。每个项目我都会自己制定一套阈值规则,然后把它固化成脚本。这就是为什么我开启了这门课——帮你搞清楚到底怎么设定一套靠谱的审计阈值。
FastQC的基本用法
在讲阈值之前,先带你过一遍最基础的调用方式。这个很简单,一行命令就能搞定:
fastqc sample_R1.fastq.gz -o fastqc_output/
如果你想同时跑多个文件,用通配符就好了:
fastqc *.fastq.gz -o fastqc_output/ -t 8
这里-t 8表示用8个线程并行处理,能省下不少时间。我通常处理一个全外显子测序的FASTQ文件(大约10GB压缩后),单线程要跑20分钟左右,用8个线程能压缩到5分钟以内。
还有一些常用参数,列出来给你参考:
--nogroup:不进行碱基位置分组,适合短读长(<50bp),能提供更精细的质量分布。--contaminants:自定义污染序列库,我用它来检测建库时残留的逆转录引物。--adapters:自定义接头库,处理一些非标准接头时非常有用。
QC_DIR = ./qc_output
%.qc: %.fastq.gz
fastqc $< -o $(QC_DIR) -t 8
这个图基本概括了质控审计的完整链路。从原始FASTQ出发,经过FastQC分析,得到11个模块的量化结果,最后通过自定义阈值进行审计判定。每一个环节都有坑,后面我会一个一个给你拆解。