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

2023-05-16

欢迎来GitHub上fork,一起进步: https://github.com/xuzhougeng

比对软件很多,首先大家去收集一下,因为我们是带大家入门,请统一用hisat2,并且搞懂它的用法。
直接去hisat2的主页下载index文件即可,然后把fastq格式的reads比对上去得到sam文件。
接着用samtools把它转为bam文件,并且排序(注意N和P两种排序区别)索引好,载入IGV,再截图几个基因看看!
顺便对bam文件进行简单QC,参考直播我的基因组系列。

前面四篇基本都算是准备工作,从这一篇开始才算进入了RNA-Seq数据分析的核心部分。

比对

比对还是不比对

在比对之前,我们得了解比对的目的是什么?RNA-Seq数据比对和DNA-Seq数据比对有什么差异?
RNA-Seq数据分析分为很多种,比如说找差异表达基因或寻找新的可变剪切。如果找差异表达基因单纯只需要确定不同的read计数就行的话,我们可以用bowtie, bwa这类比对工具,或者是salmon这类align-free工具,并且后者的速度更快。

但是如果你需要找到新的isoform,或者RNA的可变剪切,看看外显子使用差异的话,你就需要TopHat, HISAT2或者是STAR这类工具用于找到剪切位点。因为RNA-Seq不同于DNA-Seq,DNA在转录成mRNA的时候会把内含子部分去掉。所以mRNA反转的cDNA如果比对不到参考序列,会被分开,重新比对一次,判断中间是否有内含子。


工具抉择

在2016年的一篇综述A survey of best practices for RNA-seq data analysis,提到目前有三种RNA数据分析的策略。那个时候的工具也主要用的是TopHat,STARBowtie.其中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倍。

如果学习RNA-Seq数据分析,上面提到的两篇文献是必须要看上3遍以上的,而且建议每隔一段时间回顾一下。但是如果就比对工具而言,基本上就是HISAT2和STAR选一个就行。

下载index

首先,问自己一个问题,为什么比对的时候需要用到index?这里强烈建议大家去看Jimmy写的bowtie算法原理探究bowtie算法原理探究。但是只是建议,你不需要真的去看,反正你也看不懂。

高通量测序遇到的第一个问题就是,成千上万甚至上几亿条read如果在合理的时间内比对到参考基因组上,并且保证错误率在接受范围内。为了提高比对速度,就需要根据参考基因组序列,经过BWT算法转换成index,而我们比对的序列其实是index的一个子集。当然转录组比对还要考虑到可变剪切的情况,所以更加复杂。

因此我门不是直接把read回贴到基因组上,而是把read和index进行比较。人类的index一般都是有现成的,我建议大家下载现成的,我曾经尝试过用服务器自己创建index,花的时间让我怀疑人生。

cd referece && mkdir index && cd index
wget ftp://ftp.ccb.jhu.edu/pub/infphilo/hisat2/data/hg19.tar.gz
tar -zxvf hg19.tar.gz

觉得电脑配置还行的,或者是没有现成index的,可以通过HISAT2的方法进行创建

# 其实hisat2-buld在运行的时候也会自己寻找exons和splice_sites,但是先做的目的是为了提高运行效率
extract_exons.py gencode.v26lift37.annotation.sorted.gtf > hg19.exons.gtf &
extract_splice_sites.py gencode.v26lift37.annotation.gtf > hg19.splice_sites.gtf &
# 建立index, 必须选项是基因组所在文件路径和输出的前缀
hisat2-build --ss hg19.splice_sites.gtf --exon hg19.exons.gtf genome/hg19/hg19.fa hg19

我的是i7-7700处理器,内存是64G,运行的资源效率如下:


正式比对

hisat2基本用法就是hisat2 [options]* -x <hisat2-idx> {-1 <m1> -2 <m2> | -U <r> } [-S <hit>],基本就是提供index的位置,PE数据或者是SE数据存放位置。然而其他可选参数却是进阶的一大名堂。新手就用默认参数呗。

因为RNA-Seq数据是从 SRR3589957 ~ SRR3589962,6个样本的PE数据,也就是有6次循环,可以写脚本,也可以直接在命令行里运行
如下命令运行所在目录为/mnt/f/Data/,我的参考基因组的index数据存放在/mnt/f/Data/reference/index/hg19/,而RNA-seq数据存放在/mnt/f/Data/RNA-Seq下。比对结果会存放在/mnt/f/Data/RNA-Seq/aligned

mkdir -p RNA-Seq/aligned
for i in `seq 57 62`
do
    hisat2 -t -x reference/index/hg19/genome -1 RNA-Seq/SRR35899${i}_1.fastq.gz -2 SRR35899${i}_2.fastq.gz -S RNA-Seq/aligned/SRR35899${i}.sam &
