HISAT2 建立索引警告和比对时报错解决方案
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HISAT2 建立索引警告和比对时报错解决方案相关的知识,希望对你有一定的参考价值。
参考技术A tags: HISAT2 RNA-seqHISAT2 发表的文章中强调了它的速度很快,我就测试了一下这个工具。
HISAT2 建立索引:
然而没多久就看到这样的警告:
只是警告,并没有报错。
HISAT2 建参考索引很慢,等 HISAT2 建完索引(建索引花了 16 个小时),然后用 HISAT2 比对 RNA-seq 数据测试。
几分钟之后报错了:
github 上有人在 HISAT2 项目中报告过这个错误,虽然没有最终讨论出解决办法,但是都觉得跟建索引不完整有关,或许与建索引时候的警告有关。我查了一些资料,综合 biostar 和 SEQanswer 中的讨论,建立索引时遇到的警告是由于参考序列中存在大段的 n 碱基导致的,例如其中一条 fasta 中 n (我遇到的是小写的 n)太多。解决办法也很简单,过滤掉参考序列中长度小于 50bp 的 contig 和序列中连续 n 碱基超过 40bp 的contig 。然后重新建索引,就没有任何警告了,但是会损失部分参考序列。这样处理之后建的索引再用 HISAT2 比对 RNA-seq 数据,就没有问题了。
HISAT2 比对速度确实很快,一个样本转录组数据比对 2G 的核糖体 RNA 参考基因组约 25 分钟,bowtie2 需要 170 分钟(线程数都是 4)。 bowtie2 的 local 模式比对出 21% 的 rRNA 污染,而 HISAT2 比对 2% 的 rRNA 污染,差异也挺大的……
但是,HISAT2 的线程数不能设置太高,用户手册中建议对人类参考基因组进行比对时,线程数设置在 1-8 之间。我用文献 Transcript-level expression analysis of RNA-seq
experiments with HISAT, StringTie and Ballgown 中的数据测试也发现当线程数超过 12 时整个比对步骤消耗的时间反而会增加。
HISAT2+StringTie+Ballgown安装及使用流程
HISAT2+StringTie+Ballgown安装及使用流程
2015年Nature Methods上面发表了一款快速比对工具hisat,作为接替tophat和bowtie的比对工具,它具有更快的比对速度和更高的比对率,最近把这个流程走完一遍,感觉优势还是很明显的。
一、HISAT2:
1、下载安装:
hisat2下载地址:ftp://ftp.ccb.jhu.edu/pub/infphilo/hisat2/downloads/hisat2-2.1.0-Linux_x86_64.zip
hisat2官方手册:http://ccb.jhu.edu/software/hisat2/manual.shtml
下载完成后解压缩:
unzip hisat2-2.0.5-Linux_x86_64.zip
进入hisat2-2.0.5文件夹:
这里面的绿色文件都是可执行文件,所以只需要把目录添加到环境变量中即可:
vim进入编辑bashrc文件,在文本中输入红色方框内的内容,保存退出,然后source ~/.bashrc 即可
此时我们就可以直接调用hisat2命令了。
2、建立索引:
如同tophat一样,比对之前需要利用bowtie建立index,hisat2同样需要建立索引:
首先提取gtf文件中的剪切位点和外显子位置:
extract_splice_sites.py gencode.vM4.annotation.gtf >gencode.vM4.annotation.for.hisat2.ss
extract_exons.py gencode.vM4.annotation.gtf >gencode.vM4.annotation.for.hisat2.exon
建立索引:
hisat2-build -p 30 --ss gencode.vM4.annotation.for.hisat2.ss --exon gencode.vM4.annotation.for.hisat2.exon GRCm38.p3.genome.fa mouseGencodeIndex
##如果电脑内存<200G,那么可以不用--ss/--exon参数,但是在比对的时候需要加
--known-splicesite-infile参数。3、比对:
我的数据是双段的无链特异性数据,此处需要把sam文件转化为bam文件,所以需要提前安装samtools:
hisat2 --known-splicesite-infile gencode.vM4.annotation.for.hisat2.ss --dta -t -p 24 -x mouseGencodeIndex -1 samp_1.fq.gz -2 samp_2.fq.gz -S accepted_hits.sam &> alignment_summary.txt
samtools view -bS accepted_hits.sam > accepted_hits.bam
samtools sort accepted_hits.bam -o accepted_hits_sorted.bam
rm accepted_hits.bam
rm accepted_hits.sam
二、StringTie:
比对完生成了sam文件,我们利用samtools将它转化为了排好序的bam文件,下一步就需要量化和确定表达值了,这里用到的StringTie相比之前的cufflinks来说功能强大了好多。
1、下载安装:
stringtie下载地址:http://ccb.jhu.edu/software/stringtie/dl/stringtie-1.3.3b.Linux_x86_64.tar.gz
stringtie官方手册:http://ccb.jhu.edu/software/stringtie/index.shtml?t=manual
直接下载解压就可以用了,它是可执行文件,也可以按上述方法将路径添加到环境变量中方便调用。
2、运行:
stringtie accepted_hits_sorted.bam -o outRes.gtf -p 28 -G gencode.vM4.annotation.gtf -A gene_abund.tab -B -e
运行后每个样本文件夹下结果如下:
这里我生成了结果gtf文件outRes.gtf和ballgown需要的.ctab文件,还有基因的表达量文件gene_abund.tab,该文件包括基因的表达量FPKM以及TPM等。当然如果你想要转录本的表达量,直接打开t_data.ctab这个文件,这里面有转录本的FPKM值。
当然如果我们想利用DESeq2或者edgeR等计算差异表达,那我们就需要得到原始counts值矩阵来作为输入,此时我们需要利用StringTie自带的脚本prepDE.py来计算counts值,它可以同时对多个样本做:
prepDE.py -i stringtieRes/ -g countsRes/gene_count_matrix.csv -t countsRes/transcript_count_matrix.csv
stringtieRes/文件夹下面是我所有的样本的文件夹。
*这里我们能得到所有样本的count matrix,但是只能拿到每个样本对应的FPKM值,又有什么方法能得到合并在一起的FPKM matrix呢?这就需要借助ballgown了。
三、Ballgown:
1、安装:
首先你需要下载安装R,我的是3.4.0版本。
source("https://bioconductor.org/biocLite.R") biocLite("ballgown")
这里可能提示你安装XML包的时候会出现错误提示:Cannot find xml2-config
这就需要你在自己电脑上安装相应的模块了,我的是centos7,于是安装相应的模块:
yum install libxml2-devel
顺利安装上ballgown包。
2、使用:
读取所有样本到ballgown对象中:de>
bg = ballgown(dataDir=de>de>de>YSde>, samplePattern=‘YT1‘, meas=‘all‘);
#其中de>de>YS是我的所有样本的父目录,每个样本文件夹名字都包含YT1。
#计算转录本和基因的FPKM值
de>de>transcript_fpkm = texpr(bg, ‘FPKM‘)
row.names(de>de>de>transcript_fpkmde>) = transcriptNames(bg)
write.csv(de>de>transcript_fpkm,"de>de>de>transcript_fpkm_matrix.csvde>")
de>de>gene_expression = gexpr(bg)
de>de>write.csv(de>de>de>gene_expressionde>,"de>de>de>de>gene_fpkmde>_matrix.csvde>")
任务完成。
3、差异表达分析:
ballgown可以做case/control两两比较的差异表达,也可以做多组比较的差异表达(此时不能计算Fold Change值),
当然也可以做时间序列的差异。
de>de>de>pData(bg) = data.frame(id=sampleNames(bg), group=rep(c(1,0), each=10))
#这里是条件矩阵,每行是一个样本,第二列是条件,如果是case/control那么就是0/1.
de>de>de>de>stat_results = stattest(bg, feature=‘transcript‘, meas=‘FPKM‘, getFC=TRUE, covariate=‘group‘)
#注意getFC在多组比较时候不能用,feature参数可以对基因‘gene‘或者转录本‘transcript‘或者外显子‘exon‘做
差异表达分析。
de>de>de>de>de>Data(bg) = data.frame(pData(bg), time=rep(1:10, 2)) #dummy time covariate timecourse_results = stattest(bg, feature=‘transcript‘, meas=‘FPKM‘, covariate=‘time‘, timecourse=TRUE)de>
de>
但是我个人不太推荐使用ballgown,喜欢使用DESeq2和edgeR来计算。
de>
以上是关于HISAT2 建立索引警告和比对时报错解决方案的主要内容,如果未能解决你的问题,请参考以下文章
hisat2报错Error: Encountered internal HISAT2 exception (#1)