IsoformSwitchAnalyzeR 可变剪切分析

曾经我用 rMATS 进行可变剪切分析,现在我觉得 IsoformSwitchAnalyzeR 更香。

IsoformSwitchAnalyzeR 功能总结如下。

In summary, IsoformSwitchAnalyzeR enables annotation of isoforms with intron retention, ORF, NMD sensitivity, coding potential, protein domains and signal peptides (and many more), resulting in the ability to predict important functional consequences of isoform switches in both individual genes and on a genome wide level.

注:

  • ORF: Open Reading Frame
  • NMD: Non-sense Mediated Decay. 真核生物消除提前出现终止密码的错误 mRNA 机制。
  • IDP: intrinsically disordered protein. 无固定三维结构的蛋白。传统上大家认为蛋白功能依赖于稳定的三维结构,但是IDP缺乏稳定结构,一些IDP与其他大分子结合后会有固定的三维结构。 总体而言,IDP在许多方面与结构蛋白不同,并且倾向于具有独特的功能,结构,序列,相互作用,进化和调控。

总而言之 IsoformSwitchAnalyzeR 不仅仅是分析可变剪切事件,还整合了蛋白结构等信息用于判定可变剪切是否影响蛋白功能,同时包含了基因组整体的分析。

本文用 RNA-seq 数据过一遍 IsoformSwitchAnalyzeR 分析流程。输入数据是 Salmon 定量结果,不知道 Salmon 如何用的同学赶紧去看 《Salmon 进行转录本定量》

用 BiocManager 安装。

BiocManager::install("IsoformSwitchAnalyzeR")
library(IsoformSwitchAnalyzeR, quietly=TRUE)

导入 Salmon 定量数据。Salmon 每个样本结果在单独目录,这里 parentDir 是这些目录的上级目录,能包含所有结果。