done

&会把任务丢到后台,所以会同时执行这3个比对程序,如果CPU和内存承受不住,去掉&一个个来。比对这一步是非常消耗内存资源的,这是比对工具要将索引数据放入内存引起的。我有64G内存,理论上可以同时处理20个PE数据。在我的电脑配置下,大致花了2个小时同时才完成这一步.

基本参数说明

在数据比对的时候,可以安静一下读读HISAT2的额外选项,主要分为如下几块

  • 主要参数,一定要填写的内容
  • 输入选项, 对结果影响不大
  • 比对选项,主要是--n-ceil决定模糊字符的数量
  • 得分选项, 当一个read比对到不同部位时,确定那个才是最优的。基于mismatch, soft-cliping, gap得分。
  • 可变剪切比对选项, 你要决定exon,intron的长度,GT/AG的得分,还可以提供已知的可变剪切和外显子gtf文件,
  • 报告选项,确定要找多少的位置
  • PE选项, 与gap有关的参数
  • 输出选项,建议加上-t记录时间,其他就是压缩格式,不影响比对
  • SAM选项, 主要是决定SAM的header应该添加哪些内容
  • 性能选项和其他选项不考虑

: soft clipping 指的是比对的read只有部分匹配到参考序列上,还有部分没有匹配上。也就是一个100bp的read,就匹配上前面20 bp或者是后面20bp,或者是后面20bp比对的效果不太好。

因此影响比对结果就是比对选项得分选项可变剪切选项PE选项,在有生之年我应该会写一片文章介绍这些选项对结果的影响。

HISAT2输出结果

比对之后会输出如下结果,解读一下就是全部数据都是100%的,96.68%的配对数据一次都没有比对,1.23%的数据比是唯一比对,2.09%是多个比对。然后96.68%一次都没有比对的数据,如果不按照顺序来,有0.05%的比对。之后把剩下的部分用单端数据进行比对的话,95.20%数据没比对上,3.60%的数据比对一次,1.20%比对超过一次。零零总总的加起来是8%的比对!!!


这个总体比对率让我开始怀疑人生,怎么可能呀,我翻了翻输出记录,发现有几个结果的比对率超过90%呀。我思索了片刻,惊醒这个实验好像是用人类和小鼠都做了一遍。于是又去GEO上查了一下记录,恍然大悟,差点翻车。

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

同时我反思了一下出错的原因,我默认这个实验是KO和非KO各3个重复,其实文章的实验设计并不是如此,可见理解实验设计很重要,于是我把数据下载这一部分进行了完善。

mkdir -p RNA-Seq/aligned
for i in `seq 56 58`
do
    hisat2 -t -x reference/index/hg19/genome -1 RNA-Seq/SRR35899${i}_1.fastq.gz -2 SRR35899${i}_2.fastq.gz -S RNA-Seq/SRR35899${i}.sam &
done

如上是修改后的代码

SAMtools三板斧

SAM(sequence Alignment/mapping)数据格式是目前高通量测序中存放比对数据的标准格式,当然他可以用于存放未比对的数据。所以,SAM的格式说明

而目前处理SAM格式的工具主要是SAMTools,这是Heng Li大神写的.除了C语言版本,还有Java的Picard,Python的Pysam,Common lisp的cl-sam等其他版本。SAMTools的主要功能如下:

  • view: BAM-SAM/SAM-BAM 转换和提取部分比对
  • sort: 比对排序
  • merge: 聚合多个排序比对
  • index: 索引排序比对
  • faidx: 建立FASTA索引,提取部分序列
  • tview: 文本格式查看序列
  • pileup: 产生基于位置的结果和 consensus/indel calling

最常用的三板斧就是格式转换,排序,索引。而进阶教程就是看文档提高。

for i in `seq 56 58`
do
    samtools view -S SRR35899${i}.sam -b > SRR35899${i}.bam
    samtools sort SRR35899${i}.bam -o SRR35899${i}_sorted.bam
    samtools index SRR35899${i}_sorted.bam
done

  • -S是最新版samtools为了兼容以前版本写的,所以可以省去
  • 0.1.19版本和最新版有比较大差别,请注意版本

Jimmy说样我们仔细判断sam排序两种方式的不同,因此我截取前面100行数据,分别排序然后查看结果。

head -1000 SRR3589957.sam > test.sam
samtools view -b  test.sam > test.bam
samtools view test.bam | head

默认排序是根据染色体位置

samtools sort test.bam default
samtools view default.bam | head

Sort alignments by leftmost coordinates, or by read name when -n is used

samtools sort -n test.bam sort_left
samtools view sort_left.bam | head

