Bioc2016: RNA-seq EDAgydF4y2Ba

迈克尔的爱gydF4y2Ba

2016年6月26日gydF4y2Ba

本次研讨会的目标gydF4y2Ba

我们将gydF4y2Ba不gydF4y2Ba封面,但你可以在其他地方读到:gydF4y2Ba

基因注释gydF4y2Ba

我们首先观察两个基因,USF2和CHPF。让我们从这些基因中获得一些信息gydF4y2BaHomo.sapiensgydF4y2Ba包中。我们会把转录本ID和名字和基因符号一起取出来。gydF4y2Ba

图书馆gydF4y2Ba(Homo.sapiens)gydF4y2Ba列gydF4y2Ba(Homo.sapiens)gydF4y2Ba
##[1]“accnum”“alias”“cdschrom”“cdsend”##[5]“cdsid”“cdsname”“cdsstart”“cdsstrand”##[9]“definition”“ensembl”“ensemblprot”“ensembltrans”##[13]“entrezid”“酶”“证据”“证据all”## b[17]“exonchrom”“exonend”“exonid”“exonname”## b[21]“exonrank”“exonstart”“exonstrand”“geneid”##[25]“genename”“go”“goall”“goid”## b[29]“ipi”“map”“omim”“本体”##[33]“ontologyall”“path”“pfam”“pmid”##[37]“prosite”“refseq”“symbol”“term”##[41]“txchrom”“txend”“txid”“txname”##[45]“txstart”“txstrand”“txtype”“ucsckg”##[49]“unigene”“uniprot”gydF4y2Ba
g < -gydF4y2Ba列表gydF4y2Ba() g [[gydF4y2Ba“USF2”gydF4y2Ba]] < -gydF4y2Ba选择gydF4y2Ba(Homo.sapiensgydF4y2Ba“USF2”gydF4y2Ba,gydF4y2BacgydF4y2Ba(gydF4y2Ba“TXID”gydF4y2Ba,gydF4y2Ba“TXNAME”gydF4y2Ba),gydF4y2Ba“象征”gydF4y2Ba)gydF4y2Ba
## 'select()'返回1:多个键和列之间的映射gydF4y2Ba
g [[gydF4y2Ba“CHPF”gydF4y2Ba]] < -gydF4y2Ba选择gydF4y2Ba(Homo.sapiensgydF4y2Ba“CHPF”gydF4y2Ba,gydF4y2BacgydF4y2Ba(gydF4y2Ba“TXID”gydF4y2Ba,gydF4y2Ba“TXNAME”gydF4y2Ba),gydF4y2Ba“象征”gydF4y2Ba)gydF4y2Ba
## 'select()'返回1:多个键和列之间的映射gydF4y2Ba
ggydF4y2Ba
## $USF2 ##符号TXID TXNAME ## 1 USF2 66826 uc010xss。1 ## 2 USF2 66827 uc002nyq。1 ## 3 USF2 66828 uc002nyr。1 ## 4 USF2 66829 uc002nyt。1 ## 5 USF2 66830 uc002nyv。1## ## $CHPF ## SYMBOL TXID TXNAME ## 1 CHPF 12798 uc010zlh.2 ## 2 CHPF 12799 uc002vmc.4

我们可以用gydF4y2BaTxDbgydF4y2Ba目的获得这两个基因转录本的外显子。的gydF4y2BaexonsBygydF4y2Ba函数返回gydF4y2BaGRangesListgydF4y2Ba对象,并通过指定gydF4y2Ba=“tx”gydF4y2Ba在这个范围内gydF4y2BaGRangesListgydF4y2Ba我们可以找到每个转录本的每个外显子的grange。在gydF4y2Ba光大通信gydF4y2Ba我们有每个转录本的外显子,用转录本ID标记。然后,我们使用前一组的信息提取USF2和CHPF的转录本:gydF4y2Ba

