使用Trinity拼接以及分析差异表达一个小例子
 2017-06-12 09:42:47     293     0     0

Trinity 将测序数据分为许多独立的de Brujin graph,理论上每一个图对应一个表达的基因。

整个流程分为三个步骤:Inchworm, Chrysalis, and Butterfly

Inchworm: 从reads中提取所有的重叠k-mers,根据丰度递减的顺序检查每个k-mers,然后将重叠的k-mers延长到不能再延长,称为一个contig

Chrysalis: 将上一部生成的contig聚类,对每个类构建de Brujin graph

Butterfly: 根据构建的de Brujin graph ,寻找具有可变剪接的全长转录本,同时将旁系基因的转录本分开

https://github.com/trinityrnaseq

Trinity的硬件需求:

Inchworm 和 Chrysails 步骤对内存的需求很大,官方给出的说法是大致为每一百万对PE reads需要1g内存

使用的转录组数据为 Schizosaccharomyces pombe ,共4个样本(left right 表示双端测序数据的两端)

  1. % wget \
  2. http://sourceforge.net/projects/trinityrnaseq/files/misc/Trinity
  3. NatureProtocolTutorial.tgz/download
  4. #解压后得到如下的文件
  5. tar –xvf TrinityNatureProtocolTutorial.tgz

在拼接时,可以将每个样本都拼接成一个转录组,但是更合理的方法是将所有样本的reads合在一起再进行拼接,所以先将这四个样本的reads合在一起。

  1. % cat *.left.fq > reads.ALL.left.fq
  2. % cat *.right.fq > reads.ALL.right.fq
  3. #添加环境变量
  4. % export PATH=/usr/local/tools:$PATH
  5. #一种典型的使用方法入下
  6. #其中参数SS_lib_type RF 表示数据是双端(RF or FR) 单端(F or R)
  7. % Trinity --seqType fq --max_memory 1G --left reads.ALL.left.fq --right reads.ALL.right.fq --SS_lib_type RF --CPU 2

完成后会在当前的工作目录生成一个 trinity_out_dir 的文件夹,Trinity.fasta为最终拼接结果。

Trinity自带了一个脚本可以显示一些结果的基本统计信息,N50表示的意思如下图。

  1. % $TRINITY_HOME/util/TrinityStats.pl trinity_out_dir/Trinity.fasta

使用GMAP将拼接结果比对到参考基因组(有参考基因组的情况下)

  1. #首先准备GMAP需要的参考基因组,参考基因组文件为genome.fa
  2. gmap_build -d genome -D ./
  3. #algin 拼接结果,保存为一个sam文件
  4. gmap -n 0 -D . -d genome ./trinity_out_dir/Trinity.fasta -f samse > trinity_gamp.sam

使用samtools转换为BAM文件(binary sam 优点是占用磁盘空间小,运算速度快,一些对数据的排序或者提取命令需要转换为BAM文件)

  1. samtools view -Sb trinity_gmap.sam > trinity_gmap.bam
  2. #排序,方便后续使用
  3. samtools sort trinity_gmap.bam trinity_gmap
  4. #建立索引,需要先排序,否则报错,产生.bai文件
  5. samtools index trinity_gmap.bam

使用tophat 将RNA-seq reads map到参考基因组

  1. #准备参考基因组
  2. bowtie2-build GENOME_data/genome.fa genome
  3. #run tophat 将所有的reads比对到参考基因组上
  4. tophat2 -I 300 -i 20 genome \
  5. RNASEQ_data/Sp_log.left.fq.gz,RNASEQ_data/Sp_hs.left.fq.gz,RNASEQ_data/Sp_ds.left.fq.gz,RNASEQ_data/Sp_plat.left.fq.gz \
  6. RNASEQ_data/Sp_log.right.fq.gz,RNASEQ_data/Sp_hs.right.fq.gz,RNASEQ_data/Sp_ds.right.fq.gz,RNASEQ_data/Sp_plat.right.fq.gz
  7. #下面的IGV基因组浏览器需要先建立索引
  8. samtools index tophat_out/accepted_hits.bam