也就说说默认按照染色体位置进行排序,而-n参数则是根据read名进行排序。当然还有一个-t 根据TAG进行排序。

说说samtools view

三板斧的view是一个非常实用的子命令,除了之前的格式转换以外,还能进行数据提取和提取。
比如说提取1号染色体1234-123456区域的比对read

samtools view SRR3589957_sorted.bam chr1:1234-123456 | head


在比如搭配 flag(0.1.19版本没有)和 flagstat,使用 -f-F参数提取不同匹配情况的read。
flag是一种描述read比对情况的标记,一种12种,可以搭配使用。

0x1    PAIRED    paired-end (or multiple-segment) sequencing technology
0x2    PROPER_PAIR    each segment properly aligned according to the aligner
0x4    UNMAP    segment unmapped
0x8    MUNMAP    next segment in the template unmapped
0x10    REVERSE    SEQ is reverse complemented
0x20    MREVERSE    SEQ of the next segment in the template is reverse complemented
0x40    READ1    the first segment in the template
0x80    READ2    the last segment in the template
0x100    SECONDARY    secondary alignment
0x200    QCFAIL    not passing quality controls
0x400    DUP    PCR or optical duplicate
0x800    SUPPLEMENTARY    supplementary alignment

可以先用flagstat看下总体情况

samtools flagstat SRR3589957_sorted.bam

也就是说如果我想用samtools筛选恰好配对的read,就需要用0x10

samtools view -b -f 0x10 SRR3589957_sorted.bam chr1:1234-123456  > flag.bam
samtools flagstat flag.bam

我应该会在有生之年写一篇文章好好介绍samtools。

比对质控(QC)

还是在A survey of best practices for RNA-seq data analysis里面,提到了人类基因组应该有70%~90%的比对率,并且多比对read(multi-mapping reads)数量要少。另外比对在外显子和所比对链(uniformity of read coverage on exons and the mapped strand)的覆盖度要保持一致。

常用工具有

  • Picard https://broadinstitute.github.io/picard/
  • RSeQC http://rseqc.sourceforge.net/
  • Qualimap http://qualimap.bioinfo.cipf.es/

我们就用RSeQC吧,毕竟使用python写的工具,天生的亲切感,而且安装非常方便。

# Python2.7环境下
pip install RSeQC

一共有如下几个文件,根据命名就知道功能是啥了。

  • bam2fq.py
  • bam2wig.py
  • bam_stat.py
  • clipping_profile.py
  • deletion_profile.py
  • divide_bam.py
  • FPKM_count.py
  • geneBody_coverage.py
  • geneBody_coverage2.py
  • infer_experiment.py
  • inner_distance.py
  • insertion_profile.py
  • junction_annotation.py
  • junction_saturation.py
  • mismatch_profile.py
  • normalize_bigwig.py
  • overlay_bigwig.py
  • read_distribution.py
  • read_duplication.py
  • read_GC.py
  • read_hexamer.py
  • read_NVC.py
  • read_quality.py
  • RNA_fragment_size.py
  • RPKM_count.py
  • RPKM_saturation.py
  • spilt_bam.py
  • split_paired_bam.py
  • tin.py

先对bam文件进行统计分析, 从结果上看是符合70~90的比对率要求。

bam_stat.py -i SRR3589956_sorted.bam

基因组覆盖率的QC需要提供bed文件,可以直接RSeQC的网站下载,或者可以用gtf转换

read_distribution.py -i RNA-Seq/aligned/SRR3589956_sorted.bam -r reference/hg19_RefSeq.bed

IGV查看

载入参考序列,注释和BAM文件,随便看看吧。

最后请允许我给自己的小密圈打个广告,如果你非常支持我的创作,想和我保持联系的话。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转录组入门(5): 序列比对 的相关文章

