RNA-seq差异表达分析工作流程 (转帖)

之前写过博文《从RNA-seq结果到差异表达》给出了一些关于RNA-seq分析的描述,这篇博文的目的是给出一个示例性质的工作流程。

需要使用到的工具: TopHat Cufflinks Samtools

参考:http://vallandingham.me/RNA_seq_differential_expression.html

首先安装的tophat需要事先安装好bowtie。至于安装方面的问题,这里不至赘述。

整个pipeline非常明确:Sequences → TopHat → Manual Check → Cufflinks → Analysis

第一个问题,是否需要做duplicate removal,如果要做,什么时候做?在回答这两个问题之前,我们还是先来看看什么是duplicate。我们将deep sequence中完全相同的序列统称为duplicate。通常这种重复会有几个来源,一,测序模板中存在一模一样的片断;二,测序过程中PCR产生的重复;三,信号读取过程中读到了同一pcr产物。按照这里的讨论,对于 copy number detection, SV detection, ChIP-seq, and RNA-seq都应该做duplicate removal。去除的优点是可以大量的减少计算,降低假阳性。但是去除的话也有造成数据大量损失的风险,也就是说会降低真阳性结果。有文章对相同的library做了两次测序,一次是single end, 一次paired end。比较发现,SE的duplicate高达28%,而PE的duplicate只有8%。当把PE的结果当成SE结果来处理时,duplicate又升至28%。还有些私下的讨论认为,实际的duplicate应该只有1%左右。这里强调了去除duplicate对于数据完整性的影响。那么为什么人们在做CN/SV/ChIP-seq/RNA-seq的时候倾向于做duplicate removal呢?这主要的理论依据是在准备library的步骤中,所有模板小片段都是由超声波震断的,而相同的mRNA分子在同一地方被打断的可能性几乎为零。另一方面,当测序深度过深时,不可避免的,同一模板会被多次测序。这时候更应该去除duplicate,可以消除饱和。对于一些由酶切产生的片段,比如clip-seq, REDseq (Restriction Enzyme digestion sequence)等,就不需要做去除duplicate。在做去除duplicate之前,首先要在genome browser中观察一下mapped好的序列,看看其duplicate的存在的程度。肉眼观察这种事情,因为没有一定的标尺,所以非常不好总结。做这件事情的唯一好处就是,看得多了,就明白什么是好的测序结果。

那么duplicate removal什么时候做呢?现在的观点一般都认为是在map之后做。这样的好处是不依据序列一致就去除它,因为同一段序列可能map至不同的位点。在map之后,使用samtools rmdup或者Picard MarkDuplicates。这里需要注意的是,无论是samtools还是Picard,在duplicate removal时,所有的mapping结果对于每个read,应该只保留一个位置,而不是多个位置。2,对于PE的结果,LR的名字应该一致,否则程序可能无法识别。这些工具的出发点都是PE的,如果是SE的测序,可能需要指定参数。

java -Xmx2g -jar /path/to/MarkDuplicates.jar INPUT=accepted_hits_sorted.bam OUTPUT=duplicated.removed.bam METRICS_FILE=picard_info.txt REMOVE_DUPLICATES=true ASSUME_SORTED=true VALIDATION_STRINGENCY=LENIENT

或者

[…]

Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14′ not found问题(zhuanzai)

前天,在Centos的某个版本下编译了一个可执行程序,复制到另外一个Centos环境下去执行,结果出现了以下错误:

