NGS测序笔记

RNAseq005 转录组入门(5):序列比对

2020-09-02  本文已影响0人  caoqiansheng

1 比对的目的

2 RNA-Seq数据比对和DNA-Seq数据比对有什么差异

RNA-Seq不同于DNA-Seq,DNA在转录成mRNA的时候会把内含子部分去掉,所以mRNA反转的cDNA如果比对不到参考序列,会被分开,重新比对一次,判断中间是否有内含子。

3 工具抉择

在2016年的一篇综述A survey of best practices for RNA-seq data analysis,提到目前有三种RNA数据分析的策略。那个时候的工具也主要用的是TopHat,STAR和Bowtie.其中TopHat目前已经被它的作者推荐改用HISAT进行替代。
最近的Nature Communication发表了一篇题为的Gaining comprehensive biological insight into the transcriptome by performing a broad-spectrum RNA-seq analysis的文章—被称之为史上最全RNA-Seq数据分析流程,文章中在基于参考基因组的转录本分析中所用的工具,是TopHat,HISAT2和STAR,结论就是HISAT2找到junction正确率最高,但是在总数上却比TopHat和STAR少。从这里可以看出HISAT2的二类错误(纳伪)比较少,但是一类错误(弃真)就高起来。
就唯一比对而言,STAR是三者最佳的,主要是因为它不会像TopHat和HISAT2一样在PE比对不上的情况还强行把SE也比对到基因组上。而且在处理较长的read和较短read的不同情况,STAR的稳定性也是最佳的。
就速度而言,HISAT2比STAR和TopHat2平均快上2.5~100倍。

3 index下载

3.1 hisat2主页下载

http://daehwankimlab.github.io/hisat2/

image.png

http://daehwankimlab.github.io/hisat2/download/

image.png
3.2 http://ccb.jhu.edu/software.shtml

http://ccb.jhu.edu/software/hisat2/manual.shtml
ftp://ftp.ccb.jhu.edu/pub/infphilo/hisat2/data/

image.png
cd referece && mkdir index && cd index
# hg19 index
wget ftp://ftp.ccb.jhu.edu/pub/infphilo/hisat2/data/hg19.tar.gz
# hg38 index
wget ftp://ftp.ccb.jhu.edu/pub/infphilo/hisat2/data/hg38.tar.gz

将上述链接复制放入迅雷,十分钟搞定下载

4.比对alignment

4.1 说明书:https://daehwankimlab.github.io/hisat2/manual/
4.2 用法

hisat2 [options]* -x <hisat2-idx> {-1 <m1> -2 <m2> | -U <r> | –sra-acc <SRA accession number>} [-S <hit>]

-1 <m1>: 双端测序结果的第一个文件。若有多组数据,使用逗号将文件分隔。Reads的长度可以不一致。
-2 <m2>: 双端测序结果的第二个文件。若有多组数据,使用逗号将文件分隔,并且文件顺序要和-1参数对应。Reads的长度可以不一致。
-U <r>: 单端数据文件。若有多组数据,使用逗号将文件分隔。可以和-1、-2参数同时使用。Reads的长度可以不一致。
–sra-acc <SRA accession number>: 输入SRA登录号,比如SRR353653,SRR353654。多组数据之间使用逗号分隔。HISAT将自动下载并识别数据类型,进行比对。
-S <hit> : 指定输出的SAM文件。

文章中提到:Samples 9-15 are mRNA-seq to determine effect of AKAP95 knockdown in human 293 cells (9-11) or mouse ES cells (12-15).

