SpliceR:一个用RNA-Seq数据进行可变剪接分类和预测潜在编码区域的R包

Kristoffer Knudsen, Johannes Waage5Dec2013

翻译:斑斑<23920620>

2016年7月14日

欢迎加入生物信息QQ群78750864讨论相关问题

1简介

SpliceR是一个可以对转录本完整isoform(剪接模式)进行分类的R包。这些转录本可以是由Cufflinks等工具通过组装RNA-seq数据产生的。SpliceR输出的是关于可变剪接的类别及转录本对无义介导的降解机制的敏感性。SpliceR还提供导出GTF格式的文件用以在基因组浏览器中浏览,以及少量的绘图功能。spliceR位于典型RNA-Seq分析流程的末端,使用由组装工具生成的full devoncoluted isoforms,并支持输出剪接元件的基因组位置,促进了序列元件的下游分析。

SpliceR在SpliceRList对象中存储转录本信息,由两个GRanges对象构成,‘转录本特征’和‘外显子特征’。作为GRanges对象的‘转录本特征’ 包含关于每个isoform的额外信息,涉及产生它的基因和表达值。作为GRanges对象的‘GRanges’包含所有的外显子和一个能回溯到‘转录本特征’的isoform ID列。SpliceRList对象可以使用内建的prepareCuff函数通过Cufflinks的工作流程来生成,然后直接从一个Cufflins的辅助包——cummeRbund创建的cuffDB对象中读取。可选的,SpliceRList还可以从用户提供的由RNA-Seq组装工具生成的转录本和外显子信息中手动产生。

此外,spliceR通过annotatePTC()提供了关于无义介导的降解敏感性的转录本注释,通过spliceRPlot()进行可视化,通过generateGTF()生成用于基因组浏览器的GTF格式文件,以及一些辅助功能。

1.1可变剪接的类型

spliceR使用以下剪接类型注释‘transcript features’GRanges对象。

?单外显子跳跃/包含(ESI, Singleexonskipping/inclusion)

?多外显子跳跃/包含(ESI, Multipleexonskipping/inclusion)

?内含子滞留/包含(ISI, Intronretention/inclusion)

?可变5'/3'剪接位点(A5/A3,Alternative5’/3’splicesites)

?可变转录起始位点/可变转录终止位点(ATSS/ATTS, Alternativetranscriptionstartsite/transcriptionterminationsite)

?多外显子互斥(MEE, Mutuallyexclusiveexons)

2Cufflinks工作流程

Cufflinks是Tuxido套装的一部分,有着完善的文档和技术支持,用来对RNA-Seq数据进行映射、组装和定量。Tuxido工作流程的末端分析通常依赖cummeRbund包,它能利用R的分析和可视化能力将cufflinks的输出结果进行转换。SpliceR提供了prepareCuff()函数来将cummeRbund中的cuffSet类轻松的转换为spliceR中的SpliceRList类。SpliceR需要关于isoform及构成它的外显子的基因组坐标的全部信息。当生成cuffSet对象时,必须提供Cufflinks输出的转录本GTF文件。这里,我们使用由cummeRbund提供的内置数据来生成一个SpliceRList:

>library("spliceR")

>dirtempdir()

> extdatasystem.file("extdata", package="cummeRbund")

>file.copy(file.path(extdata,dir(extdata)),dir)

[1]TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE

[16]TRUETRUETRUETRUETRUETRUETRUETRUE

> cuffDBreadCufflinks(dir=dir,+gtf=system.file("extdata/chr1_snippet.gtf",package="cummeRbund"),genome="hg19",rebuild = T)

> cuffDB_spliceRprepareCuff(cuffDB)

SpliceRList是一个列表,包含两个GRanges对象,转录本特征和外显子特征,包含的信息分别为基因组坐标,转录本和转录本的基因ID,以及构成它们的外显子。使用prepareCuff()在转录本特征中能够创建附加的元列,这可以在spliceR稍后的工作流程中做进一步过滤。此外,SpliceRList对象还包含关于样品名称、数据来源、应用过的过滤条件以及被spliceR使用的其它数据。