图书馆gydF4y2Ba(txdb . hsapiens . ucsc .hg19. knowngene) txdb <-gydF4y2BaTxDb.Hsapiens.UCSC.hg19。knownGene ebt <-gydF4y2BaexonsBygydF4y2Ba(txdbgydF4y2Ba通过=gydF4y2Ba“tx”gydF4y2Ba)gydF4y2Ba头gydF4y2Ba(gydF4y2Ba的名字gydF4y2Ba(光大通信))gydF4y2Ba
##[1]“1”“2”“3”“4”“5”“6”gydF4y2Ba
usf2 < -gydF4y2Ba光大通信[g [[gydF4y2Ba“USF2”gydF4y2Ba[]$TXID] chpf <-gydF4y2Ba光大通信[g [[gydF4y2Ba“CHPF”gydF4y2Ba]] $ TXID]gydF4y2Ba

我们可以看看这些:gydF4y2Ba

usf2gydF4y2Ba
## $66826 ## GRanges对象,包含9个范围和3个元数据列:# # seqnames范围链| exon_id exon_name # # < Rle > < IRanges > < Rle > | <整数> <人物> # # [1]chr19(35759896、35759896)+ | 239103 < NA > # # [2] chr19(35760349、35760349)+ | 239104 < NA > # # [3] chr19(35760484、35760484)+ | 239105 < NA > # # [4] chr19(35760706、35760706)+ | 239106 < NA > # # [5] chr19(35761350、35761350)+ | 239107 < NA > # # [6] chr19(35761621、35761621)+ | 239108 < NA > # # [7] chr19(35761986、35761986)+ | 239110 < NA > # # [8] chr19 (35769601,35769695] + | 239111  ## [9] chr19 [35769849, 35770211] + | 239113  ## exon_rank ##  ## [1] 1 ## [2] 2 ## [3] 3 ## [4] 4 ## [5] 5 ## [6] 6 ## [7] 7 ## [8] 8 ## [9] 9 ## ## $66827 ## GRanges对象,10个范围和3个元数据列:# # seqnames范围链| exon_id exon_name exon_rank # # [1] chr19(35759896、35759896)+ | 239103 < NA > 1 # # [2] chr19(35760349、35760349)+ | 239104 < NA > 2 # # [3] chr19(35760484、35760484)+ | 239105 < NA > 3 # # [4] chr19(35760706、35760706)+ | 239106 < NA > 4 # # [5] chr19(35761350、35761350)+ | 239107 < NA > 5 # # [6] chr19(35761621、35761621)+ | 239108 < NA > 6 # # [7] chr19(35761986、35761986)+ | 239110 < NA > 7 # # [8] chr19(35769601、35769601)+ | 239111 < NA > 8 # # [9] chr19 (35769849,35769977] + | 239112  9 ## [10] chr19 [35770070,35770718] + | 239115  10 ## ##…## <3个元素> ## ------- ## seqinfo:来自hg19基因组的93个序列(1个循环)gydF4y2Ba
chpfgydF4y2Ba
##长度为2的GRangesList对象:## $12798## seqnames ranges strand | exon_id exon_name ##    |  ## [2] chr2 [220406338,220406911] - | 46733  ## [3] chr2 [220405668,220405847] - | 46732  ## [4] chr2 [220403669, 220405364] - | 46731  ## [1] 1 ## [2] 2 ## [3] 3 ## [4] 4 ## ## $12799 ## GRanges对象,4个范围和3个元数据列:## seqnames ranges | exon_id exon_name exon_rank ## [1] chr2 [220407947, 220408487] - | 46735  1 ## [2] chr2 [220406338, 220406911] - | 46733  2 ## [3] chr2 [220405668, 220405847] - | 46732  3 ## [4] chr2 [220403669, 220405364] - | 46731  4 ## ## ------- ## seqinfo:来自hg19基因组的93个序列(1个循环)gydF4y2Ba

如果我们问gydF4y2Ba宽度gydF4y2Ba对于外显子,我们得到angydF4y2BaIntegerListgydF4y2Ba.如果我们按照这个命令gydF4y2Ba总和gydF4y2Ba,我们得到每个文本的长度。gydF4y2Ba

宽度gydF4y2Ba(usf2)gydF4y2Ba
##长度为5的IntegerList ## [["66826"]] 171 47 119 201 151 88 59 59 95 363 ## [["66827"]] 171 47 119 201 151 88 59 95 129 649 ## [["66828"]] 171 47 119 151 88 59 95 129 649 ## [["66829"]] 171 47 119 47 59 59 95 129 649 ## [["66830"]] 119 201 151 88 59 95 105 649gydF4y2Ba
总和gydF4y2Ba(gydF4y2Ba宽度gydF4y2Ba(usf2))gydF4y2Ba
## 66826 66827 66828 66829 66830 ## 1294 1709 1508 1316 1467gydF4y2Ba

计算基因转录本外显子的总范围将是有用的:gydF4y2Ba

usf2.r<-范围gydF4y2Ba(gydF4y2BaunlistgydF4y2Bachpf (usf2))。r < -gydF4y2Ba范围gydF4y2Ba(gydF4y2BaunlistgydF4y2Ba(chpf))gydF4y2Ba

绘制基因模型gydF4y2Ba

现在让我们使用碱基R图形来可视化转录本的外显子。首先,让我们写一行代码,绘制USF2单个转录本的外显子:gydF4y2Ba

图书馆gydF4y2Ba(rafalib)透镜<-gydF4y2Ba长度gydF4y2Ba(usf2)gydF4y2BanullplotgydF4y2Ba(gydF4y2Ba开始gydF4y2Ba(usf2.r),gydF4y2Ba结束gydF4y2Ba(usf2.r),gydF4y2Ba0gydF4y2Ba,gydF4y2Ba2gydF4y2Ba)gydF4y2Ba段gydF4y2Ba(gydF4y2Ba开始gydF4y2Ba(usf2 [[gydF4y2Ba1gydF4y2Ba]]),gydF4y2Ba代表gydF4y2Ba(gydF4y2Ba1gydF4y2Ba,镜头gydF4y2Ba1gydF4y2Ba]),gydF4y2Ba结束gydF4y2Ba(usf2 [[gydF4y2Ba1gydF4y2Ba]]),gydF4y2Ba代表gydF4y2Ba(gydF4y2Ba1gydF4y2Ba,镜头gydF4y2Ba1gydF4y2Ba]),gydF4y2Balwd =gydF4y2Ba3.gydF4y2Ba)gydF4y2Ba

现在,为了避免对每个基因重复这个代码,让我们写一个通用函数来绘制一个基因的每个转录本的外显子,包含在gydF4y2BaGRangesListgydF4y2Bax。gydF4y2Ba