# -t参数可以显示时间
# -x参数指定index位置:/mnt/e/bioinfo/reference/gtf/hisat2_index/hg19/,需要在路径后添加index的前缀genome,否则会报错
# -1,-2(双向测序)参数指定数据存放位置:/mnt/e/bioinfo/rna_seq/ENA_data/
# -S指定输出sam的路径,仅有三个是人基因组数据
for i in {56..58};do hisat2 -t -x /mnt/e/bioinfo/reference/gtf/hisat2_index/hg19/genome  -1 /mnt/e/bioinfo/rna_seq/ENA_data/SRR35899${i}_1.fastq.gz  -2  /mnt/e/bioinfo/rna_seq/ENA_data/SRR35899${i}_2.fastq.gz   -S  /mnt/e/bioinfo/rna_seq/rna_seq/aligned/SRR35899$i.sam;done

我的笔记本是8G内存,差不多是半小时跑完一个数据,以下为比对运行结果


image.png

Hisat2 bowtie2比对结果解读(Hisat2 Alignment summary)

5 SAMtools

Samtools是一个用于操作sam和bam格式文件的应用程序集合,具有众多的功能。 它从SAM(序列比对/映射)格式导入和导出,进行排序,合并和索引,并允许快速检索任何区域中的读数。SAM和BAM格式的比对文件主要由bwa、bowtie2、tophat和hisat2等序列比对工具产生,用于记录测序reads在参考基因组上的映射信息。其中,BAM格式文件是SAM文件的 的二进制格式,占据内存较小且运算速度更快。

5.1 语法
Program: samtools (Tools for alignments in the SAM format)
Version: 1.10 (using htslib 1.10)
Usage:   samtools <command> [options]
Commands:
  -- Indexing 索引
     dict           创建一个序列字典文件
     faidx          建立Fasta索引文件,以.fai后缀结尾
     fqidx          建立Fastq索引文件
     index          建立sam索引文件,需对bam文件进行排序后才能构建索引
  -- Editing 编辑
     calmd          重新计算MD/NM标签和'='基数
     fixmate        为以名称排序定位的alignment填入配对坐标
     reheader       替换BAM头注释
     targetcut      切割fosmid区域(仅适用于fosmid池)
     addreplacerg   添加或替换RG标签
     markdup        重复标记
  -- File operations 文件操作
     collate        根据read name信息将bam文件进行随机打散和分组
     cat            将多个bam文件合并为一个bam文件,无需对sam文件进行排序
     merge          将多个已经sort的bam文件进行合并
     mpileup        对参考基因组每个位点做碱基堆积,用于call SNP和INDEL。主要是生成BCF、VCF文件或者pileup一个或多个bam文件
     sort           对比对后的bam文件进行排序,默认按碱基位置坐标进行排序
     split          按读取组分割文件
     quickcheck     快速检查SAM/BAM/CRAM是否完整
     fastq          将BAM转换为FASTQ
     fasta          将BAM转换为FASTA
  -- Statistics 统计
     bedcov         统计给定region区间内reads的深度,每个碱基的深度叠加在一起
     coverage       统计每个碱基位点的测序深度及百分比
     depth          统计每个碱基位点的测序深度,注意计算前必须对bam文件排序并构建索引
     flagstat       统计bam文件中read的比对情况
     idxstats       统计bam索引文件里的比对信息
     phase          杂合子项
     stats          对bam文件做详细统计, 统计结果可用mics/plot-bamstats作图
  -- Viewing 查看
     flags          查看不同flag值的含义
     tview          直观地显示reads比对到参考基因组的情况,类似于基因组浏览器
     view           SAM<->BAM<->CRAM转换
     depad          将填充的BAM转换为未填充的BAM
5.2 Samtools常用命令

最常用的三板斧就是格式转换,排序,索引

5.2.1 格式转换 samtools view
5.2.1.1 用法
Usage: samtools view [options] <in.bam>|<in.sam>|<in.cram> [region ...]