我们还提供了一些有用的函数来提取转录本和外线子的GRanges数据,以及样品的名称:

> myTranscriptstranscripts(cuffDB_spliceR)

> myExonsexons(cuffDB_spliceR)

>conditions(cuffDB_spliceR)

[1]"iPS""hESC""Fibroblasts"

一旦SpliceRList对象准备完毕,它可以用spliceR()函数,或者基于每个转录本的潜在编码区域信息的annotatePTC()函数来进行进一步的可变剪接类型的注释。

2.1Cufflinks基因注释的问题

Cufflinks使用一个内部的(自定义的)‘gene id’。根据官方手册,这个基因ID是一个用于描述基因的唯一标识。但是根据调查,我们发现许多Cufflinks的基因ID实际上包含多个注释的基因。据我们所知,这个问题在用Ensembl/Gencode作为参考转录组,对unstrandedRNA-seq数据执行Cufflinks/Cuffdiff时尤为明显。在这些条件下,我们发现200-400个(总体的2-4%)cuffgenes包含多个注释了的基因。我们的假设为,这一问题的出现是由于这些基因间存在跨越基因间区的长的Ensembl转录本,因此欺骗了Cufflinks使其认为所有源自这一区域的转录本都属于同一个基因。

Cufflinks注释问题的全局效应是使所有这类基因的表达水平错误,因为这里的表达水平是几个基因的平均值。这反过来又影响基因的差异表达分析。Cufflinks注释问题只是影响基因的表达水平,这意味着它们转录本的表达水平和差异表达检验并不受这个问题的影响。

我们对这一问题粗略的解决方案为:1)识别所有受影响的基因。2)为cuffgene中的每个真实注释的基因创建一个新的cuffgene。3)根据新的转录本排布重新计算基因表达。4)设定显著性检验为负。

这会校正基因的表达并移除假阳性的差异表达基因。这一设定默认为开(prepareCuff()中的fixCufflinksAnnotationProblem选项)

3GRanges工作流程

对从其他非Cufflinks的转录本组装工具得到的RNA-seq数据,SpliceRList可以简单的通过转录本和外显子GRanges类的创建函数来手动创建。在下面的例子中,我们下载了一个公用的转录本和外显子模型数据,虚拟出样本间的表达量和p值来模拟常见的RNA-seq组装数据。

首先,从UCSC储存仓库中下载UCSC“knownGene”的转录本列表:

>sessionbrowserSession("UCSC")

> genome(session)"hg19"

>queryucscTableQuery(session,"knownGene")

>tableName(query) "knownGene"

> cdsTablegetTable(query)

接下来,我们从UCSC下载kgXref表,它包含了基因ID和转录本ID间的关系。

> tableName(query)"kgXref"

>kgXrefgetTable(query)

创建包含转录本特征的GRanges(设定假的基因表达,倍数变化和p值),从kgXref表中获取基因名字:

>knownGeneTranscriptsGRanges(

+seqnames=cdsTable$"chrom",

+ranges=IRanges(

+start=cdsTable$"txStart",

+end=cdsTable$"txEnd"),

+strand=cdsTable$"strand",

+spliceR.isoform_id = cdsTable$"name",

+spliceR.sample_1="placeholder1",

+spliceR.sample_2="placeholder2",

+spliceR.gene_id=kgXref[match(cdsTable$"name", kgXref$"kgID"),

+"geneSymbol"],

+spliceR.gene_value_1=1,

+spliceR.gene_value_2=1,

+spliceR.gene_log2_fold_change=log2(1/1),

+spliceR.gene_p_value=1,

+spliceR.gene_q_value=1,

+spliceR.iso_value_1=1,

+spliceR.iso_value_2=1,

+spliceR.iso_log2_fold_change=log2(1/1),

+spliceR.iso_p_value=1,

+spliceR.iso_q_value=1

+)

创建包含外显子特征的GRanges:

>startSplitstrsplit(as.character(cdsTable$"exonStarts"),split=",")

>endSplitstrsplit(as.character(cdsTable$"exonEnds"),split=",")