/lib64/libc.so.6: version `GLIBC_2.14′ not found

貌似是一个很普遍的错误,去网上搜集了相关的资料并整理了一下

出现这种错误表明程序运行需要GLIBC_2.14,但是系统中却并不存在,因此可以先用strings命令查看下系统中的GLIBC版本

strings /lib64/libc.so.6 | grep GLIBC

发现系统中最高只支持GLIBC_2.12,解决这个问题有多种方法。

在你准备升级GLIBC库之前,你要好好思考一下, 你真的要升级GLIBC么? 你知道你自己在做什么么?

http://baike.baidu.com/view/1323132.htm?fr=aladdin

glibc是gnu发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现… 总的来说,不说运行在linux上的一些应用,或者你之前部署过的产品,就是很多linux的基本命令,比如cp, rm, ll之类,都得依赖于它 网上很多人有惨痛教训,甚至升级失败后系统退出后无法重新进入了。。。。。。

对于CentOS这样的系统,为了追求稳定性(这个值得商榷)往往各种库版本都很低,比如6.5甚至7.0自带的还是glibc2.12, 而ubuntu 14.04带glibc2.19 如果升级基本C运行库到一个太新的版本,可能会影响CentOS的运行。所以大家如果遇到CentOS基本库的问题,影响了自己程序的运行,应该可以考虑: 1. 在低版本的系统编译自己的产品,如果自己的产品确实不需要新版才支持的新特性 2. 用版本高的系统来编译,比如ubuntu,和centos的新版,但可能需要部署到较低版本,那么可以考虑用mock等技术制作更好的安装包,把依赖打入包内 3.利用容器技术,如Docker,在低版本的操作系统内,轻量级的隔离出一个虚拟运行环境,适应你的程序。 好在我遇到的问题是glibc2.15就满足要求升级后暂时没发现问题,所以大家可以参考我的方法: 首先查看现有的情况,在CentOS6.5下

ll /lib64/libc.so.6

libc.so.6是一个软连接,当前的glibc是2.12版本,我遇到的是GLIBC_2.15找不到的问题,所以需至少升级到2.15 首先,从网上下载glibc 2.15的rpm安装包,但这个不容易,因为.rpm针对的是centOS和redhat,高版本安装包很少见。也可以直接从其他系统上拷一个编译好的文件libc.so.6(对应glibc 2.15或者更高的),不过最保险的方式就是下载源代码在本地编译一次(有的人实在编译不成功,那也只能从别的地方找一份了) 各个版本的glibc可以从http://ftp.gnu.org/gnu/glibc/找,包括其插件glibc-port 最新到2.20,我保守的选择2.15 对于低版本glibc,还有glibc-linuxthreads-2.x需要编译,可参考很多网上文档,但2.15没有,所以不用了

[plain] view plain copy

wget http://ftp.gnu.org/gnu/glibc/glibc-2.15.tar.gz wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.15.tar.gz tar -xvf glibc-2.15.tar.gz […]

用tophat和cufflinks分析RNAseq数据(转载)

链接地址:http://blog.sciencenet.cn/blog-635619-884213.html

人的基因组一共有两万多个基因,但是这些基因不是每时每刻都在表达,在不同发育时期和不同组织中,基因的表达是不同的,一个检测这些表达的有效的方法就是RNA-seq,它结合了下一代测序的技术来对细胞整个的mRNA进行测序,从而确定每一个基因的表达量和表达区段,主要用在分析不同条件下细胞内基因表达差异和分析基因表达的不同可变剪接上。

RNAseq分析大致分下面几个步骤,首先要把测到的序列map到基因组上,然后根据map到的区段对细胞构建转录本,然后比较几种细胞的转录本并且合并,最后衡量差异和可变间接和其他的分析。

Mapping

所有的序列分析的第一步,都是把测到的序列map到基因组上,这样就能知道序列原来是在基因组的什么地方。mapping一般基于两种快速索引算法,一种是哈希,MOSAIK,SOAP,SHRiMP用的就是这种算法,在对参照基因组建好哈希表之后,可以在常数次的运算里查找到给定序列的位置,虽然高效,但是由于基因组有些区段重复性很高,所以查找次数虽是常数,但有时会变得非常大,降低效率;还有一种叫Burrows-Wheeler变换,BWA,Bowtie 和SOAP2都是用它,Burrows-Wheeler变换的设计比哈希更加巧妙,它最开始是一种文本压缩算法,文本重复性越高,它的压缩比就越大,这正好克服了基因组重复性高的问题,而且对于一个精确的序列查找,最多在给定序列的长度的次数里就能找到匹配,所以说基于Burrows-Wheeler变换的软件在mapping里用得更加广泛。可是RNAseq的map还有另外一个问题,那就是要允许可变剪接的存在,因为一条RNA不一定是一个外显子表达出来的,也有可能是几个外显子结合在了一起,原来基因里的内含子被空了出来,这些内含子的长度从五十到十万个碱基不等,如果直接用DNAseq的方法的话去在基因组里寻找,有些正好在两个exon连接处的序列就会有错配,而且有些在进化过程中遗漏下来的假基因是没有intron的,这样就导致有些序列会被map到假基因上去,使假基因的表达变得很高,所以,传统的bwa和bowtie在RNAseq里都不是最好的选择。

更加适合RNA mapping的软件需要克服上面的两个问题,Tophat,subread, STAR, GSNAP, RUM, MapSplice都是为RNA测序而开发的,我只用过Tophat,它的新版Tophat2,在map的过程中分三个步骤,如果基因注释文件存在的话,它会先用注释文件的转录组来map,然后再对剩下的序列用bowtie进行普通的map,最后再用bowtie里用过的所有的序列做剪接map,所以跟其他的软件比起来会有比较高的正确率。在运行tophat之前,要对参考基因组作index,samtools可以轻松搞定。

samtools faidx hg38.fasta

如果用的是tophat的话,还需要用bowtie2做index.

bowtie2-build genome.fa genome

hg38.fasta是人类的参考基因组,对参考基因组做index是为了提高mapping时查找的效率.

(对懒人来说,在这里可以直接下载到Bowtie打包做好的index文件,这样就可以省略掉做index的步骤了 )

然后用Tophat开始mapping:

path/tophat

-p 8

-G $path_ref/Homo.GTF

-o tophat_output

$path_ref/hg38

single_end.fastq;

-p指定用几个线程来工作,-G指定注释文件的位置,-o指定输出文件的路径和文件名,最后两个参数分别告诉参考基因组的位置和要map的fastq文件。在参考基因组里不用加.fa的后缀,因为程序还要去寻找其他后缀的index文件。

这步的运行时间是根据fastq文件的大小和设定的线程数来决定的,一般单端8个线程需要每G一个小时,双端各4G,线程数设为16的话需要五六小时,运行完之后会在fastq文件的目录里产生一个-o命令指定的文件夹,这个文件夹里有几个bam文件和bed文件,还有一个summary,在下一步需要用到的是accepted_hits.bam这个文件。

注释文件的后缀是GTF,它包含了所有已知的基因的外显子在基因组中的位置。(hg38的注释文件可以在这里下载)所以对于已经map在基因组上的序列,我们可以直接根据它的位置从注释文件里查找它是不是属于一个外显子,或者是一个转录本。对于要不要在这一步提供注释文件,各有各的看法,我用单端测序的序列用两种方法做了实验,发现他们有些差别:

有注释的时候:

没注释的时候:

发现没注释的时候有更多的序列被map上去,但是重复的map也变多了,但是既然Tophat2三步map的第一步是根据注释文件来map,我还是觉得在运行tophat的时候用注释文件比较好。

Mapping的最后一步是去除map到基因组中多于一处的序列,如果出现好几个序列都map在完全相同的一个区段,那么就应该只保留一个这样的序列,所以,只保留匹配最高的那一个。而且这样的序列占很大一部分,这步也很简单,samtools里的rmdup可以轻松解决:

samtools rmdup -s input.bam output.bam

-s小写是告诉samtools,bam文件是单端测序的结果,不指定-s的话默认是双端。

2。构建转录本

Mapping完了以后,cufflinks就可以把map到基因组里的序列组装成一个转录组了,这个转录组理论上包含了所有当时细胞里的所有mRNA,组装好的转录组包含了可能的剪切信息和所有转录的表达量,这个表达量是根据map到基因组的序列的总数和每个转录片断的长度进行归一化的,听起来比较难懂,它是对于在转录片断里的每一千个碱基对,在每一百万个成功map的序列中,map在这一千个碱基对上的序列的比例,fragments per kilobase of transcript per million mapped […]

Local Blast2go database installation 2016

Note 1: Use the “silent mode” (-s) to produce less output and to speed up the import. (On a Windows system use also (-b) to suppress the beep when errors occur.) Note 2: You can alternatively also first open a mysql shell and than use the command “source” to import the data.

 

Import […]

How to create a Fasta file database for local Blast and to import XML results successfully into Blast2GO

(This is now obsolete. The use of the Blast2GO Command Line is recommended for this task.)

This page describes how to create a local installation of the B2G MySQL database and is intended for users with knowledge in MySQL databases and general server administration tasks. If you are not able to follow the steps given […]

Genome annotation and Pangenome analysis

In this demo we will explore how to determine a pangenome from a collection of isolate genome sequences in fasta format

This demo relies on two pieces of software, Prokka and Roary, so please remember to cite them if you end up publishing results obtained with these tools

Obtaining data

For details on obtaining Prokka […]

RNAmmer | The Devil in the Details

find ribosomal RNAs in genomic sequences

via RNAmmer | The Devil in the Details.

find ribosomal RNAs in genomic sequences

Amber的分子动力学模拟 (转贴)

amber进行MD的步骤如下:PDB文件需要去掉结晶水、氢 和金属离子(非必须)。 网上教程:http://enzyme.fbb.msu.ru/Tutorials/

金属酶的模拟:http://ambermd.org/tutorials/advanced/tutorial1_orig/ 蛋白和配体的模拟:

1:分子系统的准备

命令如下: tleap //进入leap source leaprc.ff99SB //加载蛋白力场 source leaprc.gaff //如果有小分子加载小分子力场 loadamberparams lig.frcmod //特殊情况还要加载其他特殊的力场参数 mol = loadpdb protein.pdb //定义mol变量并加载蛋白分子 bond mol.1.SG mol.6.SG //如果要二硫键。 check mol //检查蛋白 saveamberparm mol protein_vac.top protein_vac.crd //生成真空拓扑、坐标文件 solvatebox mol TIP3PBOX 10.0 //此为方形,八面体用solvateoct charge mol //检测系统电荷

pseudopipe pipeline (predict Pseudogenes)

shenzy@shenzy-pc:~/zhanglei/pgenes/ppipe_input/prodigal/input_file$ /usr/local/RepeatModeler/BuildDatabase -name tcs2 -engine ncbi /home/shenzy/zhanglei/pgenes/ppipe_input/prodigal/input_file/tcs2_prodigal.fa Building database tcs2: Adding /home/shenzy/zhanglei/pgenes/ppipe_input/prodigal/input_file/tcs2_prodigal.fa to database Number of sequences (bp) added to database: 4407 ( 4099764 bp ) shenzy@shenzy-pc:~/zhanglei/pgenes/ppipe_input/prodigal/input_file$ /usr/local/RepeatModeler/BuildDatabase -name tcs3 -engine ncbi /home/shenzy/zhanglei/pgenes/ppipe_input/prodigal/input_file/tcs3_prodigal.fa Building database tcs3: Adding /home/shenzy/zhanglei/pgenes/ppipe_input/prodigal/input_file/tcs3_prodigal.fa to database Number of sequences (bp) added to database: 4430 ( 4121190 bp ) shenzy@shenzy-pc:~/zhanglei/pgenes/ppipe_input/prodigal/input_file$ /usr/local/RepeatModeler/BuildDatabase -name […]

How to Run AMBER

AMBER, that stands for Assisted Model Building with Energy Refinement, is the collective name for a suite of programs that allow users to carry out molecular dynamics simulations, particularly on biomolecules.

Version 10 of AMBER has been installed on Lewis.

On lewis, it is installed under /share/apps/amber10. The executables are under […]