Options:
  -b             输出BAM
  -C             输出CRAM (requires -T)
  -1             使用快速BAM压缩(implies -b)
  -u             未压缩的BAM输出(implies -b)
  -h             在SAM输出中包括头注释
  -H             仅打印SAM标头(无比对信息)
  -c             仅打印匹配记录的数量
  -o FILE        输出文件名[stdout]
  -U FILE        输出未过滤的reads到文件 [null]
  -t FILE        列出参考序列的名称和长度[null]
  -X             包含通用的索引文件
  -L FILE        仅包括与该BED FILE重叠的Reads [null]
  -r STR         仅包含在STR组中的Reads [null]
  -R FILE        仅包含FILE [null]中列出的读取组的Reads
  -d STR:STR     仅包含带有标签STR和关联值STR的Reads [null]
  -D STR:FILE    仅包含带有标签STR以及FILE [null]中列出的相关值的Reads
  -q INT         仅包含映射质量> = INT [0]的Reads
  -l STR         仅包括对库STR的Reads[null]
  -m INT         仅包含消耗CIGAR操作数的Reads
  -f INT         仅包括存在INT中所有FLAG的Read[0]
  -F INT         仅包括在INT中不存在任何FLAGS的Read[0] [0]
  -G INT         仅排除当前FLAGs为INT的Read [0]
  -s FLOAT       子样本读取(给定INT.FRAC选项值,0。FRAC是要保留的模板/读取对的分数; INT部分设置种子)
  -M             使用多区域迭代器(提高速度,删除重复项并按文件中的顺序输出读取结果)
  -x STR         读取标记以剥离[null]
  -B             折叠CIGAR操作
  -?             帮助,包括有关区域规范的注释
  -S             忽略(自动检测输入格式)
  --no-PG  do not add a PG line
      --input-fmt-option OPT[=VAL]                      以OPTION或OPTION = VALUE的形式指定一个输入文件格式选项
  -O, --output-fmt FORMAT[,OPT[=VAL]]...                指定输出格式(SAM,BAM,CRAM)
      --output-fmt-option OPT[=VAL]                     以OPTION或OPTION = VALUE的形式指定单个输出文件格式
  -T, --reference FILE                参考序列FASTA FILE 
  -@, --threads INT                   要使用的其他线程数[0]
      --write-index                   自动索引输出文件[关闭]
      --verbosity INT                 设置详细程度
5.2.1.2 samtools的view不仅可以进行格式转换,还可以进行数据的提取
# 提取1号染色体上1234~123456区域的以对read
samtools view SRR3589957_sorted.bam chr1:1234-123456 | head
5.2.1.3 SAM文件中FLAG值的理解

FLAG列在SAM文件的第二列,这是一个很重要的列,包含了很多mapping过程中的有用信息


image.png
### 小写的f是提取,大写的F是过滤
samtools view -f4 sample.bam sample.unmapped.sam

仅reads1没有比对成功,该提取条件包括:
该read是read1,对应于二进制FLAG的第7位,该位取1,其十进制值为64;
该read未成功比对到参考基因组,对应于二进制FLAG的第3位,该位取1,其十进制值为4;
另一配对read成功比对到参考基因组,对应于二进制FLAG的第4位,该位取0,其十进制值为8;

 # 对于取1的位点采用提取的策略,用-f参数,值设为64+4=68
 # 对于取0的位点采取过滤的策略,用-F参数,值设为8
 samtools view -u -f 68 -F 8 alignments.bam >read1_unmap.bam

仅reads2没有比对成功,该提取条件包括:
该read是read2,对应于二进制FLAG的第8位,该位取1,其十进制值为128;
该read未成功比对到参考基因组,对应于二进制FLAG的第3位,该位取1,其十进制值为4;
另一配对read成功比对到参考基因组,对应于二进制FLAG的第4位,该位取0,其十进制值为8;

# 对于取1的位点采用提取的策略,用-f参数,值设为128+4=132
# 对于取0的位点采取过滤的策略,用-F参数,值设为8
samtools view -u -f 132 -F 8 alignments.bam >read2_unmap.bam