>startSplitlapply(startSplit,FUN=as.numeric)

>endSplitlapply(endSplit,FUN=as.numeric)

>knownGeneExons

+seqnames=rep(cdsTable$"chrom",lapply(startSplit,length)),

+ranges=IRanges(

+start=unlist(startSplit)+1,

+end=unlist(endSplit)),

+strand=rep(cdsTable$"strand",lapply(startSplit,length)),

+spliceR.isoform_id=rep(knownGeneTranscripts$"spliceR.isoform_id",

+lapply(startSplit,length)),

+spliceR.gene_id=rep(knownGeneTranscripts$"spliceR.gene_id",

+lapply(startSplit,length))

+)

最后,从两个GRanges来创建SpliceRList,设置和assembly,coditionssource和coditions条件:

>knownGeneSpliceRListSpliceRList(

+transcript_features=knownGeneTranscripts,

+exon_features=knownGeneExons,

+assembly_id="hg19",

+source="granges",

+conditions=c("placeholder1","placeholder2")

+)

4preFiltering

数据集由e.g产生。在多个样本中,考虑到所有样本的组合,Cufflinks(占用的内存)会很快变的非常大。Cufflinks报告的许多基因和转录本是基于运行时提供的GTF参考文件得到的,(这些基因和转录本)可能在任意的或全部样品中都没有表达。

类似的,cufflinks可能并不信任所有报告得到的转录本,这些转录本被标记为‘FAIL’或‘LOWDATA’。在运行spliceR()和下游分析前将这些基因和转录本从SpliceRList中过滤出去将减少相当多的运行时间。

这里给出一个使用标准过滤器进行预处理的例子。更多其它的过滤条件,请参考spliceR()的帮助页面。注意:preSpliceRFilter()报告的是总的成对比较的数量,而spliceR()报告的是唯一的isoform的总数量。

> cuffDB_spliceR_filteredpreSpliceRFilter(

+cuffDB_spliceR,

+filters=c("expressedIso","isoOK","expressedGenes","geneOK")

+)

5SpliceR

spliceR()获取一个SpliceRList对象并对isoform注释可变剪接类型,以及一些其它的元列,数据可以是由prepareCuff()通过GRanges对象生成,也可以手动生成。设定给preTranscript或一个已知样本的compareTo参数会告诉spliceR()当存在分类事件时,如何挑选出isoform的比较结果。使用preTranscript参数,spliceR()聚集全部的外显子信息,为每一个唯一的gene ID创建一个基于全部isoform的pre-RNA。然后当分类时,每个isoform同这个结构进行比较。通过给出一个样本名来使spliceR()把这个样本的主要isoform(根据isoform相对于整个基因的表达)作为主要的参考RNA。当分类时,将每个isoform同这个参考进行比较。

spliceR()可以进行一定量的过滤来减少总数据的大小和运行时间。大部分过滤器只在运行cufflinks产生的数据时才有意义,如同这个软件对每个转录本和基因产生的附加信息,这些信息表明模型中整体的稳定性和可信性。

下面展示了一个典型的对spliceR()的调用,设置常用的过滤器和pre-RNA的参考。全部过滤器的详细内容请参考spliceR()的帮助页面。

>#Commentedoutduetoproblemswithvignettesandprogressbars.

> mySpliceRListspliceR(

+cuffDB_spliceR,

+compareTo="preTranscript",

+filters=c("expressedGenes","geneOK","isoOK","expressedIso","isoClass"),

+useProgressBar=F

+)

在主流的工作站上,运行4个样本,每个样本不超过100,000转录本的数据大概需要1.5-5个小时的时间。spliceR()结束后,transcriptFeatures

GRanges被一些额外的列填充。它们包含了isoformfraction(IF)值和delta IF。每个剪接类型占一列,表示每个转录本在对应的类型中有多少剪接事件被探测到。最后,“analyzed”列表示这个转录本是否通过了筛选。

6PTC-注释