plotGRangesList < -gydF4y2Ba函数(x,gydF4y2Baname =gydF4y2Ba""gydF4y2Ba) {r <-gydF4y2Ba范围gydF4y2Ba(gydF4y2BaunlistgydF4y2Ba(gydF4y2Ba范围gydF4y2Ba(x)))gydF4y2BanullplotgydF4y2Ba(gydF4y2Ba开始gydF4y2Ba(r),gydF4y2Ba结束gydF4y2Ba(r),gydF4y2Ba0.5gydF4y2Ba,gydF4y2Ba长度gydF4y2Ba(x) +gydF4y2Ba0.5gydF4y2Ba,gydF4y2Ba主要=gydF4y2Ba的名字,gydF4y2Baxlab =gydF4y2BaseqnamesgydF4y2Ba(x [[gydF4y2Ba1gydF4y2Ba]] [gydF4y2Ba1gydF4y2Ba)透镜<-gydF4y2BaelementNROWSgydF4y2Ba(x) for (i ingydF4y2Baseq_alonggydF4y2Ba(x)) {gydF4y2Ba段gydF4y2Ba(gydF4y2Ba开始gydF4y2Ba(x[[我]]),gydF4y2Ba代表gydF4y2Ba(镜头[我]),我gydF4y2Ba结束gydF4y2Ba(x[[我]]),gydF4y2Ba代表gydF4y2Ba(镜头[我]),我gydF4y2Balwd =gydF4y2Ba3.gydF4y2Ba)}}gydF4y2BaplotGRangesListgydF4y2Ba(usf2gydF4y2Ba“USF2”gydF4y2Ba)gydF4y2Ba

plotGRangesListgydF4y2Ba(chpfgydF4y2Ba“CHPF”gydF4y2Ba)gydF4y2Ba

对齐阅读gydF4y2Ba

我们提供了四个BAM文件供本次研讨会使用,以便我们可以探索使用Bioconductor的真实RNA-seq片段的外观。这四个文件与GEUVADIS RNA-seq样本相关联,使用gydF4y2Ba明星gydF4y2Ba读取校准器版本2.5.0,对准Illumina基因组包装的hg19基因组。BAM文件仅包含成对端读取总数的子集,以限制研讨会所需的磁盘空间。这些文件只包含了USF2和CHPF基因重叠的片段。关于实验的完整细节可以通过使用ERR ID在gydF4y2BaENAgydF4y2Ba的网站。gydF4y2Ba

dir < -gydF4y2Ba执行gydF4y2Ba(gydF4y2Ba“extdata”gydF4y2Ba,gydF4y2Ba包=gydF4y2Ba“bioc2016eda”gydF4y2Ba)样本<-gydF4y2Baread.csvgydF4y2Ba(gydF4y2Bafile.pathgydF4y2Ba(dir,gydF4y2Ba“samples.csv”gydF4y2Ba)样品gydF4y2Ba
##运行pop center ## 1 ERR188204 TSI 1 ## 2 ERR188317 TSI 1 ## 3 ERR188297 TSI 2 ## 4 ERR188088 TSI 2gydF4y2Ba

我们创建一个指向磁盘上这些文件的向量。gydF4y2Ba

图书馆gydF4y2Ba(GenomicAlignments) bamfiles <-gydF4y2Bafile.pathgydF4y2Ba(dir,gydF4y2Bapaste0gydF4y2Ba(样品来看,美元gydF4y2Ba“本”gydF4y2Ba))gydF4y2Bafile.existsgydF4y2Ba(bamfiles)gydF4y2Ba
##[1]真真真真gydF4y2Ba

我们没有对这些BAM文件进行排序或包含索引,因此首先必须对它们进行排序和索引。通常,你会在R之外使用,例如。gydF4y2BaSamtoolsgydF4y2Ba.gydF4y2Ba

For (i in)gydF4y2Baseq_alonggydF4y2Ba(bamfiles)) {gydF4y2BasortBamgydF4y2Ba(bamfiles[我],gydF4y2Ba目的地=gydF4y2Bafile.pathgydF4y2Ba(dir,gydF4y2Bapaste0gydF4y2Ba(样本运行[我],美元gydF4y2Ba“_sort”gydF4y2Ba)))gydF4y2BaindexBamgydF4y2Ba(gydF4y2Bafile.pathgydF4y2Ba(dir,gydF4y2Bapaste0gydF4y2Ba(样本运行[我],美元gydF4y2Ba“_sort.bam”gydF4y2Ba))} bamfiles <-gydF4y2Bafile.pathgydF4y2Ba(dir,gydF4y2Bapaste0gydF4y2Ba(样品来看,美元gydF4y2Ba“_sort.bam”gydF4y2Ba))gydF4y2Bafile.existsgydF4y2Ba(bamfiles)gydF4y2Ba
##[1]真真真真gydF4y2Ba

现在我们可以为第一个BAM文件读入一些成对的对齐,特别是那些覆盖USF2的对齐。我们需要移除一些gydF4y2BaseqnamesgydF4y2Ba从gydF4y2Bausf2.rgydF4y2Ba范围,因为这些在BAM报头中不存在。gydF4y2Ba

usf2.r<-keepStandardChromosomesgydF4y2Ba(usf2.r) gap <-gydF4y2BareadGAlignmentPairsgydF4y2Ba(bamfiles [gydF4y2Ba1gydF4y2Ba),gydF4y2Baparam =gydF4y2BaScanBamParamgydF4y2Ba(gydF4y2Ba这=gydF4y2Bausf2.r)差距gydF4y2Ba
# # GAlignmentPairs对象与2453双,strandMode = 1和0元数据列:# # seqnames链:范围,范围# # < Rle > < Rle >: < IRanges >, < IRanges > # # [1] chr19 +: (35504852, 35504852), (35770345, 35770345) # # [2] chr19 +: (35760492, 35760492), (35760548, 35760548) # # [3] chr19 +: (35760495, 35760495), (35760578, 35760578) # # [4] chr19 +: (35760496, 35760496), (35760539, 35760539) # # [5] chr19 +: (35760501, 35760501), (35760539, 35760717 ] ## ... ... ... ... ... ... ...[2449] chr19 -:[35770623, 35770698]——[35770573,35770648]## [2450]chr19 -:[35770623, 35770698]——[35770572,35770647]## [2451]chr19 -:[35770627, 35770701]——[35770569,35770644]## [2452]chr19 -:[35770639, 35770714]——[35770605,35770680]## [2453]chr19 -:[35770643, 35770718]——[35770598,35770673]## ------- ## seqinfo:来自未知基因组的25个序列gydF4y2Ba

计算基因组覆盖率gydF4y2Ba

能够快速可视化这些排列是很有帮助的,其中一个概要可视化就是看到读取的数据落在基因组的哪个位置。这个图可以用gydF4y2Ba报道gydF4y2Ba功能:gydF4y2Ba

x < -gydF4y2Ba报道gydF4y2Ba(gap)浸。基因组< -gydF4y2Baas.integergydF4y2Ba(x [usf2.r] [[gydF4y2Ba“chr19”gydF4y2Ba]]) pos.genome <-gydF4y2BaseqgydF4y2Ba(gydF4y2Ba从=gydF4y2Ba开始gydF4y2Ba(usf2.r),gydF4y2Ba=gydF4y2Ba结束gydF4y2Ba(usf2.r))gydF4y2Ba情节gydF4y2Ba(cov.genome pos.genomegydF4y2Baxlab =gydF4y2Ba”位置(基因组)”gydF4y2Ba,gydF4y2Baylab =gydF4y2Ba“报道”gydF4y2Ba)gydF4y2Ba

找到兼容的重叠gydF4y2Ba

这个函数gydF4y2BafindCompatibleOverlapsgydF4y2Ba可以用于这样做:查找哪些配对对齐与哪些转录本兼容。“Compatible”在这种情况下意味着剪接必须是兼容的:读连接必须与转录本的内含子完全对齐。详情请参见gydF4y2Ba装饰图案(“OverlapEncodings”)gydF4y2Ba.gydF4y2Ba

返回的对象属于该类gydF4y2Ba支安打gydF4y2Ba,可以被审问gydF4y2BaqueryHitsgydF4y2Ba而且gydF4y2BasubjectHitsgydF4y2Ba.转录本2和3具有最兼容的对齐,尽管它们也是最长的转录本。gydF4y2Ba

外交部< -gydF4y2BafindCompatibleOverlapsgydF4y2Ba(gap, usf2) fco .gydF4y2Ba
##命中8052次,0元数据列的对象:## queryHits subjectHits ##   ## [1] 2 1 ## [2] 2 2 ## [3] 5 ## [4] 3 1 ## [5] 3 2 ## ... ... ...## [8048] 2452 5 ## [8049] 2453 2 ## [8050] 2453 3 ## [8051] 2453 4 ## [8052] 2453 5 ## ------- ## # queryLength: 2453 / subjectLength: 5gydF4y2Ba
countSubjectHitsgydF4y2Ba(外交部)gydF4y2Ba
## [1] 1295 2004 1971 1360 1422gydF4y2Ba

注意,查询的元素(配对对齐)可以与主题中的多个元素(转录本)兼容。因此,我们可能希望将成对的对齐分类为gydF4y2Ba等价类gydF4y2Ba,由对齐与之兼容的转录本集定义。将RNA-seq读入等价类的早期建议可以在gydF4y2BaRNA-Seq数据的统计建模gydF4y2Ba由Salzman, J., Jiang, H.和Wong, W.H.所作gydF4y2Ba旗鱼纸gydF4y2Ba,讨论了read k-mers的等价类。gydF4y2Ba

在这里,我们将使用1或0重命名每个配对对齐,如果它与转录本兼容或不兼容。所以gydF4y2Ba1-1-0-0-1gydF4y2Ba意味着配对对齐与转录本1、2和5兼容。gydF4y2Ba

标签< -gydF4y2Ba表格gydF4y2Ba(gydF4y2BaqueryHitsgydF4y2Ba(外交部)gydF4y2BasubjectHitsgydF4y2Ba(fco)) TAB <-gydF4y2Baas.matrixgydF4y2Ba(tab) frags <-gydF4y2Ba应用gydF4y2Ba(选项卡,gydF4y2Ba1gydF4y2Ba粘贴,gydF4y2Ba崩溃=gydF4y2Ba“-”gydF4y2Ba)碎片弹gydF4y2Ba1gydF4y2Ba]gydF4y2Ba
## 2 ## 1-1-0-0-1gydF4y2Ba

然后,我们可以使用它们的新名称将成对的对齐制成表格。注意,我们有相同的对齐数量,就像我们计算查询命中的唯一数量一样。gydF4y2Ba

表格gydF4y2Ba(碎片弹)gydF4y2Ba
# #碎片弹# # 0-0-0-0-1 0-0-0-1-0 0-0-1-0-0 0-1-1-0-1 0-0-1-0-0 0-0-0-1-0 0-0-0-0-1 # # 14 1 11 14 # # 1 139 583 1-1-0-0-1 1-1-1-0-0 1-1-1-0-1 1-1-1-0-0 1-1-0-0-1 # # 44 35 565 422 215gydF4y2Ba
总和gydF4y2Ba(gydF4y2Ba表格gydF4y2Ba(碎片弹))gydF4y2Ba
## [1] 2044gydF4y2Ba
长度gydF4y2Ba(gydF4y2Ba独特的gydF4y2Ba(gydF4y2BaqueryHitsgydF4y2Ba(外交部)))gydF4y2Ba
## [1] 2044gydF4y2Ba

通过扫描表格,我们可以看到许多读取与转录1、4或5不兼容。gydF4y2Ba

映射到文本gydF4y2Ba

另一个有用的操作是从基因组坐标映射到转录坐标。请注意,如果我们只想从一开始就有转录本对齐,我们可以使用诸如gydF4y2BaRSEMgydF4y2Ba或gydF4y2BaRapMapgydF4y2Ba来生成一个BAM文件包含gydF4y2Ba转录组gydF4y2Ba比对。对于许多配对,这样的文件必然包含配对的读取到与其相容的基因的许多异构体。基因组比对文件只会在配对处于不同位置时包含多个比对gydF4y2Ba基因组gydF4y2Ba位点。gydF4y2Ba

为了将我们的基因组坐标映射到转录坐标,我们必须分别映射每个片段的开始和结束,因为gydF4y2BamapToTranscriptsgydF4y2Ba不工作gydF4y2BaGAlignmentPairsgydF4y2Ba.此外,从手册页中我们可以读到,“成功的映射发生在gydF4y2BaxgydF4y2Ba完全在gydF4y2Ba成绩单gydF4y2Ba范围”。因此,我们将把每个与我们感兴趣的转录本兼容的成对对齐分解为开始位置和结束位置,将这些位置映射到转录本坐标,然后重新构建片段。gydF4y2Ba

在这个例子中,我们没有跟踪片段链,但是我们可以简单地通过分别处理正负链片段来做到这一点。gydF4y2Ba

idx < -gydF4y2BaqueryHitsgydF4y2Ba(外交部)gydF4y2BasubjectHitsgydF4y2Ba(外交部)= =gydF4y2Ba3.gydF4y2Bagr <-gydF4y2Ba作为gydF4y2Ba(gap (idx),gydF4y2Ba“农庄”gydF4y2Ba)gydF4y2Ba链gydF4y2Ba(gr) < -gydF4y2Ba“*”gydF4y2Bam2tx。开始<-mapToTranscriptsgydF4y2Ba(gydF4y2Ba调整gydF4y2Ba(gr,gydF4y2Ba宽度=gydF4y2Ba1gydF4y2Ba,gydF4y2Ba修复=gydF4y2Ba“开始”gydF4y2Ba), usf2 [gydF4y2Ba3.gydF4y2Ba]) m2tx.startgydF4y2Ba
## seqnames ranges strand | xHits transcriptsHits ##    |   ## [1] 66828 [236, 236] + | 1 1 ## [2] 66828 [238, 238] + | 2 1 ## [3] 66828 [238, 238] + | 3 1 ## [4] 66828 [241, 241] + | 41 ## [5] 66828 [251, 251] + | 51 ## ... ... ... ... . ... ...## [1967] 66828 [1363,1363] + | 1967 1 ## [1968] 66828 [1362,1362] + | 1968 1 ## [1969] 66828 [1359,1359] + | 1969 1 ## [1970] 66828 [1395,1395] + | 1970 1 ## [1971] 66828 [1388,1388] + | 1971 1 ## ------- # seqinfo: 1个来自未知基因组的序列;没有seqlengthsgydF4y2Ba

现在我们对结束执行与开始相同的操作,将它们映射到转录本坐标。然后我们创建一个gydF4y2Ba农庄gydF4y2Ba在转录坐标空间中,使用成对对齐的开始和结束。gydF4y2Ba

下面的代码适用于正链转录本,因为由给出的片段位置gydF4y2Ba开始gydF4y2Ba(范围最左边的位置)在文本坐标中也位于左侧。对于负链转录本,我们必须反转这些。gydF4y2Ba

m2tx。结束<-mapToTranscriptsgydF4y2Ba(gydF4y2Ba调整gydF4y2Ba(gr,gydF4y2Ba宽度=gydF4y2Ba1gydF4y2Ba,gydF4y2Ba修复=gydF4y2Ba“结束”gydF4y2Ba), usf2 [gydF4y2Ba3.gydF4y2Ba]) m2tx <-gydF4y2Ba农庄gydF4y2Ba(gydF4y2BaseqnamesgydF4y2Ba(m2tx.start),gydF4y2BaIRangesgydF4y2Ba(gydF4y2Ba开始gydF4y2Ba(m2tx.start),gydF4y2Ba开始gydF4y2Bam2tx (m2tx.end)))gydF4y2Ba
## seqnames ranges string ##    ## [1] 66828 [236, 330] * ## [2] 66828 [238, 334] * ## [3] 66828 [238, 363] * ## [4] 66828 [241, 469] * ## [5] 66828 [251, 387] * ## ... ... ... ...## [1967] 66828 [1363,1488] * ## [1968] 66828 [1362,1488] * ## [1969] 66828 [1359,1491] * ## [1970] 66828 [1395,1504] * ## [1971] 66828 [1388,1508] * ## ------- ## seqinfo:来自未指定基因组的1个序列;没有seqlengthsgydF4y2Ba

将这组操作转换为一个函数将非常方便,这样我们就可以为通用BAM文件和记录重复该操作。gydF4y2Ba

readTxFragments < -gydF4y2Ba函数(文件,文本){r <-gydF4y2Ba范围gydF4y2Ba(记录[[gydF4y2Ba1gydF4y2Ba]]) r <-gydF4y2BakeepStandardChromosomesgydF4y2Ba(右)gydF4y2Ba# suppress关于模糊配对对齐的警告gydF4y2BasuppressWarningsgydF4y2Ba({gap <-gydF4y2BareadGAlignmentPairsgydF4y2Ba(文件,gydF4y2Baparam =gydF4y2BaScanBamParamgydF4y2Ba(gydF4y2Ba这=gydF4y2BaR))}) fco <-gydF4y2BafindCompatibleOverlapsgydF4y2Ba(gap, transcript) idx <-gydF4y2BaqueryHitsgydF4y2Ba(fco) gr <-gydF4y2Ba作为gydF4y2Ba(gap (idx),gydF4y2Ba“农庄”gydF4y2Ba)gydF4y2Ba链gydF4y2Ba(gr) < -gydF4y2Ba“*”gydF4y2Bam2tx。开始<-mapToTranscriptsgydF4y2Ba(gydF4y2Ba调整gydF4y2Ba(gr,gydF4y2Ba宽度=gydF4y2Ba1gydF4y2Ba,gydF4y2Ba修复=gydF4y2Ba“开始”gydF4y2Ba),转录)m2tx。< -结束gydF4y2BamapToTranscriptsgydF4y2Ba(gydF4y2Ba调整gydF4y2Ba(gr,gydF4y2Ba宽度=gydF4y2Ba1gydF4y2Ba,gydF4y2Ba修复=gydF4y2Ba“结束”gydF4y2Ba),转录)tx.strand <-gydF4y2Baas.charactergydF4y2Ba(gydF4y2Ba链gydF4y2Ba(成绩单)[[gydF4y2Ba1gydF4y2Ba]] [gydF4y2Ba1gydF4y2Ba) if (tx.strand ==gydF4y2Ba“+”gydF4y2Ba) {m2tx <-gydF4y2Ba农庄gydF4y2Ba(gydF4y2BaseqnamesgydF4y2Ba(m2tx.start),gydF4y2BaIRangesgydF4y2Ba(gydF4y2Ba开始gydF4y2Ba(m2tx.start),gydF4y2Ba开始gydF4y2Ba(m2tx.end)))}其他{m2tx <-gydF4y2Ba农庄gydF4y2Ba(gydF4y2BaseqnamesgydF4y2Ba(m2tx.start),gydF4y2BaIRangesgydF4y2Ba(gydF4y2Ba开始gydF4y2Ba(m2tx.end),gydF4y2Ba开始gydF4y2Ba(m2tx.start))}gydF4y2Ba

然后,我们可以计算不同文件的记录覆盖率。我们对测序中心的覆盖率进行着色,以确定相关覆盖率的差异。gydF4y2Ba

mypargydF4y2Ba()gydF4y2BanullplotgydF4y2Ba(gydF4y2Ba0gydF4y2Ba,gydF4y2Ba1600gydF4y2Ba,gydF4y2Ba0gydF4y2Ba,gydF4y2Ba900gydF4y2Ba,gydF4y2Baxlab =gydF4y2Ba”位置(tx)”gydF4y2Ba,gydF4y2Baylab =gydF4y2Ba“报道”gydF4y2Bai ingydF4y2Baseq_alonggydF4y2Ba(bamfiles)) {frags <-gydF4y2BareadTxFragmentsgydF4y2Ba(bamfiles[我],usf2 [gydF4y2Ba3.gydF4y2Ba])浸。tx < -gydF4y2Ba报道gydF4y2Ba(碎片弹)gydF4y2Ba行gydF4y2Ba(gydF4y2Baas.integergydF4y2Ba(cov.tx [[gydF4y2Ba1gydF4y2Ba]]),gydF4y2Ba坳=gydF4y2Ba样品中心[我],美元gydF4y2Balwd =gydF4y2Ba2gydF4y2Ba)}gydF4y2Ba

CHPF的第二份发言稿也是如此:gydF4y2Ba

mypargydF4y2Ba()gydF4y2BanullplotgydF4y2Ba(gydF4y2Ba0gydF4y2Ba,gydF4y2Ba3100gydF4y2Ba,gydF4y2Ba0gydF4y2Ba,gydF4y2Ba150gydF4y2Ba,gydF4y2Baxlab =gydF4y2Ba”位置(tx)”gydF4y2Ba,gydF4y2Baylab =gydF4y2Ba“报道”gydF4y2Bai ingydF4y2Baseq_alonggydF4y2Ba(bamfiles)) {frags <-gydF4y2BareadTxFragmentsgydF4y2Ba(bamfiles[我],chpf [gydF4y2Ba2gydF4y2Ba])浸。tx < -gydF4y2Ba报道gydF4y2Ba(碎片弹)gydF4y2Ba行gydF4y2Ba(gydF4y2Baas.integergydF4y2Ba(cov.tx [[gydF4y2Ba1gydF4y2Ba]]),gydF4y2Ba坳=gydF4y2Ba样品中心[我],美元gydF4y2Balwd =gydF4y2Ba2gydF4y2Ba)}gydF4y2Ba

碎片长度分布gydF4y2Ba

一旦我们在转录坐标中有了片段,就很容易观察到片段长度的分布。从更全面的角度来看,人们显然希望从许多或所有基因中提取片段。gydF4y2Ba

碎片弹< -gydF4y2BareadTxFragmentsgydF4y2Ba(bamfiles [gydF4y2Ba1gydF4y2Ba], usf2 [gydF4y2Ba3.gydF4y2Ba])gydF4y2Ba嘘gydF4y2Ba(gydF4y2Ba宽度gydF4y2Ba(碎片弹),gydF4y2Ba坳=gydF4y2Ba“灰色”gydF4y2Ba,gydF4y2Ba边境=gydF4y2Ba“白色”gydF4y2Ba)gydF4y2Ba

片段起始和长度图gydF4y2Ba

由Evans, s.n., Hower, V.和Pachter, L.提出了片段长度随片段起始的密度图。gydF4y2Ba序列普查方法的覆盖统计gydF4y2Ba可以在参考文献中的图6中看到。这张图有助于提醒我们RNA-seq数据是二维的,也有助于观察影响片段开始(片段位置最接近转录本5 ')和结束(最接近转录本3 ')的偏差。我们可以看到偏差为垂直和向下倾斜的45度线。我们使用透明性来允许在(起始,长度)平面的相同或附近位置进行过绘。gydF4y2Ba

mypargydF4y2Ba(gydF4y2Ba4gydF4y2Ba,gydF4y2Ba1gydF4y2Ba,gydF4y2Ba3月=gydF4y2BacgydF4y2Ba(gydF4y2Ba2gydF4y2Ba,gydF4y2Ba2gydF4y2Ba,gydF4y2Ba1gydF4y2Ba,gydF4y2Ba1gydF4y2Ba)) for (f in bamfiles) {frags <-gydF4y2BareadTxFragmentsgydF4y2Ba(f, usf2 [gydF4y2Ba3.gydF4y2Ba])gydF4y2Ba情节gydF4y2Ba(gydF4y2Ba开始gydF4y2Ba(碎片弹),gydF4y2Ba宽度gydF4y2Ba(碎片弹),gydF4y2Baxlim =gydF4y2BacgydF4y2Ba(gydF4y2Ba200gydF4y2Ba,gydF4y2Ba1300gydF4y2Ba),gydF4y2Baylim =gydF4y2BacgydF4y2Ba(gydF4y2Ba50gydF4y2Ba,gydF4y2Ba400gydF4y2Ba),gydF4y2Bapch =gydF4y2Ba15gydF4y2Ba,gydF4y2Ba坳=gydF4y2BargbgydF4y2Ba(gydF4y2Ba0gydF4y2Ba,gydF4y2Ba0gydF4y2Ba,gydF4y2Ba0gydF4y2Ba,.gydF4y2Ba2gydF4y2Ba),gydF4y2Bacex =gydF4y2Ba.gydF4y2Ba5gydF4y2Ba,gydF4y2Baxlab =gydF4y2Ba""gydF4y2Ba,gydF4y2Baylab =gydF4y2Ba""gydF4y2Ba)}gydF4y2Ba

对于CHPF,由于覆盖率较低,很难看到模式:gydF4y2Ba

mypargydF4y2Ba(gydF4y2Ba4gydF4y2Ba,gydF4y2Ba1gydF4y2Ba,gydF4y2Ba3月=gydF4y2BacgydF4y2Ba(gydF4y2Ba2gydF4y2Ba,gydF4y2Ba2gydF4y2Ba,gydF4y2Ba1gydF4y2Ba,gydF4y2Ba1gydF4y2Ba)) for (f in bamfiles) {frags <-gydF4y2BareadTxFragmentsgydF4y2Ba(f, chpf [gydF4y2Ba2gydF4y2Ba])gydF4y2Ba情节gydF4y2Ba(gydF4y2Ba开始gydF4y2Ba(碎片弹),gydF4y2Ba宽度gydF4y2Ba(碎片弹),gydF4y2Baxlim =gydF4y2BacgydF4y2Ba(gydF4y2Ba0gydF4y2Ba,gydF4y2Ba3000gydF4y2Ba),gydF4y2Baylim =gydF4y2BacgydF4y2Ba(gydF4y2Ba50gydF4y2Ba,gydF4y2Ba400gydF4y2Ba),gydF4y2Bapch =gydF4y2Ba15gydF4y2Ba,gydF4y2Ba坳=gydF4y2BargbgydF4y2Ba(gydF4y2Ba0gydF4y2Ba,gydF4y2Ba0gydF4y2Ba,gydF4y2Ba0gydF4y2Ba,.gydF4y2Ba2gydF4y2Ba),gydF4y2Bacex =gydF4y2Ba.gydF4y2Ba5gydF4y2Ba,gydF4y2Baxlab =gydF4y2Ba""gydF4y2Ba,gydF4y2Baylab =gydF4y2Ba""gydF4y2Ba)}gydF4y2Ba

提取转录本序列gydF4y2Ba

到目前为止,我们还没有看到转录序列。为了了解配对比对的分布是否与序列特征相关,我们需要提取转录本序列。我们将再次关注USF2的第三个副本和CHPF的第二个副本。我们可以用以下几行来提取转录序列:gydF4y2Ba

图书馆gydF4y2Ba(BSgenome.Hsapiens.UCSC.hg19) usf2。seq < -gydF4y2BaextractTranscriptSeqsgydF4y2Ba(Hsapiens usf2 [gydF4y2Ba3.gydF4y2Ba)) ((gydF4y2Ba1gydF4y2Ba]] chpf。seq < -gydF4y2BaextractTranscriptSeqsgydF4y2Ba(Hsapiens chpf [gydF4y2Ba2gydF4y2Ba)) ((gydF4y2Ba1gydF4y2Ba]] usf2.seqgydF4y2Ba
“DNAString”实例## seq: gtgagcgccgggctcggcccccccggccgccgcccgydF4y2Ba
chpf.seqgydF4y2Ba
“DNAString”实例## seq: GCCGAGCGCAAGAACCCTGCGCAGCCCAGAGCAG…CCTTTAATAAACTGGCCAAGTGTGGACTTGTGAgydF4y2Ba

读取开始时的常见序列gydF4y2Ba

我们可以看一下,在一份文字记录中,最接近文字记录5 '端的阅读序列。对于均匀分布的读取,我们期望看到,例如,所有64个3-mers显示相同:gydF4y2Ba

碎片弹< -gydF4y2BareadTxFragmentsgydF4y2Ba(bamfiles [gydF4y2Ba1gydF4y2Ba], usf2 [gydF4y2Ba3.gydF4y2Ba])gydF4y2Ba长度gydF4y2Ba(破片)/gydF4y2Ba4gydF4y2Ba^gydF4y2Ba3.gydF4y2Ba
## [1] 30.79688gydF4y2Ba

相反,我们看到一些3-mer更常见,这导致了前面图中的垂直线。gydF4y2Ba

开始。seq < -gydF4y2Ba作为gydF4y2Ba(gydF4y2Ba的观点gydF4y2Ba(usf2.seqgydF4y2Ba开始=gydF4y2Ba开始gydF4y2Ba(碎片弹),gydF4y2Ba宽度=gydF4y2Ba3.gydF4y2Ba),gydF4y2Ba“DNAStringSet”gydF4y2Baseq)。标签< -gydF4y2Ba表格gydF4y2Ba(start.seq)gydF4y2Ba排序gydF4y2Ba(seq.tabgydF4y2Ba减少=gydF4y2Ba真正的gydF4y2Ba)gydF4y2Ba
# #开始。seq## CGG CAG CCC CCA GGA CCG CAA CAC GCC CTG CGA CCT AGA GCA GGG AAA TGC CTT ## 132 119 116 97 89 86 80 79 78 67 58 57 56 55 54 49 40 39 ## GAG ATC GAC GAA GCG GTC TGG TTT AGG CGC CTC ACA GTG GTT AAC TGT AGC GAT ## 37 36 29 28 28 27 27 26 24 23 19 18 18 18 17 16 15 15 ## GCT CTA GGC TCC CAT TAC AAG ACG TCT AAT ATG ATT CGT TGA TTC ACC ACT TTA ## 15 14 13 13 11 11 10 9 9 8 8 8 8 8 8 7 7 7 ## TTG GTA TAG TCA AGT ATA GGT TAA TCG ## 6 5 4 4 2 1 1 1 1

同样的,对于3-mer,对于抄本中最接近3 '端的读音。gydF4y2Ba

结束。seq<-作为gydF4y2Ba(gydF4y2Ba的观点gydF4y2Ba(usf2.seqgydF4y2Ba结束=gydF4y2Ba结束gydF4y2Ba(碎片弹),gydF4y2Ba宽度=gydF4y2Ba3.gydF4y2Ba),gydF4y2Ba“DNAStringSet”gydF4y2Ba)结束。seq < -gydF4y2BareverseComplementgydF4y2Ba(end.seq seq)。标签< -gydF4y2Ba表格gydF4y2Ba(end.seq)gydF4y2Ba排序gydF4y2Ba(seq.tabgydF4y2Ba减少=gydF4y2Ba真正的gydF4y2Ba)gydF4y2Ba
# #结束。seq## CTC CTG CCT CTT CCC GGG CCG GTC GTT CGG CAG TCT CGC TCC CCA GCC GGC GCG ## 275 155 127 118 93 78 73 72 59 58 57 53 52 49 47 47 43 40 ## GCT GGA TTT CGT TGG TTC GCA TGC TCG TGA AGG ATC CAC CGA GTG CAT TTG GAA ## 30 26 26 24 24 21 20 20 18 18 17 17 15 15 15 14 13 12 ## GAC ATT TGT GTA CAA ACA AGC CTA GGT GAG TCA AAG AGT TTA ACC AGA TAC AAT ## 12 10 10 9 8 7 7 7 7 6 6 5 5 5 4 4 4 3 ## ACT GAT TAG AAA AAC ATG TAA ## 3 2 2 1 1 1 1

为了正确地推断片段的开头和结尾的偏差,人们需要查看许多或所有的转录本。这样的偏差计算是由许多软件进行,包括袖扣,eXpress,旗鱼,鲑鱼,kallisto和高山。gydF4y2Ba

片段序列特征gydF4y2Ba

最后,我们要研究的最后一种偏差是片段序列本身是否会影响片段在转录本上的分布。我们可以使用类似于上面的代码提取片段序列。gydF4y2Ba

碎片弹。seq<-作为gydF4y2Ba(gydF4y2Ba的观点gydF4y2Ba(usf2.seqgydF4y2Ba开始=gydF4y2Ba开始gydF4y2Ba(碎片弹),gydF4y2Ba结束gydF4y2Ba(碎片弹)),gydF4y2Ba“DNAStringSet”gydF4y2Ba)gydF4y2Ba

我们可以很容易地找到片段序列的摘要,例如,片段的GC内容:gydF4y2Ba

碎片弹。gc < -gydF4y2BaletterFrequencygydF4y2Ba(frag.seqgydF4y2Ba“垃圾收集”gydF4y2Ba,gydF4y2Baas.prob =gydF4y2Ba真正的gydF4y2Ba)gydF4y2Ba情节gydF4y2Ba(gydF4y2Ba密度gydF4y2Ba(frag.gc))gydF4y2Ba

让我们计算一下,如果片段沿着转录本均匀分布,我们可能会期待什么:gydF4y2Ba

制服。gc < -gydF4y2BaletterFrequencyInSlidingViewgydF4y2Ba(usf2.seqgydF4y2Ba中位数gydF4y2Ba(gydF4y2Ba宽度gydF4y2Ba(碎片弹)),gydF4y2Ba“垃圾收集”gydF4y2Ba,gydF4y2Baas.prob =gydF4y2Ba真正的gydF4y2Ba)gydF4y2Ba情节gydF4y2Ba(gydF4y2Ba密度gydF4y2Ba(uniform.gc))gydF4y2Ba

现在让我们结合这些图,在不同的样本上迭代,并通过测序中心着色:gydF4y2Ba

情节gydF4y2Ba(gydF4y2Ba密度gydF4y2Ba(uniform.gc),gydF4y2Baylim =gydF4y2BacgydF4y2Ba(gydF4y2Ba0gydF4y2Ba,gydF4y2Ba12gydF4y2Ba),gydF4y2Balwd =gydF4y2Ba2gydF4y2Ba,gydF4y2Baxlab =gydF4y2Ba“片段GC内容”gydF4y2Ba,gydF4y2Ba主要=gydF4y2Ba""gydF4y2Bai ingydF4y2Baseq_alonggydF4y2Ba(bamfiles)) {frags <-gydF4y2BareadTxFragmentsgydF4y2Ba(bamfiles[我],usf2 [gydF4y2Ba3.gydF4y2Ba])碎片弹。seq < -gydF4y2Ba作为gydF4y2Ba(gydF4y2Ba的观点gydF4y2Ba(usf2.seqgydF4y2Ba开始=gydF4y2Ba开始gydF4y2Ba(碎片弹),gydF4y2Ba结束gydF4y2Ba(碎片弹)),gydF4y2Ba“DNAStringSet”gydF4y2Ba)碎片弹。gc < -gydF4y2BaletterFrequencygydF4y2Ba(frag.seqgydF4y2Ba“垃圾收集”gydF4y2Ba,gydF4y2Baas.prob =gydF4y2Ba真正的gydF4y2Ba)gydF4y2Ba行gydF4y2Ba(gydF4y2Ba密度gydF4y2Ba(frag.gc),gydF4y2Ba坳=gydF4y2Ba样品中心[我],美元gydF4y2Balwd =gydF4y2Ba2gydF4y2Ba)}gydF4y2Ba

综上所述,在0.65-0.75 GC含量范围内,来自其中一个测序中心的样本的代表性明显低于另一个测序中心。gydF4y2Ba

同样,为了正确地计算这种偏差,需要查看所有转录本,并调整读取开始序列偏差的潜在混淆效应。该计算由alpine软件完成。gydF4y2Ba

其他QA软件gydF4y2Ba

会话信息gydF4y2Ba

sessionInfogydF4y2Ba()gydF4y2Ba
## R版本3.3.0(2016-05-03)##平台:x86_64-pc-linux-gnu(64位)##运行在Ubuntu 14.04.2 LTS下## ## locale: ## [1] LC_CTYPE=en_US。UTF-8 LC_NUMERIC= c# # [3] LC_TIME=en_US。UTF-8 LC_COLLATE= c# # [5] LC_MONETARY=en_US。utf - 8 LC_MESSAGES = en_US。UTF-8 ## [7] LC_PAPER=en_US。UTF-8 LC_NAME= c# # [9] LC_ADDRESS=C lc_phone = c# # [11] LC_MEASUREMENT=en_US。UTF-8 LC_IDENTIFICATION=C ## ##附加的基本包:##[1]并行stats4统计图形grDevices utils数据集##[8]方法基础## ##其他附加包:# # # # [1] BSgenome.Hsapiens.UCSC.hg19_1.4.0 [2] BSgenome_1.41.2 # # [3] rtracklayer_1.33.7 # # [4] GenomicAlignments_1.9.3 # # [5] Rsamtools_1.25.0 # # [6] Biostrings_2.41.4 # # [7] XVector_0.13.2 # # [8] SummarizedExperiment_1.3.5 # # [9] rafalib_1.0.0 # # [10] Homo.sapiens_1.3.1 # # [11] TxDb.Hsapiens.UCSC.hg19.knownGene_3.2.2 # # [12] org.Hs.eg.db_3.3.0 # # [13] GO.db_3.3.0 # # [14] OrganismDbi_1.15.1 # # [15] GenomicFeatures_1.25.12 # # [16] GenomicRanges_1.25.4 # # [17] GenomeInfoDb_1.9.1 # # [18]AnnotationDbi_1.35.3 ## [19] IRanges_2.7.6 ## [20] S4Vectors_0.11.5 ## [21] Biobase_2.33.0 ## [22] BiocGenerics_0.19.1 ## ##通过命名空间加载(并且没有附加):[1] Rcpp_0.12.5 RColorBrewer_1.1-2 BiocInstaller_1.23.4 ## [4] formatR_1.4 bitops_1.0-6 tools_3.3.0 ## [7] zlibbioc_1.19.0 biomaRt_2.29.2 digest_0.6.9 ## [13] DBI_0.4-1 yaml_2.1.13 string_1 .0.0 ## [16] knitr_1.13 XML_3.98-1.4 RBGL_1.49.1 ## [22] htmltools_0.3.5 stringi_1.1.1 RCurl_1.95-4.8gydF4y2Ba