cn 1.32.0
保守非编码元件(CNEs)是后生动物发育和分化过程中普遍存在的一类围绕基因聚集的元件(伍尔夫等,2004).而许多已被证明是长期发育促进剂(Sandelin et al. 2004)在美国,他们极端保守的原因仍然无法解释。为了研究这些元素的进化动态及其与它们聚集在一起的基因的关系,有必要能够产生这些元素的全基因组集,以进行大量的物种比较,每个元素都有多个大小和保护阈值。
这cn该软件包旨在检测cne并沿基因组可视化它们。出于性能考虑,CNEs检测的实现和相应的I/O函数主要写成r的C扩展cn通过对多个参考物种的全基因组净比对(每一种都有两种不同的窗口大小和最小身份阈值范围)来生成CNEs集。然后,为了精确定位CNE数组的边界,我们计算CNE密度为用户指定的窗口大小内CNE覆盖的长度的百分比。最后,我们描述了一种新颖的可视化方法,使用层位图轨迹显示出优于标准密度图的动态范围,同时揭示了具有极大不同序列守恒水平的CNE簇。利用CNE的精确位置生成的CNE密度图可以用于识别参与发育调控的基因,甚至是尚未注释的新基因。
本节简要演示CNE识别和可视化的流程。每个步骤的更详细用法将在以下章节中描述,并给出了一个简明的CNE识别和可视化示例,用于斑马鱼(danRer10)基因组中的“barhl2”和“sox14”(chr6:24,000,000..27,000,000)位点对人类(hg38)。
的最小输入cn包括两个组合的全基因组成对排列,axt网络文件。UCSC已经提供了一组预先计算的axt文件http://hgdownload.soe.ucsc.edu/downloads.html对于大多数流行的基因组。万一axtnet文件从UCSC是不可用的,你总是可以生成axt net文件通过遵循另一个小短文“成对全基因组比对”在这里cn包中。
另一个重要信息是外显子和重复的注释,这些注释可以从各种资源中检索到。
在这个包的开发过程中,在Bioconductor中没有合适的类来存储axt对齐。因此,我们创建了两个新的S4类,Axt
而且GRangePairs
,以方便地操作axt对齐文件。
GRangePairs
是设计用来装一对的吗农庄
对象,它们具有相同的长度。它建立在双
类,并从它继承了许多有用的方法。这Axt
类继承自GRangePairs
没有多余的槽来容纳内容axt文件,但是创建了许多特定的方法Axt
.目标和查询组织的范围存储在两个组织中农庄
将对齐序列作为元数据列的对象。的元数据列中存储Blastz分数和对齐的宽度GRangePairs
.有关这两个类使用的更多信息,请参阅文档。
将axt文件读入R,cn提供了readAxt
功能,高效阅读。该函数构建在Kent实用程序的后端C代码上(W J Kent et al. 2002).axt对齐文件可以是gzip文件,也可以是纯文本文件。两个基因组之间的排列也可以在一个大文件中,也可以在几个文件中,如“chr1.hg19.mm10.net.axt.gz”、“chr2.hg19.mm10.net.axt.gz”等。
这些axt文件是专门为该区域准备的## (chr6:24,000,000..27,000,000)file("extdata", package="CNEr"), "hg38.danRer10.net.axt") axtFilesDanRer10Hg38 <- file.pathfile("extdata", package="CNEr"), "danRer10.hg38.net.axt")
- readAxt(axtFilesHg38DanRer10)
axt对齐的数量是50
<- readAxt(axtFilesDanRer10Hg38)
axt对齐的数量是352
## Axt类显示为UCSC Axt格式axtHg38DanRer10
## 1 chr1 148165963 148166304 chr6 25825774 25826099 + 5310 ## TCTCTCCCATCCCAACTGTTCTAAATGT-TCTTCCATTT…gcagctttttccaaccaaaacaacagaaattaaactt ## tttctctcctgctaggttttataagagtgtttttttcagtt…tcgggtgccttttcagagtaatgagggaaattaattt ## 2 chr1 222131480 222131835 chr6 24819722 24820074 + 221 ## CTTAATGTCTTTCTATCCAAAGTCATGCATTATATGTTA…塔塔塔塔塔塔塔塔塔塔塔## ttcgattttttattatttaagattcaaatattatatatg - attg…TTACTGTATGTAACAGCATTTATTAAACTGTGTTATCA ## 3 chr10 65322021 65322919 chr6 26227619 26228468 + 946 ## ttgcactttttgaagcccaaacttagcaataaataaaaata…tctgttacattgagccattttgtctcacttttcattaat ## ttgtttttttaaaagactaaattttaacaataaacttaaatg…ttttgaaaagtaattttttttttgtatttatattcattcat ## 4 chr13 94750629 94751259 chr6 26600600 26601208 + 3302 ## gccttcccagtttctcc - actctccctcatttttttttccc…Gtcataatata——catttttaaaattaattatccatt ## gctttatcagactctcctaatgtcaccc——tctctctc…GCCAAAAGATAGGGCATTCTAAAACTGTGTCACCCACT ## 5 chr13 94966940 94966991 chr6 26745445 26745499 + 711 ## ATTCAGCTCTAAAGCACCTTTGACTTCTA—tttcatttttttttccactca ## agccagcgtgtatacctagctgacatttagttttttttttttttttttttttttgccatttta ## ... ... ... ... ... ... ... ...## 46 chr6 61961895 61962455 chr6 24832605 24833189 + -3626 ## AAACGGGATCATTCTGGCAG—CTGTGTTTAAAA----…Tttcagtagttcccaatctatgggctgcacactctaag ## aaaggaaataattgttgaaagtactgaatttaaagaaaaaaaaaat…ATTTATCTGTTTTGAACAAAT----TTAACA----AAA ## 47 chr6 131822466 131822664 chr6 25067163 25067383 + 1420 ## AAAAATACTATCTATTGCAAA-----AAATTCAGAAAAT…Ccttt ----- ttttttatattccattatgaaagttt ## aaataggctatatatgtcatacttttaaacttttacaaa…tcttttttttttttatgacatattatagtatttt ## 48 chr7 16091079 16091261 chr6 24823861 24824043 + 1243 ## TACAATTTAAAAACAGAAA-AGAAGGAAATGACATCTGT…Aacacaagacaaaaagacaaaatatcacctggtgacag ## tgcaatttaaaagtataaaacagacaatttatctat…AAATAATGATATATAAACAAAATGTGACCTAATAACAG ## 49 chr8 111351278 111351934 chr6 25339132 25339742 + 3524 ## TATAGCAGTGTGAAAATGAACTAATACACATACAA- AA…agaaaaagatattttgaagtttaaacagaggaag# # tattatattttgggaacagaaccaacaatatgatgat…50 chr8 111354557 111354869 chr6 25340098 25340413 + 722 ## TTCTGATAAAC——TTCAGGGTTCCCATCTCAAGATCAA…aaaggacaaataaataggtgctgaagagagaaaagctaga ## tgctgattagcgctctcacgttgccatgagattaa
axtDanRer10Hg38
##一个Axt与352对齐对:## 1 chr6 24000620 24001357 chr7 146767015 146767753 - -4315 ## gcggatttatgtagaaagattttttgggagtatcataaat…Agagccacaattctcattcagctatgtgtagggttatt ## gagggccagtctggaaagctaactaggaggatgccaaaa…GAGAAAGGGATTCATAATGGAAACTGAGGGAGCTGCTT ## 2 chr6 24001358 24001524 chr9 17091651 17091817 - 8118 ## accttgtatttaattccagttaatagccaaggaag…Ccactttcatcctgagaacactcattacctgcagttca ## accttgtacttcaggccagacttgaagtagcctaggaag…CCGCTCTCATCCTGGCTGCACTCATTGCCTACGGGACA ## 3 chr6 24001525 24001683 chr7 146767937 146768119 - -142 ## AACA------GACACAGAGTATTG----CCAATATCTCA...---ACAGTACTTCTGTCAGTCTTATTTCTTTTATTTTG ## ATTATCAAGCAAGAGAAAGGATTAAGGCAGAATTTCTGA...TAATTAACAATTTTTTTAGTCTATTTTTTTTTTTTTTG ## 4 chr6 24001998 24002188 chr9 17092546 17092748 - 5826 ## CTCACCCAGCCACATATGGACATTATAGGACGGAG----...ACCTGCATTCTGGAACTCCTTGTGAAAAACCATGATTC ## CTCACCCAGCCAGTAGTGGAGGTCATACTGCAGATTTCC...CCCTGCCTTGAGGAACTCGGGGTGTTCCACCACCATGC ## 5 chr6 24052977 24053618 chr1 156772050 156772641 - 15004 ## AACAAAAGGAAGAAAGGGATAACCCTGTCCAG---TTCT...ATCCTTATGTGGGCTTAAAAAAAAAAAACACACTGGAA ## AAAAAATAAAGGAGTGGCATAAATTTTTCCAAAATGTTA...GTACCCTCAGAGTTTTGTAGAATATTAACACAATATAA ## ... ... ... ... ... ... ... ... ## 348 chr6 26901575 26901753 chr2 241264446 241264624 + 5495 ## ACCTGGGTGATGATTGAGGACTTCAGAGGTTTAATCTTA...ACACTGCTAGGGTCTCCTCCTGCAGCAGCTAATGAAGA ## ACCTGAGTGATGACAGAAGCCTTGATGGGTCGGATCTTG...GAATT--TAGAGTGGCA-ACTGGACCAGCCAACACAGA ## 349 chr6 26901818 26902021 chr2 241266790 241266977 + 4753 ## TCACCTTTGACCTGCTCTGGCAGTAAGCCACTGCGATGC...ACAACGTTCGGCATATTTGTAAAGTTACAACCATAAAA ## TCACCTTTGATTTGTTGCGGAACCAGCCCACTTCGGTGT...ACAACCCTCAAT-TATCTATGAGATTGTTAACCTAAGA ## 350 chr6 26903886 26904002 chr2 241268465 241268573 + 4643 ## GGTCAATCTTACCAGCTAAATGGTCAGTTACCAGATAAT...TTTGCCTAAAAACAAAACAGTAAATAAGAGAAGAAAAA ## GGTCAAACTTACCAGCAAAACGGTCAGTAGCCAGAAGGT...TTTGCT--GGTATGGGATGGGAAGTGGGAGAGGAGAGA ## 351 chr6 26996747 26997678 chr6 108023708 108024516 - 1325 ## ATTGTAAATAATACACTGTGCATTACAAATGCATATCAT...TATTTCTTGTAGTCAAAAGCGGATGGGCAACTTCTTCT ## ATTATATATTATATATTGTACTACATATACATATATTAT...TATTTCTTG----CAATATCATATGCAAAATTCCTTAT ## 352 chr6 26999619 26999997 chr6 108026981 108027383 - 579 ## TTTTTAACTGACAAGTGACACCAAGAATATTAAT-----...CTGCTGGCCATCTGTTTTTGAGTTTGCCAATCCAGCTT ## TTTCTGAGTCGCAAATAAAAAATAAAATATAAATGGGAA...CAGTTAACTATCTTTGGTTGGCTTAATGAATCCAGTTT
##匹配对齐的分布;给定一个Axt对齐,绘制一个热图,其中包含每个匹配对齐的百分比。
matchDistribution (axtDanRer10Hg38)
##人与斑马鱼的同步性在dotplot上不是很明显。库(BSgenome.Hsapiens.UCSC.hg19)库(bsgenome . ggallus . ucsc . galal3) fn <- file.path(system. path)file("extdata", package="CNEr"), "chr4.hg19. galalgal3.net .axt.gz") axt <- readAxt(fn, tAssemblyFn=file.path(system. path);file("extdata", package=" bsgenome . hspapiens . ucsc .hg19"), "single_sequences.2bit"), qAssemblyFn=file.path(system. path . BSgenome.Hsapiens.UCSC.hg19")file("extdata", package=" bsgenome . ggallus . ucsc . galalgal3 "), "single_sequences.2bit"))
axt对齐的数量是14411
library(GenomeInfoDb) syntenicDotplot(axt, firstChrs=c("chr4"), secondChrs="chr4", type="dot")
这里定义了用于处理的方法Axt
对象,包括子集,输出到axt文件。更多细节可以在手册页中找到。
基因注释信息,包括外显子和重复序列,用于过滤不需要的区域。在这里,我们总结了我们使用的过滤信息的表格:
组装 | 的名字 | 外显子 | 重复 |
---|---|---|---|
hg38 | 人类 | RefSeq基因,Ensembl基因,UCSC已知基因 | RepeatMasker |
mm10 | 鼠标 | RefSeq基因,Ensembl基因,UCSC已知基因 | RepeatMasker |
xenTro3 | 青蛙 | RefSeq基因,集成基因 | RepeatMasker |
tetNig2 | 的染色体 | 运用基因 | |
canFam3 | 狗 | RefSeq基因,集成基因 | RepeatMasker |
galGal4 | 鸡 | RefSeq基因,集成基因 | RepeatMasker |
danRer10 | 斑马鱼 | RefSeq基因,集成基因 | RepeatMasker |
fr3 | 河豚 | RefSeq基因 | RepeatMasker |
anoCar2 | 蜥蜴 | 运用基因 | RepeatMasker |
equCab2 | 马 | RefSeq基因,集成基因 | RepeatMasker |
oryLat2 | 青鳉 | RefSeq基因,集成基因 | RepeatMasker |
monDom5 | 负鼠 | RefSeq基因,集成基因 | RepeatMasker |
gasAcu1 | 棘鱼 | RefSeq基因,集成基因 | RepeatMasker |
rn5 | 老鼠 | RefSeq基因,集成基因 | RepeatMasker |
dm3 | d .腹 | RefSeq基因,集成基因 | RepeatMasker |
droAna2 | d . ananassae | RepeatMasker | |
dp3 | d . pseudoobscura | RepeatMasker | |
ce4 | 秀丽隐杆线虫 | RefSeq基因 | RepeatMasker |
cb3 | c . briggsae | RepeatMasker | |
caeRem2 | c . remanei | RepeatMasker | |
caePb1 | c . brenneri | RepeatMasker |
为了简单起见,上面列出的所有信息都可以使用Bioconductor包轻松获取rtracklayer,biomaRt以及预编译的Bioconductor注释包。这里举几个例子:
##从UCSC library(rtracklayer)获取rmsk表mySession <- browserSession("UCSC") genome(mySession) <- "hg38" hg38。rmsk <- getttable (ucscTableQuery(mySession, track="RepeatMasker", table="rmsk")) hg38。rmskGRanges <- GRanges(seqnames=hg38。rmsk$genoName, ## UCSC坐标以0为基础。范围= IRanges (= hg38开始。rmsk$genoStart+1, end=hg38.rmsk$genoEnd), strand=hg38.rmsk$strand) ##从BioMart library(BioMart)中获取ensembl基因外显子ensemble <- useMart(BioMart ="ENSEMBL_MART_ENSEMBL", host="dec2015.archive.ensembl.org") ensembl <- useDataset("hsapiens_gene_ensembl",mart=ensembl) attributes <- listAttributes(ensembl)外显子<- getBM(attributes=c("chromosome_name", "exon_chrom_start", "exon_chrom_end", "strand"), mart=ensembl) exonsRanges <- GRanges(seqnames=exons$chromosome_name,ranges=IRanges(start=exons$exon_chrom_start, end=exons$exon_chrom_end), strand=ifelse(exons$strand==1L, "+", "-")) seqlevelsStyle(exonsRanges) <- "UCSC" ##使用现有的Bioconductor注释包hg38库(TxDb.Hsapiens.UCSC.hg38.knownGene) exonsRanges <- exons(TxDb.Hsapiens.UCSC.hg38.knownGene)
要过滤掉的区域也可以在床文件中提供。将床文件导入农庄在R
,rtracklayer提供一个通用函数import.bed
这样做。中只使用了染色体名称、开始坐标和结束坐标cn,我们提供更高效的服务readBed
函数。
##现有的床文件chr6:24,000,000..27,000,000 of Zebrafish danRer10 bedDanRer10Fn <- file.path(system.file("extdata", package="CNEr"), "filter_regions.danRer10.bed") danRer10Filter <- readBed(bedDanRer10Fn) danRer10Filter
## seqnames ranges strand ## [1] chr6 24000008-24000253 + ## [2] chr6 24000254-24000332 + ## [3] chr6 24000499-24000550 + ## [4] chr6 24000554-24000670 + ## [5] chr6 24000671-24000722 + ## ... ... ... ...## [5992] chr6 26998029-26998373 + ## [5993] chr6 26998414- 26998526 + ## [5995] chr6 26998687-26998833 + ## [5996] chr6 26999116-26999802 + ## ------- ## seqinfo:来自未知基因组的1个序列;没有seqlengths
##现有的床文件对齐区域在人类hg38对## chr6:24,000,000..27,000,000 of danRer10 bedHg38Fn <- file.path(system. path)file("extdata", package="CNEr"), " filter_domains .hg38.bed") hg38Filter <- readBed(bedHg38Fn) hg38Filter .
## seqnames ranges strand ## [1] chr1 26817474-26819341 + ## [2] chr1 156772018-156772158 + ## [3] chr1 156772160-156772358 + ## [5] chr1 156772495-156772637 + ## [5] chr1 156774135-156774472 + ## ... ... ... ...## [409] chr9 134045295 -134045421 + ## [410] chr9 134048002-134048454 + ## [411] chr9 134051562-134051709 + ## [412] chr9 134052306-134052443 + ## [413] chr9 134053265-134053590 + ## ------- # seqinfo:来自未指定基因组的17个序列;没有seqlengths
CNE
类我们设计了一个CNE
类来存储用于在两个物种之间识别一组CNEs的管道的所有元数据,包括中间结果和最终结果。CNE
可以通过提供两个程序集的twoBit文件路径和axt文件路径来创建,并以每个程序集为参考。
这里我们有来自Bioconductor包BSgenome.Drerio.UCSC的两个obit文件。danRer10和bsgenome . hspiens . ucsc。hg38cneDanRer10Hg38 <- CNE( assembly1Fn=file.path(system.file("extdata", package="BSgenome.Drerio.UCSC.danRer10"), "single_sequences.2bit"), assembly2Fn=file.path(system.file("extdata", package="BSgenome.Hsapiens.UCSC.hg38"), "single_sequences.2bit"), axt12Fn=axtFilesDanRer10Hg38, axt21Fn=axtFilesHg38DanRer10, cutoffs1=8L, cutoffs2=4L) cneDanRer10Hg38
/home/biocbuild/bb -3.15-bioc/R/library/BSgenome.Drerio.UCSC.danRer10/extdata/single_sequences. BSgenome.Drerio.UCSC.danRer10/extdata/single_sequences. BSgenome.Drerio.UCSC.danRer102bit" ## ##槽位"assembly2Fn": ## [1] "/home/biocbuild/bb -3.15-bioc/R/library/ bsgenome . hspiens . ucsc .hg38/extdata/single_sequences. bsgenome . hspiens . ucsc .hg38/extdata/single_sequences. bsgenome . hspiens . ucsc .hg38/extdata/single_sequences. BSgenome.Hsapiens.UCSC.hg38。2bit" ## ## Slot "axt12Fn": ## [1] "/tmp/RtmpLDJqGp/Rinst2c508b13111440/CNEr/extdata/danRer10.hg38.net.axt" ## ## Slot "axt21Fn": ## [1] "/tmp/RtmpLDJqGp/Rinst2c508b13111440/CNEr/extdata/hg38.danRer10.net.axt" ## ## Slot "window": ## [1] 50 ## ## Slot "identity": ## [1] 50 ## ## Slot "CNE12": ## GRangePairs object with 0 pairs and 0 metadata columns: ## first second ## ## ## Slot "CNE21": ## GRangePairs object with 0 pairs and 0 metadata columns: ## first second ## ## ## Slot "CNEMerged": ## GRangePairs object with 0 pairs and 0 metadata columns: ## first second ## ## ## Slot "CNEFinal": ## GRangePairs object with 0 pairs and 0 metadata columns: ## first second ## ## ## Slot "aligner": ## [1] "blat" ## ## Slot "cutoffs1": ## [1] 8 ## ## Slot "cutoffs2": ## [1] 4
请注意:创建CNE对象时,程序集的顺序很重要。这里我们有danRer10作为assembly1, hg38作为assembly2。然后axt12Fn
包含以assembly1 danRer10为参考的axt对齐axt21Fn
包含以assembly2 hg38为参考的对齐。的cutoffs1
而且cutoffs2
是后面步骤中重新排列期间的最大命中数。由于与人类相比,斑马鱼经历了额外的全基因组复制,因此斑马鱼的截断值也是人类的两倍。
在本节中,我们将详细介绍CNE识别。
CNEs的检测高度依赖于全基因组成对网络比对。为了纠正所选基因组的偏差(哪种偏差?),并在基因组进化过程中捕获重复的cne,我们为每对配对比较扫描两组网络,分别作为每个基因组的参考。
我们通过扫描最少的区域的对齐来识别cne我身份在C对齐列。由于不同的基因和位点可能倾向于不同的相似度分数,我们通常在30和50两个不同的窗口大小进行扫描,并有几个相似度标准(我/ C)范围由70%至100%。
cneListDanRer10Hg38 <- ceScan(x=cneDanRer10Hg38, tFilter=danRer10Filter, qFilter=hg38Filter, window=windows, identity=identities)
## axt文件的数量1 ## axt对齐的数量是352 ## axt文件的数量1 ## axt对齐的数量是50
在这一阶段,列出了CNE
返回。ceScan
,其中包含了来自一对axt对齐的初步两组cne。我们可以通过
cneListDanRer10Hg38[["45_50"]]]
# # GRangePairs对象和74对2元数据列:# #第一第二|得分# # <农庄> <农庄> | <数字> # # [1]chr6:26746284 - 26746334: + chr3:137269941 - 137269991: 90.20 + | # # [2] chr6:26745047 - 26745455: + chr3:137264717 - 137265124: 95.11 + | # # [3] chr6:26708061 - 26708129: + chr3:137294941 - 137295008: - | 91.30 # # [4] chr6:26699009 - 26699078: + chr3:137329801 - 137329870: - | 92.86 # # [5] chr6:26699080 - 26699274: 90.26 + chr3:137329608 - 137329799: - | ## ... ... ... . ...# # [70] chr6:24605694 - 24605830: + chr1:90841095 - 90841232: - | 92.75 # # [71] chr6:24605831 - 24605936: + chr1:90840976 - 90841082: - | 90.65 # # [72] chr6:24606573 - 24606626: + chr1:90840328 - 90840381: - | 90.74 # # [73] chr6:24599740 - 24599806: + chr1:90856700 - 90856765: - | 92.54 # # [74] chr6:24580009 - 24580099: 90.22 + chr1:90944046 - 90944137: - |雪茄# # <人物> # # # # # #[2][1]51米218 m1i190m # # [3] 47 m1i21m # # 70 # # [4] [5] 82 m1i96m2i14m ## ... ...## [70] 128m1d9m ## [71] 99m1d7m ## [72] 54m ## [73] 33m1i33m ## [74] 12m1d79m
## ces来自hg38作为参考CNE21(cneListDanRer10Hg38[["45_50"]])
# # GRangePairs对象4双,2元数据列:# #第一第二|得分# # <农庄> <农庄> | <数字> # # [1]chr3:137523038 - 137523102: + chr6:26638744 - 26638808: 87.69 + | # # [2] chr3:137523122 - 137523187: + chr6:26638826 - 26638891: 89.39 + | # # [3] chr3:137269941 - 137269991: + chr6:26746284 - 26746334: 90.20 + | # # [4] chr3:137264717 - 137265124: 95.11 + chr6:26745047 - 26745455: + |雪茄# # <人物> # # # # 65 # #[1][2]66 # # # #[3]51米m1d190m [4] 218
在结果表中,尽管查询元素的链可以为负,但该查询元素的坐标已经在正链上。
以每个程序集作为参考,扫描两组成对的网络对齐是必要的,以避免遗漏任何沿袭中的重复元素。这对于硬骨鱼和其他脊椎动物之间的比较尤其重要,因为出现了一个(例如斑马鱼的情况)或两个(普通鲤鱼的情况)额外的全基因组复制。
当我们以每个基因组为参考进行两轮CNE检测时,一些保守元素在两个基因组上重叠,需要去除。然而,只在一个基因组上重叠的元素被保留,因此重复的元素保持不同。
cneMergedListDanRer10Hg38 <- lapply(cneListDanRer10Hg38, cneMerge)
一些cne可能是无注释的重复。要移除它们,目前我们使用咩咩的叫声(W詹姆斯·肯特2002)根据各自的基因组重新排列每个cne序列。当匹配的数量超过某个阈值(例如8)时,该CNE将被丢弃。
当cne数量较大时,此步骤可能非常耗时。还可以考虑其他对齐方法,例如Bowtie2或BWA(前提是它们安装在用户的机器上)
cneFinalListDanRer10Hg38 <- lapply(cneMergedListDanRer10Hg38, blatCNE)
由于从整个管道计算cne和准备注释包可能非常耗时,为了获得更流畅的可视化体验,我们决定使用本地SQLite数据库来存储cne。
自从CNEs以来data.frame
是一个表,它可以导入到SQL表中。为了提高从SQL数据库查询的速度,采用了bin索引系统。更多信息请参考论文(W J Kent et al. 2002)而且genomewiki.
##单独的表dbName <- tempfile() data(cneFinalListDanRer10Hg38) tableNames <- paste("danRer10", "hg38", names(cneFinalListDanRer10Hg38), sep="_") for(i in 1:length(cneFinalListDanRer10Hg38)){saveCNEToSQLite(cneFinalListDanRer10Hg38[[i]], dbName, tableNames[i], overwrite=TRUE)}
当基于chr、坐标和其他标准从本地SQLite数据库查询结果时,a农庄
对象返回。
chr <- "chr6" start <- 24000000L end <- 27000000L minLength <- 50L tableName <- "danRer10_hg38_45_50" fetchedCNERanges <- readcnerangesfrommsqlite (dbName, tableName, chr, start, end, where assembly ="first", minLength=minLength) fetchedCNERanges
## GRangePairs对象,70对,0元数据列:## first second ## ## [1] chr6:26708061-26708129 chr3:137294941-137295008 ## [2] chr6:26699009-26699078 chr3:137329801-137329870 ## [3] chr6:26699080-26699274 chr3:137329608-137329799 ## [5] chr6:26688342- 267406806 -137407138 ## [5] chr6:26677966- 267467520 -137467634 ## ... ... ...[66] chr6:24580009-24580099 chr1:90944046-90944137 ## [67] chr6:26638744-26638808 chr3:137523038-137523102 ## [68] chr6:26638826-26638891 chr3:137523122-137523187 ## [69] chr6:26746284-26746334 chr3:137269941-137269991 ## [70] chr6:26745047-26745455 chr3:137264717-137265124
cne的长度(Salerno, Havlak, and Miller 2006)以及相邻元素之间的距离(Polychronopoulos, Sellis, and Almirantis 2014)为了展示幂律分布,我们实现了一个函数,它可能有助于显示已识别元素的分布中有趣的模式。
dbName <- file.path(system. path)file("extdata", package="CNEr"), "danRer10CNE.sqlite") tAssemblyFn <- file.path(system. path)file("extdata", package="BSgenome.Drerio.UCSC.danRer10"), "single_sequences.2bit") qAssemblyFn <- file.path(system. path)file("extdata", package="BSgenome.Hsapiens.UCSC.hg38"), "single_sequences.2bit") cneGRangePairs <- readCNERangesFromSQLite(dbName=dbName, tableName="danRer10_hg38_45_50", tAssemblyFn=tAssemblyFn, qAssemblyFn=qAssemblyFn) plotCNEWidth(cneGRangePairs)
cne倾向于形成星团。可以快速检查CNEs的基因组分布。
plotCNEDistribution(第一(cneGRangePairs))
为了在其他基因组浏览器中可视化,我们提供了生成床文件中的CNE和床图文件中的CNE密度的函数。例如,要获得cne的前1000个坐标:
makeCNEDensity (cneGRangePairs [1:1000])
为了将CNEs与其他基因注释一起可视化,我们选择使用Bioconductor包Gviz在这个小插图中。Gviz,基于网格图形方案,是一个非常强大的包绘制数据和注释信息沿着基因组坐标。集成公开可用的基因组注释数据(如UCSC或Ensembl)的功能,极大地减轻了为常见程序集准备注释的负担。自从Bioconductor发布2.13版以来Gviz,它提供了视界图中的数据轨迹,完全满足了我们对CNEs密度图可视化的需求。更详细的使用方法,请参阅说明书或手册Gviz.
可视化的另一个选项是包ggbio,这是基于ggplot2.的优势ggbio添加任何定制的简单性吗ggplot2样式跟踪到绘图中,而无需调整坐标系统。在下一节中产生的密度可以很容易地绘制在视界图中。一个简单明了的教程关于地平线的情节ggplot2
格式可从http://timelyportfolio.blogspot.co.uk/2012/08/horizon-on-ggplot2.html.
对于本插图中的hg38 vs danRer10的例子,我们选择danRer10作为参考,并显示发育基因的范围barhl2而且sox14.
库(Gviz)库(biomaRt)基因组<- "danRer10" axisTrack <- GenomeAxisTrack() cpgIslands <- UcscTrack(基因组=基因组,染色体=chr, track="cpgIslandExt", from=start, to=end, trackType="AnnotationTrack", start="chromStart", end="chromEnd", id="name", shape="box", showId=FALSE, fill="#006400", name="CpG", background.title="brown") refGenes <- UcscTrack(基因组=基因组,染色体=chr, track="refGene", from=start, to=end, trackType="GeneRegionTrack", rstarts="exonStarts", rends="exonEnds",gene="name2", symbol="name2", transcript="name", strand="strand", fill="#8282d2", name="refSeq基因",collapseTranscripts=TRUE, showId=TRUE, background.title="brown") ensembl <- useMart(biomart="ENSEMBL_MART_ENSEMBL", host="dec2015.archive.ensembl.org") ensembl <- useDataset("drerio_gene_ensembl",mart=ensembl) biomTrack <- BiomartGeneRegionTrack(genome=基因组,染色体=chr, biomart=ensembl, start=start, end=end, name=" ensembl基因")
library(Gviz) plotTracks(list(axisTrack, cpgIslands, refGenes), collapseTranscripts=TRUE, shape="arrow", transcriptAnnotation="symbol")
也可以从普通的注释中绘制注释R
对象,例如data.frame
,农庄
,IRanges
甚至从本地文件。通常人造石铺地面包含基因注释的文件可以通过Gviz直接。欲知更多详情,请参阅Gviz.
dbName <- file.path(system. path)file("extdata", package="CNEr"), "danRer10CNE.sqlite") genome <- "danRer10" windowSize <- 200L minLength <- 50L cnedener10hg38_21_30 <- CNEDensity(dbName=dbName, tableName="danRer10_hg38_21_30",该assembly ="first", chr=chr, start=start, end=end, windowSize=windowSize, minLength=minLength) CNEDensity(dbName=dbName, tableName="danRer10_hg38_45_50",该assembly ="first", chr=chr, start=start, end=end, windowSize= windowssize, minLength=minLength, windowSize= " first_hg38_45_50 ",该assembly ="first", chr=chr, start=start, end=end, windowSize= " windowSize ", windowSize= " first_chr ", start=start, end=end, windowSize= " windowSize= "minLength=minLength) CNEDensity(dbName=dbName, tableName="danRer10_hg38_49_50", withassembly ="first", chr=chr, start=start, end=end, windowSize=windowSize, minLength=minLength) cnedanrer10astlength 102_48_50 <- CNEDensity(dbName=dbName, tableName="AstMex102_danRer10_48_50", withassembly ="second", chr=chr, start=start, end=end, windowSize=windowSize, minLength=minLength) cneDanRer10CteIde1_75_75 <- CNEDensity(dbName=dbName, tableName="cteIde1_danRer10_75_75",where assembly ="second", chr=chr, start=start, end=end, windowSize=windowSize, minLength=minLength)
dTrack1 <- DataTrack(range=cneDanRer10Hg38_21_30, genome=genome, type=" horizon ", horizon.scale=max(cneDanRer10Hg38_21_30$score)/3,填充。horizon=c("#B41414", "#E03231", "#F7A99C", "yellow", "orange", "red"), name="human 21/30", background.title="brown") dTrack2 <- DataTrack(range=cneDanRer10Hg38_45_50, genome=genome, type=" horizon ", horizon.scale=max(cneDanRer10Hg38_45_50$score)/2, fill。horizon=c("#B41414", "#E03231", "#F7A99C", "yellow", "orange", "red"), name="human 45/50", background.title="brown") dTrack3 <- DataTrack(range=cneDanRer10Hg38_49_50, genome=genome, type=" horizon ", horizon.scale=max(cneDanRer10Hg38_21_30$score)/3, fill。horizon=c("#B41414", "#E03231", "#F7A99C", "yellow", "orange", "red"), name="human 49/50", background.title="brown") dTrack4 <- DataTrack(range=cneDanRer10AstMex102_48_50, genome=genome, type=" horizon ", horizon.scale=max(cneDanRer10Hg38_21_30$score)/3, fill。horizon=c("#B41414", "#E03231", "#F7A99C", "yellow", "orange", "red"), name="盲洞鱼48/50",background.title="brown") dTrack5 <- DataTrack(range=cneDanRer10CteIde1_75_75, genome=genome, type=" horizon ", horizon.scale=max(cneDanRer10CteIde1_75_75$score)/3, fill。horizon=c("#B41414", "#E03231", "#F7A99C", "yellow", "orange", "red"), name="草鱼75/75",background.title="brown")
ht <- HighlightTrack(trackList=list(refGenes, dTrack5, dTrack4, dTrack1, dTrack2, dTrack3), start=c(24200000, 25200000, 26200000), end=c(25100000, 26150000, 27000000),染色体=chr) plotTracks(list(axisTrack, cpgIslands, ht), collapseTranscripts=TRUE, shape="arrow", transcriptnotation ="symbol", from=24000000, to=27000000)
从这个水平图中,当将斑马鱼与人类作为参考基因组进行比较时,我们注意到基因barhl2, lmo4b和sox14被cene的密度峰所包围。
cn在R中有效地识别cne并方便地处理相应的对象。
层位图显示出比标准密度图更大的动态范围,同时显示出序列守恒水平差异极大的CNE簇。利用CNE的精确位置生成的这种CNE密度图可以用于识别参与发育调控的基因,即使是尚未注释的新基因。
下面是生成这个小插图的会话信息:
sessionInfo ()
## R版本4.2.0 RC (2022-04-19 r82224) ##平台:x86_64-pc-linux-gnu(64位)##运行在Ubuntu 20.04.4 LTS ## ##矩阵产品:默认## BLAS: /home/biocbuild/bbs-3.15-bioc/R/lib/libRblas。/home/biocbuild/bbs-3.15-bioc/R/lib/libRlapack。所以## ## locale: ## [1] LC_CTYPE=en_US。UTF-8 LC_NUMERIC= c# # [3] LC_TIME=en_GB 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]grid stats4 stats graphics grDevices utils datasets ##[8]方法基础## ##其他附加包:BSgenome.Ggallus.UCSC.galGal3_1.4.0 ## [3] BSgenome.Hsapiens.UCSC.hg19_1.4.3 BSgenome_1.64.0 ## [5] rtracklayer_1.56 0 Biostrings_2.64.0 ## [9] GenomeInfoDb_1.32.0 IRanges_2.30.0 ## [11] S4Vectors_0.34.0 BiocGenerics_0.42.0 ## [13] CNEr_1.32.0 BiocStyle_2.24.0 ## ##通过命名空间加载(并且没有附加):## [1] [3] biocfilecache_2 .4.1 plyr_1.8.7 ## [5] lazyeval_0.2.2 splines_4.2.0 ## [9] digest_0.6.29 ensembldb_2.20.0 ## [11] htmltools_0.5.2 magick_2.7.3 ## [13] GO.db_3.15.0 fansi_1.0.3 ## [15] magrittr_2.0.3 checkmate_2.1.0 ## [17] memoise_2.0.1 cluster_2.1.3 ## [19] tzdb_0.3.0 readr_2.1.2 ## [23] r.l uts_2.11.0 vroom_1.5.7 ## [25] prettyunits_1.1.1 jpeg_0.1-9 ## [27]colorspace_2.0-3 blob_1.2.3 # # [29] rappdirs_0.3.3 xfun_0.30 # # [31] dplyr_1.0.8 crayon_1.5.1 # # [33] rcurl_1.98 - 1.6 jsonlite_1.8.0 # # [35] VariantAnnotation_1.42.0 survival_3.3-1 # # [37] glue_1.6.2 gtable_0.3.0 # # [39] zlibbioc_1.42.0 DelayedArray_0.22.0 # # [41] scales_1.2.0 DBI_1.1.2 # # [43] Rcpp_1.0.8.3 xtable_1.8-4 # # [45] progress_1.2.2 htmlTable_2.4.0 # # [47] foreign_0.8 - 82 bit_4.0.4 # # [49] Formula_1.2-4 htmlwidgets_1.5.4 # # [51] httr_1.4.2 RColorBrewer_1.1-3 # # [53] ellipsis_0.3.2pkgconfig_2.0.3 ## [57] farver_2.1.0 nnet_7.3-17 ## [59] sass_0.4.1 dbplyr_2.1.1 ## [61] utf8_1.2.2 tidyselect_1.1.2 ## [65] reshape2_1.4.4 AnnotationDbi_1.58.0 ## [67] munsell_0.4.2 tools_4.2.0 ## [69] cachem_1.0.6 cli_3.3.0 ## [71] generics_0.1.2 RSQLite_2.2.12 ## [73] evaluate_0.15 string_1 .4.0 ## [75] fastmap_1.1.0 yaml_2.3.5 ## [77] knitr_1.38 bit64_4.0.5 ## [81]AnnotationFilter_1.20.0 R.oo_1.24.0 # # [83] poweRlaw_0.70.6 pracma_2.3.8 # # [85] xml2_1.3.3 biomaRt_2.52.0 # # [87] compiler_4.2.0 rstudioapi_0.13 # # [89] filelock_1.0.2 curl_4.3.2 # # [91] png_0.1-7 tibble_3.1.6 # # [93] bslib_0.3.1 stringi_1.7.6 # # [95] highr_0.9 GenomicFeatures_1.48.0 # # [97] lattice_0.20-45 ProtGenerics_1.28.0 # # [99] Matrix_1.4-1 vctrs_0.4.1 # # [101] pillar_1.7.0 lifecycle_1.0.1 # # [103] BiocManager_1.30.17 jquerylib_0.1.4 # # [105] data.table_1.14.2 bitops_1.0-7 # # [107] R6_2.5.1 BiocIO_1.6.0 ## [109] latticeExtra_0.6-29 bookdown_0.26 ## [111] gridExtra_2.3 dichromat_2.0-0 ## [113] assertthat_0.2.1 SummarizedExperiment_1.26.0 ## [115] rjson_0.2.21 GenomicAlignments_1.32.0 ## [117] Rsamtools_2.12.0 GenomeInfoDbData_1.2.8 ## [119] parallel_4.2.0 hms_1.1.1 ## [121] rpart_4.1.16 rmarkdown_2.14 ## [123] MatrixGenerics_1.8.0 biovizBase_1.44.0 ## [125] Biobase_2.56.0 base64enc_0.1-3 ## [127] restfulr_0.0.13
肯特,W·詹姆斯,2002。“blat -类似blast的对准工具。”基因组研究12(4): 656-64。
肯特,W J, C W Sugnet, T S Furey, K M Roskin, T H Pringle, A M Zahler, A D Haussler. 2002。“UCSC的人类基因组浏览器。”基因组研究12(6): 996-1006。
迪米特里斯,迪曼提斯·塞利斯和扬尼斯·阿尔米兰提斯,2014。“由于基因组动力学,保守的非编码元素在几个基因组中遵循幂律分布。”《公共科学图书馆•综合》9 (5): e95437。
威廉·萨莱诺,保罗·哈夫拉克,乔纳森·米勒,2006。基因组交叉和比对中强保守序列的尺度不变结构。美国国家科学院院刊103(35): 13121-5。
桑德林,阿尔宾,彼得·贝利,莎拉·布鲁斯,Pär G Engström,乔安娜·M·克洛斯,怀斯·W·沃瑟曼,约翰·埃里克森和鲍里斯·伦哈德。2004。“超保守的非编码区域阵列横跨脊椎动物基因组中关键发育基因的位点。”BMC基因组学5(1): 99。
伍尔夫、亚当、马丁·古德森、黛比·K·古德、菲尔·斯内尔、盖尔·K·麦克尤恩、塔尼娅·瓦武里、莎拉·F·史密斯、菲尔·诺斯、希瑟·卡拉威和克里斯·凯利。“高度保守的非编码序列与脊椎动物的发育有关。”公共科学图书馆生物学3 (1): e7。