annotatePTC()获取一个SpliceRList对象,一个BSGenome序列对象和一个CDSList对象。BSGenome序列对象可以从Bioconductor下载并安装。此处的组装名和染色体名应当同用于cufflinks或其它组装工具进行映射的组装名相一致(如:BSgenome.Hsapiens.UCSC.hg19或BSgenome.Mmusculus.UCSC.mm9)。CDSList对象由getCDS()生成,getCDS()获取一个组装名、基因追踪名以及从UCSC基因组浏览器表中获取的CDS信息(需要联网)。可选的,我们可以通过一个选定的CDS表手动创建一个CDSList对象(参考?CDSList获得更多信息)。通过CDSList和BSGenome对象,annotatePTC()为 SpliceRList exon_features GRanges中包含的所有外显子获取其基因组序列,历遍transcript_features GRanges中的每个转录本,连接它们的外显子并翻译含有一个CDS的转录本。如果存在一个以上的CDS,则采用最上游的。transcript_features GRanges通过终止密码子的位置(在Mrna坐标系中),终止密码子所在外显子(0是最后一个外显子,-1是倒数第二个外显子,以此类推),最后的外显子-外显子连接距离和使用的CDS的基因组位置等信息来对每个转录本进行注释。如果没有发现CDS,这些列被设为NA。最终,转录本被注释为TURE或FALSE及关于无义介导的降解敏感性(NMD)。这个参数默认值为50(表示转录本终止位置距最后的外显子-外显子剪接位点超过50nt,且不在最后的外显子上),但可能会在程序运行时被改变。下面是一个典型的annotatePTC()工作流程:

>ucscCDSgetCDS(selectedGenome="hg19",repoName="UCSC")

>require("BSgenome.Hsapiens.UCSC.hg19",character.only=TRUE)

>#Commentedoutduetoproblemswithvignettesandprogressbars.

>#PTCSpliceRListannotatePTC(cuffDB_spliceR,cds=ucscCDS,Hsapiens,

> #PTCDistance=50)

7GTF输出

在cufflinks或其它组装工具装配过后,又或者spliceR()及annotatePTC()处理过后,将转录本在基因组浏览器中可视化是非常有帮助的。为了更加便利,spliceR提供了generateGTF函数。generateGTF()为每个样本生成GTF文件,并允许采用同spliceR()和annotatePTC()中一样的过滤条件来进行转录本的筛选。此外,generateGTF()颜色根据表达量编码转录本。通过参数scoreMethod设定精确打分方法,“local”打分是转录本相对于唯一基因ID中表达量最高的转录本,而“global”打分是转录本相对于整个样本。对generateGTF()函数的典型调用看起来是这样的:

>generateGTF(mySpliceRList,filters=

+ c("geneOK", "isoOK", "expressedGenes", "expressedIso"),

+scoreMethod="local",

+useProgressBar=F)

GTF文件输出在当前的工作目录下,它的名字同样本的名字相一致,并在每个文件中添加了filePrefix标记。

8可视化

运行spliceR()后,使用可变剪接事件的相关信息注释spliceRlist对象。spliceRPlot()函数可以用于对原始数据的探索。spliceRPlot()生成一个用圆代表各种情况的韦恩图来分析数据的各个方面。

spliceRPlot()包含两个控制层次。第一个层次,用户可以通过expressionCutoff和 filters两个参数来控制用于绘图的数据。由于韦恩图的基本目的是区分不同情况中表达了的转录本,因此expressionCutoff参数用来控制界定“表达”的阈值。接下来类似spliceR的其它核心函数,spliceRPlot()含有一个过滤参数。通过这个过滤参数,可以选择数据的子集。

过滤数据的准备和转换过程可能需要几分钟的时间,之后spliceRPlot()返回一个spliceRlist对象,中间的数据结构会被存储,这可以使用户在生成了其它图的情况下跳过这步。如果用户改变了expressionCutoff或filters参数,reset参数需要被设置为TRUE。

第二个层次的控制决定实际的绘图。有一些选项可用于估计参数,在图形中安排每种情况中表达基因的数目,及表达的转录本中发现的可变剪接的平均数量。此外,“asType”参数允许用户来指定可变剪接的子类型来进行评估。

>#Plottheaveragenumberoftranscriptsprgene

