接上一篇,数据拆分完成后,得到FASTQ文件,下面对数据进行质控。
当前主流测序平台的数据存储格式无外乎两种,FASTQ(Illumina, MGI),BAM(Life Ion Torrent,PacBio),对于BAM文件,通常也需要先转换成FASTQ文件后再进行质控处理。
质控软件非常多,有FastQC,Cutadapt, Trimomatic等,通常需要多款软件共同配合使用,这难免过于繁琐,在实际项目中,推荐用fastp,根据官网介绍,这是一款处理FASTQ文件的all-in-one软件,质控用它就够了,下面是扩增子数据的质控命令。
|
|
参数解释:
-i $fq1
,输入样本的FASTQ1文件,可以是gz压缩格式;
-I $fq2
,输入样本的FASTQ2文件,可以是gz压缩格式;
-h ${outdir}/${sample}_merge_clean.html
,输出html格式的质控报告;
-j ${outdir}/${sample}_merge_clean.json
,输出json格式的质控报告;
-m
,合并双端reads模式,设定该参数时满足条件的双端reads会合并在一起;
--merged_out ${outdir}/${sample}_merge_clean.fastq.gz
,输出合并后的结果文件;
--failed_out ${outdir}/${sample}_failed.fastq.gz
,保存被过滤掉的reads到该文件中;
--include_unmerged
,设定该参数,未能合并的reads也包含在结果文件中,否则默认是不包含的;
--overlap_len_require 6
,合并的条件一:双端reads至少有6bp重叠;
--overlap_diff_percent_limit 20
,合并条件二:重叠区域最多允许有20%的碱基错配;
--detect_adapter_for_pe
,自动检测双端测序的接头序列并切除,默认只自动检测单端数据的接头序列;
-5
,从5'端开始滑动一个窗口,如果窗口内碱基的平均质量低于某个阈值,则剪切掉窗口内的序列,否则停止剪切;
-r
, 从5'端开始滑动一个窗口,如果窗口内碱基的平均质量低于某个阈值,则剪切掉窗口内以及其后的所有序列;
-l 20
,丢弃长度低于20bp的序列;
-n 5
,read中N碱基数不能超过5个;
-y
,低复杂度过滤;
--thead 10
,指定10条工作线程;
以上命令除了常规的剪切、过滤操作外,还进行了双端reads的合并,最终结果如下 :
|
|
通过html质控报告,可以直观地看出很多指标,如过滤前后的reads数、bases数、碱基质量、插入片段长度、碱基组成、GC含量、接头类别等,如:
此外,也可以通过编写脚本读取json报告的内容,生成个性化的质控报告。
质控知识小结
数据质控的目的是为了过滤掉那些不好的序列,从而减小对下游数据分析的干扰。
下面是一条FASTQ格式的序列,我们能对它进行些什么操作呢?主要有剪切、过滤、碱基质量校正等。
|
|
为什么要剪切read,无非是因为read中要么含有接头,要么含有低质量序列,这些信息对我们没用,甚至对分析结果造成干扰。
1.接头序列剪切
如果read中含有接头序列,则从接头开始的地方删除至read末尾。接头序列的来源可能是因为测序片段的长度低于测序的读长,从而被测通导致的,另外也不排除接头之间形成了二聚体,测出来的只有接头序列。
2.低质量序列剪切
Illumina测序仪的特性,低质量序列可能位于5'端,3'端或者read的中间,对应的处理方式有这几种:
- 从5'端开始滑动一个窗口,如果窗口内碱基的平均质量低于某个阈值,则剪切掉窗口内的序列,否则停止剪切
- 从3'端开始滑动一个窗口,如果窗口内碱基的平均质量低于某个阈值,则剪切掉窗口内的序列,否则停止剪切
- 从5'端开始滑动一个窗口,如果窗口内碱基的平均质量低于某个阈值,则剪切掉窗口内以及其后的所有序列
通过以上几种方法,就可以剪切掉5'端和3'端的低质量序列,如果低质量序列位于read中间,则剪切掉该低质量序列及其后的所有序列。
3.全局剪切
以上去掉低质量序列的方式是有条件的,需要满足一定的阈值才会进行,也可以直接剪切掉read的头部和尾部,通常做法是:
- 去掉5'端一定数量碱基
- 去掉3'端一定数据碱基
- 或者限定read的最大长度,当read的长度超过限定值时,其尾部序列会被剪切掉
4.polyG剪切
双色发光法的Illumina设备(NextSeq /NovaSeq),在没有光信号情况下base calling的结果会返回G,所以在序列的尾端可能会出现较多的polyG,需要被去除。
5.polyX
如果3'端存在polyX(如mRNA-Seq数据中的polyA),可以剪切掉。
完成了剪切,下面就是过滤了。
1.质量过滤
对于低质量reads,应直接丢弃,有如下方式:
- 按低质量碱基占read的比例,如达到40%,则过滤掉,当然需要先定义低质量碱基的阈值,如phred quality < Q15
- 按read中碱基的平均质量,如低于30,则过滤掉
2.N碱基过滤
测序过程中某个碱基无法识别时,体现在read中可能是一个大写N字母,当这样的N碱基过多时,则过滤掉该read。
3.低复杂度过滤
复杂度的定义是read中与下一个碱基不同的碱基的百分比(base[i] != base[i+1])。
|
|
这样的序列在靶向测序中,通常是不应该存在的,因此需要去除。
4.长度过滤
过滤掉太短或太长的序列:
- 长度太短,过滤掉
- 长度太长,过滤掉
此外,为了降低测序错误产生的噪声,质控时还可以对碱基的质量进行校正,通常的做法有:
1.PE数据碱基校正
当双端测序的配对reads之间有overlap并且有错配时,如果错配碱基一个质量很高,一个质量很低,则进行碱基及其质量的校正。
2.UMI标签
通过UMI标签来消除重复和测序错误,这通常在超高深度的测序数据中用到。
至此,质控部分就讲完了,下一篇介绍聚类分析。
上一篇回顾: