数据质控

参考: 从零开始完整学习全基因组测序数据分析:第3节 数据质控

前言

数据质控_第1张图片
碱基矿工

如上图显示,整个完整的WGS 流程一般有以下步骤:
1)获取测序数据。
2)原始测序数据的质控。
3)read比对,排序,排除重复序列。
4)index 区域重新比对。
5)碱基质量值重新校正。
6)变异检测。
7)变异结果质控和过滤。

数据质控

数据质控的意义

由测序相关的内容可知,目前主流的测序手段还是以illumina 为首的二代测序技术。

而边合成边测序,碱基的合成,依靠于DNA聚合酶。而随着合成链的不断延伸,DNA聚合酶的效率则不断下降,而特异性也会不断变差。
这也导致了二代测序的明显缺点:越到后面碱基合成的错误率越高。

正因此一般来说市面的NGS 测序手段都是小片段的读取。

除了测序的后期,由于测序仪在开始工作时也由于反应不够稳定,同样会带来质量值的变动。

数据质控_第2张图片

分析测序数据

测序数据的好坏直接影响到我们的下游分析。而不同的测序平台其错误率的图谱都是存在差异的。

因此,在分析测序数据前非常需要做到两个方面:1)原始数据的来源;2)评估对于分析的影响。

这是我们认识数据质量的第一步。了解原始数据通过何种测序平台产生,以及错误率分布、偏向性与局限性、是否会显著受GC含量的影响等。

除了查看使用的测序手段的相关资料外,最好的做法便是自己分析。

认识你的数据,不要相信你的工具。

学会认识测序数据

一般可以从下面几个方面来分析。


数据质控_第3张图片

read各个位置的碱基质量值分布

通过FASTQ 的学习,我们知道,通过shell 脚本判断,以及通过设计简单的python 代码,可以方便我们实现质量值由ASCII 码到数值的转换。

[35, 20, 17, 18, 24, 34, 35, 35, 35, 34, 35, 34, 29, 29, 32, 32, 34, 34, 33, 
 29, 33, 33, 32, 35, 35, 35, 34, 34, 34, 34, 35, 35, 34, 35, 34, 35, 34, 35, 
 34, 34, 34, 35, 35, 35, 35, 34, 33, 33, 30, 33, 24, 27]

但很显然,输入以上这般的列表,对于成千上万个碱基数目来说,显然不够直观,需要更加直观的方式——画图

没错,就像最开始的那副图一般,通过线图的方式,将质量值的变化趋势直观的表现出来。

市面上最常用的软件之一,便是FastQC。它是一个java 程序,可以同时给出多个方面的数据图,包括测序数据的QC报告等。

在做read 质量值分析时,FastQC并不单独查看具体的每条read中碱基的质量值,而是将FASTQ 文件中的所有read 数据综合到一起分析。
下图便是一个质量非常好的read 各位置碱基质量值分布。


数据质控_第4张图片
一个好的测序图

如何来解读这张图呢?

这张图的横轴是read 的碱基位置,纵轴为碱基质量值。在这个例子里,read的长度为126bp(HiSeq X10测序)。

read 上每一个位置都有一个箱型图,表示在该位置上,所有碱基的质量分布。由上图可知,除了最后一个碱基外,其他的碱基质量值均值都在30以上,且波动很小。(绿色背景表示高质量区域)

坏的测序结果也可能会很可怕


数据质控_第5张图片

不难看出,该read 各个位置质量值不仅波动大,而且很多read 的值甚至跌落到红色区域。
最好的情况是重新测序,但如果不得不使用这个数据,就要把这些低质量的数据全都去除掉才行,同时还需留意是否还存在其他的问题,但不管如何都一定会丢掉很大一部分的数据。

碱基总体质量值分布

除了各个read 值的分布外,FastQC还提供了碱基总体质量值分布。


数据质控_第6张图片

一般来说,Q20与Q30 是衡量碱基质量值的关键指标。一般来说,对于二代测序,要求达到Q20 碱基要在95%以上(不能低于90%),而Q30 碱基要在85%以上(不能低于80%)。

read 各个位置碱基分布比例

数据质控_第7张图片

了解read 各个位置碱基分布比例,目的是为了分析碱基的分离程度。

什么是碱基分离?

一般来说,碱基遵循AT、CG的配对原则,若测序过程是随机的话,则每个位置上的A与T,C与G 的比例应该是接近的。

一般来说,最好平均值偏差在1%以内,除非有合理原因(某些特定的测序需求)。

GC 含量分布图

数据质控_第8张图片

GC 含量是指 G、C 碱基数量占总碱基数量的比例。

二代测序平台会存在一定的测序偏向性,而我们可以通过GC 含量值来判定测序过程是否足够随机。

对于人类来说,基因组的GC% 一般在40%左右。

因此通过比较分布图上的GC分布与理论值的拟合,如果发现GC含量的图谱明显偏离这个值,则说明测序过程存在比较高的序列偏向性。

说明可能基因组中的某些特定序列被反复测序的几率高于平均水平,除了覆盖度会有偏离之后,将会影响下游的变异检测和CNV分析。

N含量分布图

数据质控_第9张图片

一般来说,N在测序中不应该出现。如果出现则意味着测序的光信号无法被清楚的解析。若该情况发生较多的话,往往意味着测序系统或者测序试剂的错误。

read 中有无接头序列

数据质控_第10张图片

在二代测序中提到,在构建DNA文库时,被打散的短的DNA 链会在两头修饰,加上一段接头,用于互补结合到flowcell 上,以及用于区分这些DNA 序列的来源。

当测序read 的长度大于被测序的DNA片段时,就会在read 的末尾检测到这些接头序列。

一般来说,WGS 测序都不会检测到接头序列,因为构建WGS 的文库序列一般都在几百bp,而read 的测序长度一般只有100-150bp。

但有时候在进行RNA 测序时,由于有的RNA 序列比较短(几十bp),则会比较容易出现read 中出现接头序列的情况。

FastQC 使用

可以到官网进行下载
https://www.bioinformatics.babraham.ac.uk/projects/fastqc/

数据质控_第11张图片

也可以通过命令行 使用 wget 命令。

wget https://www.bioinformatics.babraham.ac.uk/projects/fastqc/fastqc_v0.11.5.zip ./

这里推荐一个Linux 指令tree,方便查看文件结构。

小插曲 安装tree和java

参考 https://blog.csdn.net/etalien_/article/details/86361260

使用wget 下载

$ wget http://mama.indstate.edu/users/ice/tree/src/tree-1.7.0.tgz

解压

$ tar -zxvf tree-1.7.0.tgz

进入目录

$ cd tree-1.7.0

make tree

$ make

cd tree到bin目录

$ cp tree /bin

这时候我们顺便再安装一下java
参考:https://blog.csdn.net/lyhkmm/article/details/79524712

到官网找到对应安装包
下载

wget https://download.oracle.com/otn/java/jdk/8u251-b08/3d5a2bb8f8d4428bbe94aed7ec7ae784/jdk-8u251-linux-x64.tar.gz?AuthParam=1589801751_99c6e599266b8b501cc9a981b68aa5ff

创建java 文件目录

$ mkdir -p /usr/local/java

解压到文件目录

$ tar -zxvf java.tar.gz -C /usr/local/java/

添加环境变量

$ vi /etc/profile
'''
在文件中加入以下环境信息
我的java 安装版本为jdk1.8.0_251
export JAVA_HOME=/usr/local/java/jdk1.8.0_251
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
'''

重新加载配置文件

$ source /etc/profile

测试一下,成功则可以看到java 版本信息。

$ java -version

继续之前

安装完成后,进行解压就可以使用

unzip fastqc_v0.11.5.zip

再修改以下文件夹中fastqc的权限。

chmod 755 fastqc
# 这里我也不是太懂

fastqc 使用
通过-o 参数可指定FastQC 报告的输出目录。默认下,FastQC结果会输出到测序文件untreated.fq 同一目录下。

$ /path_to_fastqc/FastQC/fastqc untreated.fq -o fastqc_out_dir/

fastqc 的输出文件只有两个,一个.html和一个.zip。


除此之外,还可以同时输入多个.fq 文件。

