使用fastp对NGS数据进行质量过滤

2020-05-08 16:38:42 浏览数 (3)

欢迎关注”生信修炼手册”!

fastp是最近新出的一款NGS数据质量过滤工具,相比传统的QC工具,有两个主要特点,第一个就是运行速度快,第二个就是提供了质控前后数据详细统计结果。github地址如下

https://github.com/OpenGene/fastp

安装过程如下

代码语言:javascript复制
wget http://opengene.org/fastp/fastp
chmod a x fastp

无论是单端测序,还是双端数据,fastp都支持。对于单端数据,用-i参数指定输入的序列文件,-o参数指定输出的序列文件;对于双端数据,用-i-I分别指定R1端和R2端的序列。

该软件可以对数据进行以下几种过滤

1. 去除adapter 序列

默认情况下,该软件会自动查找序列中的adapter序列并去除,对于单端测序数据,根据起始的1M左右的reads来预测adapter序列;对于双端测序数据,根据overlap部分的reads来推测adapter序列,虽然自动化预测对于使用者而言比较方便省心,但是预测的adaper序列可能不太准确,实际使用时,建议还是自己手动指定具体的adapter序列。

单端数据,通过--adapter_sequence指定adapter序列;对于双端数据,通过--adapter_sequence--adapter_sequence_r2指定adapter序列。当手动指定adapter序列时,软件就不会自动检测了,而是按照指定的adapter序列进行查找和过滤。

如果不希望进行去除adapter序列这一步,可以添加-A或者--disable_adapter_trimming参数,这样软件就不会去除adapter序列了。

2. 过滤低质量的序列

默认情况下,会过滤掉质量较差的序列,-q参数指定碱基质量的阈值,小于该质量的碱基被认为是低质量的碱基,-u参数指定一条序列中允许的低质量碱基的百分比,取值范围从0-100,如果序列中低质量碱基百分比超过了该阈值,这条序列就会被过滤掉;-n参数指定一条序列中最多允许的N碱基的个数,如果超过这个数值,这条序列会被过滤掉。

如果不希望过滤掉低质量序列,可以添加-Q参数。

3. 根据序列长度进行过滤

默认情况下,该软件会根据长度对序列进行过滤,--length_required指定最小长度,小于该长度的reads会被过滤掉;--length_limit指定最大长度,大于该长度的reads也会被过滤掉,如果不希望进行长度过滤,可以添加-L或者--disable_length_filtering参数。

4. 去除低质量的碱基

fastp支持类似trimmomatic滑动窗口的方式,对序列中的低质量碱基进行过滤,但是它的算法运行速度更快。-W参数定义滑动窗口的长度,默认值为4,-M参数定义碱基平均质量的阈值,默认值为20。如果一个窗口内碱基平均质量低于20,该窗口及其之后的碱基都会被过滤掉。

默认情况下,是不会去除低质量碱基的,添加-3参数可以利用滑动窗口的方式从reads的3’端去除低质量的碱基。

5. 去除reads两端的部分碱基

fastp支持从reads的3’端和5’端去除固定个数的碱基,对于单端数据,-f指定从5’端去除的碱基数,-t指定从3’端去除的碱基数;对于双端数据,用-f-F参数分别指定R1序列5’端去除的碱基数,用-t-T参数分别指定R2序列3’端去除的碱基数。

6. 去除polyG/polyX

fastp支持去除序列3’端的尾巴,只有对于NextSeq/NovsSeq的数据,fastp会自动去除polyG尾,--poly_g_min_len指定ployG的最小长度,-g参数强制对所有数据去除polyG尾,-G参数禁止去除polyG尾。默认情况下,fastp不会去除polyX尾,可以添加-X参数,同时使用--poly_x_min_len指定polyX的最小长度,默认值都为10。

7. 过滤掉低复杂度的序列

fastp支持根据复杂度对序列进行过滤,序列复杂度定义如下

代码语言:javascript复制
seq = 'AAAATTTTTTTTGGGCCC'
complexity = 3/(18-1) = 17.65%

依次比较前后相连的两个碱基,统计前后碱基不同的次数,这个次数作为分母,对于上述的例子而言,就是3,分子是序列长度减一,二者的商就是序列负责度。

默认情况下,是不会根据序列复杂度进行过滤的,如果想要进行过滤,需要添加-Y参数,同时使用-y参数指定复杂度的阈值,取值范围0-100, 默认值为30,复杂度低于30%的序列会被过滤掉。

8. 根据index 对序列进行过滤

fastp支持根据index对序列进行过滤, --filter_by_index1参数指定一个index文件,该文件中每行是一个index,如果序列的index在该文件中,这条序列会被过滤掉,--filter_by_index_threshold参数指定实际index序列与检测到的index序列之间的最大错配数。

9. 对双端数据进行校正

通常情况下,reads的3’端质量较差,双端测序的数据,可以根据overlap部分的序列,对低质量的测序结果进行校正。通过添加-c参数,fastp可以校正双端测序的结果,--overlap_len_require参数指定overlap的最小碱基数,--overlap_diff_limit指定overlap区域允许的最大错配数。

10. UMI 预处理

由于文件构建过程中,存在PCR的过程, 会影响定量结果的准确性,最近出现了UMI这样的技术,本质上对未扩增之前的片段进行标记,建库之后,拥有相同UMI标记的reads来自于同一份模板,在数据分析时,可以依据这个标记对序列去冗余,使定量的结果更加准确。

fastp支持对UMI标记的序列进行预处理,添加-U参数之后,fastp就可以对UMI数据进行预处理。--umi_loc指定umi 的index 出现的位置,--umi_len指定umi index的长度。

11. 分析过表达序列

在reads中存在的过表达序列可能是adapter序列,分析过表达序列有助于我们发现测序和建库中可能出现的问题,通过添加-p参数可以使fastp进行过表达序列的分析。

在以上所有操作中,前3步默认都会执行,其他操作可以根据个人需要,进行添加。fastp支持多线程,通过-w参数指定并行的线程数。

除了输出质控后的clean reads外,fastp还可以输出jsonhtml两种格式的报告文件,-j指定json格式的报告文件,-h指定html格式的报告文件。

fastp的基本用法如下,单端数据

代码语言:javascript复制
fastp -i input.fastq  -o output.fastq  -a  ATAGCATCA  -j report.json -h report.html

双端数据

代码语言:javascript复制
fastp -i R1.fq  -o  R1.clean.fq -I R2.fq -O R2.clean.fq  -a ATAGCATCA   -a2  ATAGCATCA  -j report.json -h json.html

在报告文件中,会给出QC前后的序列统计信息, json文件示例如下

代码语言:javascript复制
"summary": {
               "before_filtering": {
                       "total_reads":90187304,
                       "total_bases":10477279513,
                       "q20_bases":9875367665,
                       "q30_bases":9314029123,
                       "q20_rate":0.942551,
                       "q30_rate":0.888974,
                       "gc_content":0.475662
               },
               "after_filtering": {
                       "total_reads":81203730,
                       "total_bases":9425595563,
                       "q20_bases":9153628470,
                       "q30_bases":8762772007,
                       "q20_rate":0.971146,
                       "q30_rate":0.929678,
                       "gc_content":0.472036
               }
       }

fastp的质量过滤功能更加的丰富,速度更快,而且报告文件给出的统计信息详尽有用,可以算得上是最强大的质控软件了。

·end·

—如果喜欢,快分享给你的朋友们吧—

0 人点赞