>mySpliceRList

+evaluate="nr_transcript_pr_gene")

>#PlottheaveragenumberofExonskipping/inclucionevensprgene

>mySpliceRListspliceRPlot(mySpliceRList,evaluate="mean_AS_transcript",

+asType="ESI")

>#PlottheaveragenumberofExonskipping/inclucionevensprgene,

>#butonlyusingtranscriptsthataresignificantlydifferntiallyexpressed

>mySpliceRListspliceRPlot(mySpliceRList,evaluate="mean_AS_transcript",

+asType="ESI",filters="sigIso",reset=TRUE)

> sessionInfo()

Rversion3.0.2Patched(2013-12-18r64488)Platform: x86_64-unknown-linux-gnu (64-bit)

locale:

[1]LC_CTYPE=en_US.UTF-8LC_NUMERIC=C

[3]LC_TIME=en_US.UTF-8LC_COLLATE=C

[5]LC_MONETARY=en_US.UTF-8LC_MESSAGES=en_US.UTF-8

[7]LC_PAPER=en_US.UTF-8LC_NAME=C

[9]LC_ADDRESS=CLC_TELEPHONE=C

[11]LC_MEASUREMENT=en_US.UTF-8LC_IDENTIFICATION=C

attachedbase

packages:

[1]grid

parallelstats

graphicsgrDevicesutils

datasets

[8]methods

base

otherattachedpackages:

[1]BSgenome.Hsapiens.UCSC.hg19_1.3.19BSgenome_1.30.0

[3]Biostrings_2.30.1spliceR_1.3.1

[5]plyr_1.8RColorBrewer_1.0-5

[7]VennDiagram_1.6.5cummeRbund_2.4.1

[9]Gviz_1.6.0rtracklayer_1.22.2

[11]GenomicRanges_1.14.4XVector_0.2.0

[13]IRanges_1.20.6fastcluster_1.1.13

[15]reshape2_1.2.2ggplot2_0.9.3.1

[17]RSQLite_0.11.4DBI_0.2-7

[19]BiocGenerics_0.8.0

loadedviaanamespace(andnotattached):

[1]AnnotationDbi_1.24.0Biobase_2.22.0Formula_1.1-1[4]GenomicFeatures_1.14.2Hmisc_3.14-0MASS_7.3-29[7]RCurl_1.95-4.1Rsamtools_1.14.2XML_3.98-1.1[10]biomaRt_2.18.0biovizBase_1.10.7bitops_1.0-6

[13]cluster_1.14.4colorspace_1.2-4dichromat_2.0-0[16]digest_0.6.4gtable_0.1.2labeling_0.2[19]lattice_0.20-24latticeExtra_0.6-26munsell_0.4.2[22]proto_0.3-10scales_0.2.3splines_3.0.2[25]stats4_3.0.2stringr_0.6.2survival_2.37-7[28]tools_3.0.2zlibbioc_1.8.0