两端reads都没有比对成功,该提取条件包括:
该read未成功比对到参考基因组,对应于二进制FLAG的第3位,该位取1,其十进制值为4;
另一配对read未成功比对到参考基因组,对应于二进制FLAG的第4位,该位取1,其十进制值为8;

# 对于取1的位点采用提取的策略,用-f参数,值设为4+8=12
$ samtools view -u -f 12 alignments.bam >pairs_unmap.bam
5.2.2 排序 samtools sort
Usage: samtools sort [options...] [in.bam]
Options:
  -l INT     设置输出文件压缩等级。0-9,0是不压缩,9是压缩等级最高。不设置此参数时,使用默认压缩等级
  -m INT     设置每个线程运行时的内存大小,可以使用K,M和G表示内存大小
  -n         设置按照read名称进行排序
  -t TAG     Sort by value of TAG. Uses position as secondary index (or read name if -n is set)
  -o FILE    设置最终排序后的输出文件名
  -T PREFIX  设置临时文件的前缀 PREFIX.nnnn.bam
  --no-PG不添加PG行
      --input-fmt-option OPT [= VAL]                      以OPTION或OPTION = VALUE的形式指定一个输入文件格式选项
  -O,--output-fmt FORMAT [,OPT [= VAL]] ...             指定输出格式(SAM,BAM,CRAM)
      --output-fmt-option OPT [= VAL]                     以OPTION或OPTION = VALUE的形式指定单个输出文件格式选项
      --reference FILE                                    参考序列FASTA FILE [null]
  -@, --threads INT               设置排序和压缩是的线程数量,默认是单线程
      --verbosity INT               Set level of verbosity

对bam文件进行排序,不能对sam文件进行排序。以leftmost coordinates的方式对比对结果进行排序,或者使用-n参数以read名称进行排序。将会添加适当的@HD-SO排序顺序标头标签或者如果有必要的话,将会更新现存的一个排序顺序标头标签。sort命令的输出默认是标准输出写入,或者使用-o参数时,指定bam文件输出名。sort命令还会在内存不足时创建临时文件tmpprefix.%d.bam。

samtools的排序方式有两种(常用)

# 默认方式,按照染色体的位置进行排序
 for i in {56..58};do samtools sort SRR35899${i}.bam -o SRR35899${i}_sorted.bam;done
# 参数-n则是根据read名进行排序。
 for i in {56..58};do samtools sort -n SRR35899${i}.bam -o SRR35899${i}_nsorted.bam;done
image.png
5.2.3 索引 samtools index
Usage: samtools index [-bc] [-m INT] <in.bam> [out.index]
Options:
  -b       创建bai索引文件,未指定输出格式时,此参数为默认参数
  -c       创建csi索引文件,默认情况下,索引的最小间隔值为2^14,与bai格式一致
  -m INT   创建csi索引文件,最小间隔值2^INT
  -@ INT   设置线程数[无]

为了能够快速访问bam文件,可以为已经基于坐标排序后bam或者cram的文件创建索引,生成以.bai或者.crai为后缀的索引文件。,必须使用排序后的文件。另外,不能对sam文件使用此命令。如果想对sam文件建立索引,那么可以使用tabix命令创建。在使用与region参数相关的其它samtools命令时,需要创建索引

# -i 参数直接用 {}就能代替管道之前的标准输出的内容
ls *sorted.bam | xargs -i samtools index {}
# 或是ls *.bam | xargs -n1  samtools index

xargs命令可参考:https://www.jianshu.com/writer#/notebooks/45449543/notes/76201605/preview

image.png
报错:默认排序可以建立index,但是按reads名排序(sort -n)无法建立index

Reference

https://www.jianshu.com/p/681e02e7f9af
https://www.jianshu.com/p/68f6e35fa4a2
https://ming-lian.github.io/2019/02/07/Advanced-knowledge-of-SAM/

上一篇 下一篇

猜你喜欢

热点阅读