使用基因组浏览器IGV (有GUI) 查看trinity的拼接结果

  1. igv.sh -g `pwd`/GENOME_data/genome.fa `pwd`/GENOME_data/genes.bed,`pwd`/tophat_out/accepted_hits.bam,`pwd`/trinity_gmap.bam

使用RSEM定量

除了拼接以外,Trinity还准备了一些脚本进行后续的比如定量,差异表达等一些分析。

  1. #使用Trinity准备好的脚本先用bowtie
  2. #align到拼接好的转录组,然后使用RSEM定量
  3. #运行这个脚本后会产生两个文件 'Sp_ds.isoforms.results' and 'Sp_ds.genes.results'
  4. #包含了Trinity 拼接的转录本(isoform) 和基因的raw counts数和标准化后的数值
  5. ${Trinity_home}/util/align_and_estimate_abundance.pl --seqType fq  \
  6. --left RNASEQ_data/Sp_plat.left.fq.gz --right RNASEQ_data/Sp_plat.right.fq.gz \
  7. --transcripts trinity_out_dir/Trinity.fasta \
  8. --output_prefix Sp_plat --est_method RSEM  --aln_method bowtie \
  9. --trinity_mode --prep_reference --output_dir Abundance_quantify/Sp_plat.RSEM
  10. #然后再对其他三个样本进行同样的操作
  11. #一个样本间的比较矩阵 ,结果产生一个后缀为 .counts.matrix的文件
  12. #显示了每个样本在每个转录本(isoform)上的map的数目(raw count)
  13. ${Trinity_home}/util/abundance_estimates_to_matrix.pl  --est_method RSEM --out_prefix Trinity_trans \
  14. Abundance_quantify/Sp_ds.RSEM/Sp_ds.isoforms.results \
  15. Abundance_quantify/Sp_hs.RSEM/Sp_hs.isoforms.results \
  16. Abundance_quantify/Sp_log.RSEM/Sp_log.isoforms.results \
  17. Abundance_quantify/Sp_plat.RSEM/Sp_plat.isoforms.results
  18. #另外 Trinity_trans.TMM.EXPR.matrix 是消除了测序深度,基因长度,然后通过TMM方法标准化后的数值(假定其他大多数基因没有差异表达)

使用 EdgeR 分析差异表达基因

还是通过Trinity安装包里自带的脚本,不加参数运行会有基本参数的介绍

使用刚才获得的 Trinity_trans.count.matrix 文件

  1. > ${Trinity_home}/Analysis/DifferentialExpression/run_DE_analysis.pl \
  2. >  --matrix Trinity_trans.counts.matrix \
  3. >  --method edgeR \
  4. >  --dispersion 0.1 \
  5. >  --output edgeR

运行结果 '*.DE_results' 输出了运行edgeR 分离出来的差异表达的基因

logFC = log fold change

logCPM = log counts per million

  1. #提取FDR<=0.005)
  2. sed '1,1d' edgeR/Trinity_trans.counts.matrix.Sp_log_vs_Sp_plat.edgeR.DE_results | awk '{ if ($5 <= 0.05) print;}' | wc -l
  3. #画热图,需要进入刚才的/edgeR文件夹作为工作目录
  4. $TRINITY_HOME/Analysis/DifferentialExpression/analyze_diff_expr.pl \
  5. --matrix ../Trinity_trans.TMM.EXPR.matrix -P 1e-3 -C 2
  6. #-P 为p的阈值,-C 为fold change = 2^2 =4 倍