linux可变剪切分析,SpliceR:一个用RNA-Seq数据进行可变剪接分类和预测潜在编码区域的R包...相关推荐

  1. linux可变剪切分析,SUPPA2进行可变剪切定量

    SUPPA2是一款通过转录本定量来获取可变剪切定量结果的软件.转录本的定量方式有很多,例如count,FPKM, TPM等,作者建议使用TPM,因为先均一化了基因的长度,然后均一化了测序的深度.同时建 ...

  2. linux可变剪切分析,SUPPA 可变剪切分析

    SUPPA是一款通过转录本定量来获取可变剪切定量结果的软件.转录本的定量方式有很多,例如count,FPKM, TPM等,作者建议使用TPM,因为先均一化了基因的长度,然后均一化了测序的深度.同时建议 ...

  3. linux可变剪切分析,可变剪切的意义和重要性

    欢迎关注"生信修炼手册"! 可变剪切differential splicing,也叫做选择性剪切alternative splicing, 指的是在mRNA前体到成熟mRNA的过程 ...

  4. 使用leafcutter 做可变剪切分析流程

    本博客的主要目的是把本次使用Leafcutter做可变剪切的分析流程记录一下,以方便后续分析或者分享给别人. Leafcutter的文章发表在了NG上,有感兴趣的可以看原文. #批量改文件的名字 #A ...

  5. 多元经验模态分解_【Applied Energy最新原创论文】一个基于多元搜索引擎数据的多尺度油价预测方法...

    原文信息: A multi-scale method for forecasting oil price with multi-factor search engine data 原文链接: http ...

  6. Linux网络协议栈:关闭一个还有没发送数据完的TCP连接

    <监视和调整Linux网络协议栈:接收数据> <监控和调整Linux网络协议栈的图解指南:接收数据> <Linux网络 - 数据包的接收过程> <Linux网 ...

  7. LINUX IIO子系统分析之二 IIO子系统相关数据结构分析

    上一章我们简要说明了IIO子系统的架构,本章我们通过数据结构的定义,分析IIO子系统的设计实现,本章的主要内容如下: 一.IIO子系统各数据结构说明 二.数据结构间的关联说明 一.IIO子系统各数据结 ...

  8. matlab中-psi_建议收藏 | 生物信息学中的可变剪切,这些内容你了解吗?

    聊点学术 声明:非常感谢Carina投稿至公众号,全文由Carina撰写,主要对生信的可变剪切相关内容作了一定的梳理. 检索TCGA中可变剪切的相关文献,虽然总数量并不多,但是其在2019年猛增为49 ...

  9. 揭秘可变剪切研究的本质

    欢迎关注"生信修炼手册"! 可变剪切指的是一个基因由于剪切方式的不同从而产生了不同的转录本,很多人对于可变剪切的研究有很多的困惑,比如有没有现成的软件可以研究单个样本中的可变剪切事 ...

  10. 使用ASProfile分析可变剪切事件

    欢迎关注"生信修炼手册"! ASprofile是一款识别可变剪切事件的软件,该软件可以直接将同一个基因的多个转录本进行比较,从而鉴定可变剪切事件,官网如下 https://ccb. ...

最新文章

  1. 清华学长免费分享Java基础核心知识点基础篇(2)
  2. Angular getOrCreateInjectable的实现原理调试
  3. uva 10985 Rings'n'Ropes
  4. 远程客户端连接linux,远程控制服务(SSH)之Linux环境下客户端与服务端的远程连接...
  5. PKU/POJ 2054 Color a Tree
  6. 中国大学生mooc大数据技术原理与应用(林子雨)答案
  7. unity实现游戏帧同步之确定性物理引擎
  8. python股票收益率计算_股票分析之——收益率(附完整代码和讲解)
  9. nginx日志中$request_body 十六进制字符(\\x22) 引号问题处理记录
  10. KS检验、qq图、Scalability可扩展性
  11. HW--DSF服务配置文件
  12. 仿抖音视频详情页点赞红心动效
  13. 【计算机网络】使用Chrome的Network面板分析HTTP报文
  14. python抓取财务数据_Python与财务「上」——数据采集篇
  15. 最新最全的手机号正则表达式及其他常用正则校验
  16. 每个月有5000元结余,买基金定投好还是扔余额宝?
  17. 计算机网络技术毕业生实习报告_计算机网络专业毕业生实习报告
  18. N卡和A卡怎么设置高性能模式|独立显卡怎么设置最佳
  19. Android 怎么获取手机端的ip地址
  20. 安卓监听手机USB接口拔插警报广播

热门文章

  1. 刷题一个半月,一口气拿下腾讯、华为、Oppo 、微软7个大厂offer,字节跳动薪资涨幅60%!...
  2. windows系统中误删文件恢复
  3. 【用html做个人简历的网页(初级)】
  4. html个人主页实验报告,HTML个人主页实验报告.docx
  5. 基于Docker搭建RabbitMQ集群(多台服务器)
  6. 【ISO】Windows10系统ISO镜像怎么从微软官网下载?
  7. Mastermind游戏
  8. Python四六级考试,快来测试一下自己的编程水平吧
  9. 重装linux后没声音,安装虚拟机后没声音了
  10. 华为ar路由器wed登陆和配置方法及故障问题