$ /path_to_fastqc/FastQC/fastqc /path_to_fq/*.fq -o fastqc_out_dir/

除了Linux外,FastQC 也提供图形化软件。


数据质控_第12张图片

处理序列文件

由之前内容知,测序文件中可能会存在接头序列,以及read 低质量的序列,面对这些有时候不得不要对这些序列进行进一步处理。

除了自己编写一些代码以进行个性化的fq 数据过滤,还有一些现成的工具,如SOAPnuke、cutadapt、untrimmed等。还有Trimmomatic(也是一个java程序)、sickle和seqtk等比较好用的程序。

其中Trimmomatic 可以用来切除illumina 测序平台的接头序列,而且还可以去除指定的接头序列以及过滤read 末尾的低质量碱基序列。

然而sickle和seqtk,只能去除低质量的碱基。

其具体的原理是通过滑动一定长度的窗口,接着计算窗口内的碱基平均质量。如果质量过低,就直接往后全部切除。
直接全部从某个起始位置全部切除。


数据质控_第13张图片

由上可知,如果获得的fq数据中不含有这些测序接头,那么除了trimmomatic外,也可以直接使用sickle 与seqtk,而后面这两个软件处理的更快,消耗的资源也更少。

使用trimmomatic 构造序列过滤流程

首先在官网下载
http://www.usadellab.org/cms/?page=trimmomatic

数据质控_第14张图片

还是用wget下载,然后便可以进行解压。获得一个java 可执行文件。

$ wget http://www.usadellab.org/cms/uploads/supplementary/Trimmomatic/Trimmomatic-0.39.zip
$ unzip Trimmomatic-0.39.zip

通过tree 命令可以看到其结构


数据质控_第15张图片

完成后可以直接使用java 运行它。

序列文件的选择

adapters 是Trimmomatic 中非常重要的部分。

其中存放的是illumina 测序平台的接头序列(fasta序列),在实际使用中,如果需要切除头序列,则需要明确指定对应的序列作为输入参数。

那么该如何选择接头序列呢?目前的HiSeq 与MiSeq 系列使用的都是TruSeq3(上图tree 中)。而TruSeq2则是先前的GA2系列测序仪使用的,已经很少见了。

即使用的不是illumina 的测序平台, 也可以仿照Trimmomatic 中的这些adapter 文件夹下的这些文件的格式做一个新的接头序列,然后再作为参数传入。在自定义接头文件时,还需要注意一下命名的细节。

由tree 中的adapters 文件名称也能看出,Trimmomatic 有两种运行模式:PE 与SE。
而具体使用PE(pair end) 还是SE(single end)就按照具体的测序类型进行选择。

数据质控_第16张图片

PE 模式

$ java -jar /path/Trimmomatic/trimmomatic-0.39.jar PE -phred33 -trimlog logfile reads_1.fq.gz reads_2.fq.gz out.read_1.fq.gz out.trim.read_1.fq.gz out.read_2.fq.gz out.trim.read_2.fq.gz ILLUMINACLIP:/path/Trimmomatic/adapters/TruSeq3-PE.fa:2:30:10 SLIDINGWINDOW:5:20 LEADING:5 TRAILING:5 MINLEN:50

SE 模式

java -jar /path/Trimmomatic/trimmomatic-0.39.jar SE -phred33 -trimlog se.logfile raw_data/untreated.fq out.untreated.fq.gz ILLUMINACLIP:/path/Trimmomatic/adapters/TruSeq3-SE.fa:2:30:10 SLIDINGWINDOW:5:20 LEADING:5 TRAILING:5 MINLEN:50

在之前的FASTA 与FASTQ 中介绍过,质量数一般有三种体系:1)Phred33;2)Phred64;3)Solexa64。


数据质控_第17张图片

不同的质量数体系对应不同的ASCII码解析方式,也就对应着不同的质量数的计算方式。但Trimmomatic 默认采用Phred64,但目前主流的体系已经变成Phred33,所以使用时需要注意调整。

输入输出文件

通过输入

$ java -jar trimmomatic-0.39.jar

可以了解SE 与PE 用法的详情。

Usage: 
# PE 用法
       PE [-version] [-threads ] [-phred33|-phred64] [-trimlog ] [-summary ] [-quiet] [-validatePairs] [-basein  |  ] [-baseout  |    ] ...
   or: 
# SE 用法
       SE [-version] [-threads ] [-phred33|-phred64] [-trimlog ] [-summary ] [-quiet]   ...

不难看出-basein -baseout 中的basein 与baseout 可以省略。

除此之外,相比SE 模式,PE 模式的测序过程,需要指定一个文件夹用于存放被过滤掉的read 信息out.trim.read_2.fq.gz

在PE 与SE 模式的最后,还有一个重要的点,就是< Trimmer >参数的设定。该参数包括很多切除接头序列和低质量序列的细节。
1)ILLUMINACLIP:接头序列切除参数。比如TruSeq3-PE.fa:2:30:10就分别代表了TruSeq3-PE.fa是接头序列,而比对时接头序列时允许最大的错误数为2;30 指PE 的两条read 同时和PE 的adapter 序列比对时,匹配度如果超过30%,则认为该PE 的read 中包含adapter,需要被切除。而最后的10则表示,只要这条read的某部分与adpater序列有超过10%的匹配率,就代表含有adapter。
2)SLIDINGWINDOW:滑动窗口参数。SLIDINGWINDOW:5:20代表窗口长度为5,窗口中的平均质量数至少为20,否则会切除;
3)LEADING:LEADING:5规定read 开头碱基切除的阈值。
4)TRAILING:TRAILING:5规定read 末尾碱基切除的阈值。
5)MINLEN:规定read被切除后至少保留的碱基长度,如果低于该长度,则会被丢弃。
除此之外,Trimmomatic一般报错难以查询问题,但主要问题还是参数或者是语法使用的问题。

你可能感兴趣的:(数据质控)