使用Trinity拼接以及分析差异表达一个小例子的更多相关文章

  1. java连接mysql的一个小例子

    想要用java 连接数据库,需要在classpath中加上jdbc的jar包路径 在eclipse中,Project的properties里面的java build path里面添加引用 连接成功的一 ...

  2. java操作xml的一个小例子

    最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要 ...

  3. MVVM模式的一个小例子

    使用SilverLight.WPF也有很长时间了,但是知道Binding.Command的基本用法,对于原理性的东西,一直没有深究.如果让我自己建一个MVVM模式的项目,感觉还是无从下手,最近写了一个 ...

  4. Vue2.x源码学习笔记-从一个小例子查看vm实例生命周期

    学习任何一门框架,都不可能一股脑儿的从入口代码从上到下,把代码看完, 这样其实是很枯燥的,我想也很少有人这么干,或者这么干着干着可能干不下去了. 因为肯定很无聊. 我们先从一个最最简单的小例子,来查看 ...

  5. 从一个小例子认识SQL游标

    1    什么是游标: 关系数据库中的操作会对整个行集起作用. 例如,由 SELECT 语句返回的行集包括满足该语句的 WHERE 子句中条件的所有行. 这种由语句返回的完整行集称为结果集. 应用程序 ...

  6. 关于SVN配置文件的一个小例子

    1   背景假设 厦门央瞬公司是一家电子元器件设备供应商,其中有个ARM部门,专门负责ARM芯片的方案设计.销售,并在北京.上海各设立了一个办事处.对于工作日志,原先采用邮件方式发给经理,但是这种方式 ...

  7. Spring和Hibernate结合的一个小例子

    1.新建一个SpringHibernate的maven项目 2.pom文件的依赖为 <dependency> <groupId>junit</groupId> &l ...

  8. Spring.Net在ASP.NET Mvc里使用的一个小例子

    就贴个小例子,就不注意格式了. 1.下载dll NuGet的下载地址:http://docs.nuget.org/docs/start-here/installing-nuget 在vs的NuGet里 ...

  9. 关于ExpandableListView的一个小例子

    喜欢显示好友QQ那样的列表,可以展开,可以收起,在android中,以往用的比较多的是listview,虽然可以实现列表的展示,但在某些情况下,我们还是希望用到可以分组并实现收缩的列表,那就要用到an ...

随机推荐

  1. godep 包管理

    go get -u -v github.com/tools/godep  godep save

  2. room 二分图最大匹配KM

    #include<bits/stdc++.h> #define fi first #define se second #define INF 0x3f3f3f3f #define fio ...

  3. Java7/8 HashMap ConcurrentHashMap

    网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,把细节说清楚说透,尤其像 Java8 中的 ConcurrentHas ...

  4. Spring设置动态定时任务

    1.在Spring中经常会用到定时任务,一般会在业务方法上使用@Schedule(cron="定时执行规则"),无法实现从前台动态设置定时任务. 在java中固定频率的任务使用Sc ...

  5. python websocket网页实时显示远程服务器日志信息

    功能:用websocket技术,在运维工具的浏览器上实时显示远程服务器上的日志信息 一般我们在运维工具部署环境的时候,需要实时展现部署过程中的信息,或者在浏览器中实时显示程序日志给开发人员看.你还在用 ...

  6. hibench 对CDH5.13.1进行基准测试(测试项目hadoop\spark\)HDFS作HA高可靠性

    使用CDH 5.13.1部署了HADOOP集群之后,需要进行基准性能测试. 一.hibench 安装 1.安装位置要求. 因为是全量安装,其中有SPARK的测试(SPARK2.0). 安装位置在SPA ...

  7. NumPy 从已有的数组创建数组

    NumPy 从已有的数组创建数组 本章节我们将学习如何从已有的数组创建数组. numpy.asarray numpy.asarray 类似 numpy.array,但 numpy.asarray 只有 ...

  8. Jenkins安装部署(二)

    Jenkins配置 一.修改jenkins家目录 由于jenkins在启动个之后会默认将所有的构建应用在家目录中创建一遍,为了合理化服务器资源,重新定义jenkins家目录. 在tomcat的cata ...

  9. 152. Maximum Product Subarray (Array; DP)

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  10. Class语法糖

    TypeScript源码 class A { hello() { } } class B extends A{ welcome() { } } TypeScript编译 var __extends = ...