随机推荐

  • ClearCanvas DICOM 开发系列 一

    概述 C 开源的DICOM server 支持影像处理 影像归档 影像管理 影像传输和影像浏览功能 开源代码可学习地方很多 官方网站 http www clearcanvas ca building ImageViewer 的代码 1 打开
  • spark dataFrame withColumn

    说明 xff1a withColumn用于在原有DF新增一列 1 初始化sqlContext val sqlContext 61 new org apache spark sql SQLContext sc 2 导入sqlContext隐式
  • 我凭什么为美国人买单?(转)

    香港一个朋友的妈妈是我见到过最忠诚的股迷 xff0c 老太太做了一辈子的护士 xff0c 八九年退休后成了专业股迷 xff0c 只要开市风雨不误去银行大厅炒股机前上班 老太太炒股同别人不同 xff0c 她只炒一只股 xff0c 那就是香港股
  • postgresql 清空数据表数据

    在 mysql中 xff0c 只需要执行 xff1a TRUNCATE table name 即可 xff0c 数据会情况 xff0c 而且自增id也会变回0 xff1b 但在 postgresql 则稍有不同 xff0c 因为 postg
  • 适合初学者小白的10本Python书籍,你值得收藏

    我会经常分享一本书 你看完如果对你有帮助 xff0c 值得你购买 xff0c 请到官网购买正版书籍 声明 xff1a 我不是卖书的 xff0c 我搞得是Python技术 xff0c 文章最后免费为你准备了一些Python资料 Python是
  • Rust开发操作系统系列:从零制作x86_64位系统

    Rust开发操作系统系列 xff1a 从零制作x86 64位系统 在发表这个文章之前 xff0c 我曾发布过另一篇文章 xff1a Rust开发操作系统系列 xff1a 全新Hello World系统 那篇文章我发布在云栖社区以及我自己的博
  • 莫名其妙报module 'urllib' has no attribute 'request'的解决方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 以前在pycharm下运行好好的程序 xff0c 今天就加了两个log xff0c 莫名其妙报错说urllib下找不到request 报错 xff1a module 39
  • 【NativeScript Vue 2019--中文字幕】精通原生手机UI之路

    在NativeScript原生手机app开发里 xff0c 其中的UI界面就跟我们常用的html 或blade模板 或vue的普通template不一样了 xff0c 其中就有很多值得警惕的了 xff0c 有的方式是好的 xff0c 可以提
  • SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    该项目源码地址 xff1a https github com ggb2312 JavaNotes tree master springboot integration examples xff08 其中包含SpringBoot和其他常用技术
  • sql server 对储存过程和函数的加密解密

    加密使用关键字 xff1a ENCRYPTION CREATE procedure dbo sp EytTest 64 para varchar 50 WITH ENCRYPTION as begin select 64 para end
  • 设计模式之(十三)备忘机制Memento

    Memento备望录模式定义 memento是一个保存另外一个对象内部状态拷贝的对象 这样以后就可以将该对象恢复到原先保存的状态 Memento模式相对也比较好理解 我们看下列代码 public class Originator publi
  • 从点击Button到弹出一个MessageBox, 背后发生了什么

    思考一个最简单的程序行为 xff1a 我们的Dialog上有一个Button xff0c 当用户用鼠标点击这个Button时 xff0c 我们弹出一个MessageBox 这个看似简单的行为 xff0c 谁能说清楚它是如何运行起来的 xff
  • Windows 7 封装篇(一)【母盘定制】[手动制作]定制合适的系统母盘

    Windows 7 封装篇 xff08 一 xff09 母盘定制 手动制作 定制合适的系统母盘 http www win10u com article html 10 html Windows 7 封装篇 xff08 一 xff09 母盘定
  • #ifdef __cplusplus 倒底是什么意思?

    时常在cpp的代码之中看到这样的代码 ifdef cplusplus extern 34 C 34 endif 一段代码 ifdef cplusplus endif 这样的代码到底是什么意思呢 xff1f 首先 xff0c cplusplu
  • ping过程详细解读

    0 前言 在讲解ping过程之前 xff0c 我们需要了解以下概念 1 何为ping PING Packet Internet Groper xff0c 因特网包探索器 xff0c 用于测试网络连通性的程序 Ping发送一个ICMP Int
  • 使用源码安装MariaDB

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 系统 xff1a CentOS 6 5 x86 64 为什么源码安装 xff1f 自定义编译参数 xff0c 编译器优化 xff0c 自定义安装位置 源码安装系统需求 xf
  • VS2015配置Linux开发远程调试

    VS2015配置Linux开发远程调试 简介 vs2015支持跨平台开发 软件环境 VS2015 update3 Visual C 43 43 for Linux Development VC Linux exe 安装步骤 安装VS2015
  • 将linux文件中的tab更换为空格的三种方法

    将linux文件中的tab更换为空格的三种方法 1 xff0c 用sed命令 sed s t g filename gt filename1 2 用tr命令 cat filename tr 34 t 34 34 34 gt filename
  • React生命周期-踩坑记_10

    React生命周期 生命周期概览 生命周期的状态 组件的生命周期可分成三个状态 xff1a Mounting xff1a 已插入真实 DOMUpdating xff1a 正在被重新渲Unmounting xff1a 已移出真实 DOMcom
  • 转录组入门(5): 序列比对

    欢迎来GitHub上fork xff0c 一起进步 xff1a https github com xuzhougeng 比对软件很多 xff0c 首先大家去收集一下 xff0c 因为我们是带大家入门 xff0c 请统一用hisat2 xff