> isoformExpr <- importIsoformExpression(parentDir="/ExamplePath/S
almon", pattern="quant.sf")
Step 1 of 3: Identifying which algorithm was used...
    The quantification algorithm used was: Salmon
    Found 8 quantification file(s) of interest
Step 2 of 3: Reading data...
reading in files with read_tsv
1 2 3 4 5 6 7 8 
Step 3 of 3: Normalizing FPKM/TxPM values via edgeR...
Done

导入后会被保存到列表对象。包含每个转录本的 read counts 和丰度 TxPM 以及有效长度等信息。

> str(isoformExpr)
List of 4
 $ abundance    :'data.frame':  227063 obs. of  9 variables:
  ..$ isoform_id: chr [1:227063] "ENST00000456328.2" "ENST00000450305.2" "ENST00000488147.1" 
"ENST00000619216.1" ...
  ..$ 3-13      : num [1:227063] 0.198 0 10.598 0 0 ...
  ..$ 3-16      : num [1:227063] 0.122 0 0.826 0 0 ...
  ..$ 3-17      : num [1:227063] 0 0 6.57 0 0 ...
  ..$ 3-2       : num [1:227063] 0.345 0 5.916 0 0 ...
  ..$ O_1       : num [1:227063] 0.173 0 8.588 0 0 ...
  ..$ O_2       : num [1:227063] 0.0979 0 10.6988 0 0 ...
  ..$ O_3       : num [1:227063] 0 0 10.9 0 0 ...
  ..$ O_4       : num [1:227063] 0 0 9.26 0 0 ...
 $ counts       :'data.frame':  227063 obs. of  9 variables:
  ..$ isoform_id: chr [1:227063] "ENST00000456328.2" "ENST00000450305.2" "ENST00000488147.1" 
"ENST00000619216.1" ...
  ..$ 3-13      : num [1:227063] 4.83 0 258.58 0 0 ...
  ..$ 3-16      : num [1:227063] 1.11 0 7.56 0 0 ...
  ..$ 3-17      : num [1:227063] 0 0 72.9 0 0 ...
  ..$ 3-2       : num [1:227063] 5.7 0 97.7 0 0 ...
  ..$ O_1       : num [1:227063] 3.58 0 177.87 0 0 ...
  ..$ O_2       : num [1:227063] 2.4 0 261.7 0 0 ...
  ..$ O_3       : num [1:227063] 0 0 206 0 0 ...
  ..$ O_4       : num [1:227063] 0 0 158 0 0 ...
 $ length       :'data.frame':  227063 obs. of  9 variables:
  ..$ isoform_id: chr [1:227063] "ENST00000456328.2" "ENST00000450305.2" "ENST00000488147.1" 
"ENST00000619216.1" ...
  ..$ 3-13      : num [1:227063] 1497.8 472.9 1191.8 11.1 552.8 ...
  ..$ 3-16      : num [1:227063] 1515.1 490.1 1209.1 10.7 570.1 ...
  ..$ 3-17      : num [1:227063] 1504.9 479.9 1198.9 10.1 559.9 ...
  ..$ 3-2       : num [1:227063] 1495.8 470.9 1189.8 10.4 550.8 ...
  ..$ O_1       : num [1:227063] 1501.2 476.3 1195.2 10.2 556.2 ...
  ..$ O_2       : num [1:227063] 1500.2 475.2 1194.2 10.3 555.2 ...
  ..$ O_3       : num [1:227063] 1494.8 469.8 1188.8 10.7 549.8 ...
  ..$ O_4       : num [1:227063] 1496.2 471.3 1190.2 10.8 551.2 ...
 $ importOptions:List of 3
  ..$ calculateCountsFromAbundance: logi TRUE
  ..$ interLibNormTxPM            : logi TRUE
  ..$ normalizationMethod         : chr "TMM"

importRdata 函数整合所有需要的信息,包括表达数据、实验设计(Design Matrix)、注释信息等。

# 先构建 design matrix
> samples <- c("3-13", "3-16", "3-17", "3-2", "O_1", "O_2", "O_3", "O_4")
> condictions <- c(rep_len("Treatment", 4), rep_len("Control", 4))
> designM <- data.frame(sampleID=samples, condition=condictions)
> designM
  sampleID condition
1     3-13 Treatment2     
2     3-16 Treatment
3     3-17 Treatment4      
4     3-2 Treatment
5      O_1   Control
6      O_2   Control
7      O_3   Control
8      O_4   Control

# 构建 switchAnalyzeRlist 对象
> switchList <- importRdata(isoformCountMatrix=isoformExpr$counts, isoformRepExpression=isoformExpr$abundance, designMatrix=designM, isoformExonAnnoation="/ExamplePath/GRCh38_hg38/gencode.v33.annotation.gtf", isoformNtFasta="/ExamplePath/GRCh38_hg38/gencode.v33.transcripts.fa")
Step 1 of 6: Checking data...
Step 2 of 6: Obtaining annotation...
    importing GTF (this may take a while)
Step 3 of 6: Calculating gene expression and isoform fraction...
     99190 ( 43.89%) isoforms were removed since they were not expressed in any samples.
Step 4 of 6: Merging gene and isoform expression...  |======================================================================| 100%Step 5 of 6: Making comparisons...  |======================================================================| 100%
Step 6 of 6: Making switchAnalyzeRlist object...
Done

这里 isoformNtFasta 是每个转录本的 fasta 序列文件,在 Salmon 建立索引时也要用到。完成后返回 switchAnalyzeRlist 对象。
进行过滤,减少下游分析计算量。

> switchListF <- preFilter(switchList)
The filtering removed 65336 ( 51.53% of ) transcripts. There is now 61459 isoforms left

分析差异表达的 isoform (差异可变剪切分析)。

> switchListD <- isoformSwitchTestDEXSeq(switchAnalyzeRlist=switchListF, alpha=0.05)         
Step 1 of 2: Testing each pairwise comparisons with DEXSeq (this might be a bit slow)...    Estimated time (for dataset with ~30.000 isoforms): 1.7 min
Step 2 of 2: Integrating result into switchAnalyzeRlist...
    Isoform switch analysis was performed for 11580 gene comparisons (100%).
Done

这里 alpha 是调整后 P 值阈值。
ORF 分析和取得序列,包括将 ORF 序列翻译到氨基酸。

> switchListO <- analyzeORF(switchListD)
Step 1 of 3 : Extracting transcript sequences...
Step 2 of 3 : Locating ORFs of interest...
  |======================================================================| 100%
Step 3 of 3 : Scanning for PTCs...
683 putative ORFs were identified and analyzed
Done

> switchListS <- extractSequence(switchListO, pathToOutput="/ExamplePath/IsoformSequence")
Step 1 of 3 : Extracting transcript nucleotide sequences...
Step 1 of 3 : Extracting ORF AA sequences...
Step 2 of 3 : Preparing output...
Done

> extractSwitchSummary(switchListS)
            Comparison nrIsoforms nrGenes
1 Control vs Treatment

文件将被输出到 pathToOutput 指定目录,输出的文件可以供 CPAT, Pfam, SignalP 等分析。这些软件的分析结果,接下来整合到 switchAnalyzeRlist 对象里。
注:到这里就用输出的序列文件自行做 CPAT, Pfam, SignalP 分析,取得这些分析结果后再往下继续可变剪切分析。当然你也可以不做这些分析或只做部分,我这里做了 CPAT 和 Pfam 没做 SignalP 分析。

> switchListC <- analyzeCPAT(switchListS, pathToCPATresultFile="/ExamplePath/IsoformSequence/CPAT.txt", codingCutoff=0.364, removeNoncodinORFs=FALSE)
Added coding potential to 723 (100%) transcripts

> switchListP <- analyzePFAM(switchListC, pathToPFAMresultFile="/ExamplePath/IsoformSequence/isoformSwitchAnalyzeR_isoform_AA.out.fa")                            
Converting AA coordinats to transcript and genomic coordinats...
  |======================================================================| 100%
Added domain information to 374 (51.73%) transcripts

进行可变剪切分析。

> switchListA <- analyzeAlternativeSplicing(switchListP)                                     
Step 1 of 3: Massaging data...
Step 2 of 3: Analyzing splicing...
  |======================================================================| 100%
Step 3 of 3: Preparing output...
Done

> switchListCQ <- analyzeSwitchConsequences(switchListA, consequencesToAnalyze=c("intron_retention", "coding_potential", "ORF_seq_similarity", "NMD_status", "domains_identified"))       
Step 1 of 4: Extracting genes with isoform switches...
Step 2 of 4: Analyzing 126 pairwise isoforms comparisons...
  |======================================================================| 100%
Step 3 of 4: Massaging isoforms comparisons results...
Step 4 of 4: Preparing output...
Identified  genes with containing isoforms switching with functional consequences...

这里 consequencesToAnalyze 根据已经整合的注释数据进行选择,我这里整合了 CPAT 结果就可以加入 coding_potential 分析。没有整合 SignalP 结果,就不能进行 signal_peptide_identified 分析。

输出可变剪切结果图, n 是数目 Inf 代表输出所有结果。

> switchPlotTopSwitches(switchListCQ, n=Inf, pathToOutput="/ExamplePath/ASEvents")                                                                             
Extracting data...
Creating 99 plots...
  |======================================================================| 100%
Made 99 plots of genes with isoform switching

输出所有的可变剪切事件后,可以查看自己感兴趣的基因/事件。下面是我这次结果的几个图。从图中可以查看每个 isoform 结构以及被样本使用情况以及组间是否显著差异。


结果示例1
结果示例2
结果示例3

下面的函数可以查看基因组总体的可变剪切分析。

> extractSwitchSummary(switchListCQ)
            Comparison nrIsoforms nrGenes
1 Control vs Treatment        110      99

> pdf("/ExamplePath/ASEvents/SplicingSummary.pdf")
> print(extractSplicingSummary(switchListCQ))
> print(extractSplicingEnrichment(switchListCQ))
> print(extractSplicingGenomeWide(switchListCQ))

SplicingSummary 图示例:


结果示例4
结果示例5
结果示例6

第二个图画的是 prop.test 函数结果。表明 gain/loss 占比是否显著的改变。0.5表示占比没有改变。
各简写含义:

  • IR : Intron Retention.
  • A5 : Alternative 5’ donor site (changes in the 5’end of the upstream exon).
  • A3 : Alternative 3’ acceptor site (changes in the 3’end of the downstream exon).
  • ATSS : Alternative Transcription Start Site.
  • ATTS : Alternative Transcription Termination Site.
  • ES : Exon Skipping.
  • MES : Multiple Exon Skipping. Skipping of >1 consecutive exons.
  • MEE : Mutually Exclusive Exons.

[参考]
IsoformSwitchAnalyzeR.utf8

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 先做个小松鼠吧,因为对可变剪切实在知之甚少,所以首先是搜狗搜索,选择前十条,做大致性理解。搜索每个大标题参考后的的...
    小梦游仙境阅读 3,100评论 0 5
  • IsoformSwitchAnalyzeR包是2019年才发布的一个分析包,更充分地发挥了RNA-seq数据的价值...
    小贝学生信阅读 4,751评论 1 7
  • 欢迎关注”生信修炼手册”! MISO是一款经典的可变剪切分析工具,和rmats类似,该软件也支持对可变剪切事件进行...
    生信修炼手册阅读 9,736评论 3 19
  • 工作、生活逐渐变得稳定、有规律。但人似乎机械般在运转,个个木然失色。 打破这一格局的思维与感知能力已失去,而彼此仍...
    素见阅读 247评论 0 0
  • 生活中就餐使用筷子,这是个太平凡的动作,每个人使用筷子的姿势多少有些差异,在日常生活中如果注意到这些细微的小...
    寞行随笔阅读 322评论 0 2