##参见system。文件("LICENSE", package="MotifDb")的使用限制。
R版本: R版本4.1.0 (2021-05-18)
Bioconductor版本: 3.13
包版本: 1.16.0
真核基因调控是非常复杂的。转录因子与启动子DNA序列的结合是一个随机过程,不完全匹配可以充分结合。染色质重塑、甲基化、组蛋白修饰、染色体相互作用、远端增强子以及转录辅因子的协同结合都发挥着重要作用。在这个演示工作流程中,我们避免了大部分这种复杂性,以检查一小组7个广泛共表达的相关功能的酿酒酵母基因中的转录因子结合位点。这些基因在200个实验条件下表现出高度相关的mRNA表达,并被注释到氮分解代谢抑制(NCR),这是酵母细胞在使用富氮源和贫氮源之间切换的手段。
然而,我们将看到,即使是这个功能相似的共同调控基因的小集合也表现出相当大的调控复杂性,(除其他外)激活子和抑制子竞相结合到相同的DNA启动子序列上。我们的案例研究揭示了这种复杂性,并演示了几种新的Bioconductor包和方法如何使我们能够做到这一点
[回到顶部]
要安装必要的包及其所有依赖项,请评估这些命令
##尝试http:// if https:// url不支持library(BiocManager) BiocManager::install(c("MotifDb", "GenomicFeatures", "TxDb.Scerevisiae.UCSC.sacCer3. "sgdGene”,“org.Sc.sgd.db”,“BSgenome.Scerevisiae.UCSC.”sacCer3", "motifStack", "seqLogo"))
每次R安装只需要安装一次包。当使用酿酒酵母以外的生物时,根据需要替换三种特定物种的包装。
要在R会话中使用这些包,请计算这些命令:
库(MotifDb)库(S4Vectors)库(seqLogo)库(motifStack)库(Biostrings)库(GenomicFeatures)库(org.Sc.sgd.db)库(BSgenome.Scerevisiae.UCSC.sacCer3)库(TxDb.Scerevisiae.UCSC.sacCer3.sgdGene)
这些指令在每个R会话中需要使用一次。
[回到顶部]
下面的x-y图显示了7个基因在200种条件下的表达水平,来自酵母表达数据的概要Allocco等, 2004,“量化共表达、共调节与基因功能之间的关系”:
Allocco等人证实了这一点
在酿酒酵母中,如果两个基因的表达谱之间的相关性等于0.84,则它们有50%的几率具有共同的转录因子结合剂。
这7个高度相关(> 0.85)的NCR基因在来自基因纲要数据的完整共表达网络中形成了一个连通的子网络(工作未显示)。网络边表示在所有200个条件下两个连接基因的相关表达。边缘的颜色是相关关系的函数:红色表示完全相关,白色表示相关性为0.85,中间色表示中间值。DAL80呈现为一个八角形,以表明其作为转录因子的特殊地位。根据Allocco的推测,包括一个转录因子在内的基因之间的这种相关性是寻找共享转录因子结合位点的合理位置。
对这7个基因的共同调控有了一些了解Georis等人, 2009,“酵母GATA因子Gat1在氮分解代谢抑制敏感基因激活中的中心位置”:
酿酒酵母细胞能够根据环境中可用氮源的质量调整其代谢。氮分解代谢抑制(NCR)抑制酵母利用贫氮源的能力,当富氮源可用时。ncr敏感的表达是由同步的作用调制四种dna结合GATA因子.尽管第一个确定的《关贸协定》因素,Gln3,被认为是ncr敏感基因表达的主要激活因子,我们的工作位置Gat1Gat1是NCR基因表达的限制因子,Gat1的表达受4个GATA因子对氮有效性的调控,以及2个GATA阴性因子的调控Dal80而且Gzf3干扰Gat1与DNA的结合,(iv) Gln3与一些NCR启动子的结合需要Gat1。我们的研究还为GATA两个负面因素的作用模式提供了机制上的见解。Gzf3通过核隔离和自身启动子的竞争干扰Gat1。Dal80依赖的NCR敏感基因表达的抑制发生在三个可能的水平上:Dal80抑制GAT1的表达,它与GAT1竞争结合,它直接抑制NCR基因的转录。(重点补充道)
因此,DAL80只是与GATA基序结合的四个相互作用的转录因子之一。我们将在下面看到,DAL80在其自身的启动子中缺乏GATA序列,但该motif在其他六个启动子中得到了很好的代表。
为了证明Bioconductor通过序列匹配找到已知转录因子结合位点的能力,我们将使用MotifDb中其中一个因子DAL80检索的共享dna结合GATA序列。
[回到顶部]
基于序列的转录因子结合位点搜索方法回答了两个问题:
一个基因的启动子区域传统上(如果不严格)定义其转录起始位点(TSS):上游1000-3000个碱基对,下游100-300个碱基对。为了本工作流程的目的,我们将只关注这些顺式调控区域,忽略增强子区域,它们也是蛋白质/DNA结合位点,但通常距离TSS要远得多。另一种更具包容性的“近端调控区”可能适用于后生动物:TSS的上游和下游有5000个碱基对。
酵母启动子长度统计数据可从Kristiansson等人, 2009:“进化力量作用于启动子长度:富集顺式调控元件的鉴定”
本研究中使用的5,735个酿酒酵母启动子的直方图。启动子长度中位数为455 bp,呈右尾不对称分布。大约有5%的启动子长度超过2000bp,因此在图中没有显示。
启动子的“正常”位置严格而简单地位于基因转录本TSS的上游。
其他调控结构并不少见,因此对TFBSs的全面搜索,特别是在哺乳动物基因组中,应该包括下游序列。
为了简单起见,在下面的分析中,我们将使用统一的上游距离1000 bp,下游距离0 bp。
[回到顶部]
只有8行代码(不包括图书馆
语句)需要在DAL1的启动子中找到两个与JASPAR DAL80 motif的匹配。
库(MotifDb)库(seqLogo)库(motifStack)库(Biostrings)库(GenomicFeatures)库(org.Sc.sgd.db)库(BSgenome.Scerevisiae.UCSC.sacCer3)库(TxDb.Scerevisiae.UCSC.sacCer3.sgdGene)查询(MotifDb,“DAL80”)
# #长度5 # # |创建MotifDb对象从下载公共来源:2013 - 8月30 # # | 5位置频率矩阵从5来源:# # | JASPAR_2014: 1 # # | JASPAR_CORE: 1 # # | ScerTF: 1 # # | jaspar2016: 1 # # | jaspar2018: 1 # # | 1生物/ s # # | Scerevisiae: 5 # # Scerevisiae-ScerTF-DAL80-harbison # # Scerevisiae-JASPAR_CORE-DAL80-MA0289.1 # # Scerevisiae-JASPAR_2014-DAL80-MA0289.1 # # Scerevisiae-jaspar2016-DAL80-MA0289.1 # # Scerevisiae-jaspar2018-DAL80-MA0289.1
pfm.dal80。jaspar <- query(MotifDb,"DAL80")[[1]] seqLogo(pfm.dal80.jaspar)
dal1 <-“YIR027C”染色体。loc <- transcriptsBy(TxDb.Scerevisiae.UCSC.sacCer3。sgdGene, by="gene") [dal1]启动子。dal1 <- getPromoterSeq(染色体。loc, Scerevisiae,上游=1000,下游=0)pcm.dal80。jaspar <- round(100 * pfm.dal80.jaspar)匹配pwm (pcm.dal80. jaspar)Jaspar, unlist(promoter.dal1)[[1]], "90%")
## DNAString主题:TTGAGGAGTTGTCCACATACACATTAGTGTTGAT…GCAAAAAAAAAGTGAAATACTGCGAAGAACAAAG ##视图:##开始结束宽度## [1]621 625 5 [GATAA] ## [2] 638 642 5 [GATAA]
[回到顶部]
我们首先使用两个Bioconductor包中的任何一个来可视化DAL80的TF绑定motif: seqLogo和motifStack。首先,在MotifDb中查询PFM(位置频率矩阵):
查询(MotifDb,“DAL80”)
# #长度5 # # |创建MotifDb对象从下载公共来源:2013 - 8月30 # # | 5位置频率矩阵从5来源:# # | JASPAR_2014: 1 # # | JASPAR_CORE: 1 # # | ScerTF: 1 # # | jaspar2016: 1 # # | jaspar2018: 1 # # | 1生物/ s # # | Scerevisiae: 5 # # Scerevisiae-ScerTF-DAL80-harbison # # Scerevisiae-JASPAR_CORE-DAL80-MA0289.1 # # Scerevisiae-JASPAR_2014-DAL80-MA0289.1 # # Scerevisiae-jaspar2016-DAL80-MA0289.1 # # Scerevisiae-jaspar2018-DAL80-MA0289.1
有两个主题。它们是如何比较的?seqlogo包一直是查看序列标志的标准工具,但一次只能描绘一个标志。
dal80。jaspar <- query(MotifDb,"DAL80")[[1]] DAL80。scertf <-query(MotifDb,"DAL80")[[2]] seqLogo(DAL80 .jaspar)
seqLogo (dal80.scertf)
只需做一点准备,新的(2012年10月)包motifStack就可以将两个图案绘制在一起。类的实例烤瓷
类:
pfm.dal80。jaspar <- new("pfm", mat=query(MotifDb, "dal80")[[1]], name=" dal80 - jaspar ") pfm.dal80。scertf <- new("pfm", mat=query(MotifDb, "dal80")[[2]], name=" dal80 - scertf ") plotMotifLogoStack(DNAmotifAlignment(c(pfm.dal80. DNAmotifAlignment))scertf pfm.dal80.jaspar)))
# #空
在这两个主题中,JASPAR主题有更多的细节,但ScerTF主题是最近发布的。ScerTF以精心挑选特定酵母而闻名。我们将使用ScerTF版本。
Georis等人提到DAL80“与Gat1竞争绑定”——这表明它们具有高度相似的母题。MotifDb有3个条目为GAT1:
查询(MotifDb,“gat1”)
来自6个来源的6个位置频率矩阵:## | JASPAR_2014: 1 ## | JASPAR_CORE: 1 ## | ScerTF: 1 ## | UniPROBE: 1 ## | jaspar2016: 1 ## | jaspar2018: 1 ## | 1个生物/s ## | Scerevisiae:6 ## Scerevisiae-JASPAR_CORE-GAT1-MA0300.1 ## Scerevisiae-JASPAR_2014-GAT1-MA0300.1 ## Scerevisiae-jaspar2016-GAT1-MA0300.1 ## Scerevisiae-jaspar2018-GAT1-MA0300.1 ## scerevisiae - uni探针- gat1。UP00287
将这三者放在一起:
pfm.gat1。jaspar = new("pfm", mat=query(MotifDb, "gat1")[[1]], name=" gat1 - jaspar ") pfm.gat1。scertf = new("pfm", mat=query(MotifDb, "gat1")[[2]], name=" gat1 - scertf ") pfm.gat1。uniprobe = new("pfm", mat=query(MotifDb, "gat1")[[3]], name=" gat1 - uniprobe ")uniprobe pfm.gat1。scertf, pfm.gat1.jaspar))
# #空
GAT1- jaspar基序与DAL80的GATAA基序非常相似,因此与Georis声称GAT1和DAL80竞争绑定相一致。GAT1-ScerTF和GAT1-UniPROBE图案相似,但长度不同。它们是正典的反向补充GATAA主题。
要匹配启动子中的基序,需要以下步骤:
三个搜索基序,一个是DAL80,两个是GAT1,必须先进行转换,然后才能与DNA序列匹配。MotifDb返回一个位置频率矩阵(a烤瓷),所有列的总和为1.0,但Biostrings匹配pwm方法期望一个位置计数矩阵(a脉码调制),使用整数值。将频率矩阵转换为计数矩阵,使用稍微任意但功能可靠的缩放因子100:
pfm.dal80.scertf<- query(MotifDb, "dal80")[[2]] pcm.dal80.scertf <- round(100 * pfm.dal80.scertf) pfm.gat1.jaspar <- query(MotifDb, "gat1")[[1]] pcm.gat1.jaspar <- round(100 * pfm.gat1.jaspar) pfm.gat1.scertf <- query(MotifDb, "gat1")[[2]] pcm.gat1.scertf <- round(100 * pfm.gat1.scertf)
从DAL80共调控子网络中创建7个基因的列表(显示以上).查找它们的系统名称,将在下面立即用到。
基因< - c(“DAL1”、“DAL2”,“DAL4”、“DAL5”、“DAL7”、“DAL80”、“GAP1”)<——羊痘疮。字符(mget(基因,org.Sc.sgdCOMMON2ORF))
获取orfs的抄本坐标。
grl <- transcriptsBy(TxDb.Scerevisiae.UCSC.sacCer3。sgdGene, by="gene") [orfs]
这些坐标在GRangesList对象中返回,指定每个基因的每个已知转录本的起始位置(染色体和碱基对)。有了这些信息,GenomicFeatures::getPromoterSeq计算并返回启动子的DNA序列:
启动子。seqs <- getPromoterSeq(grl, Scerevisiae, upstream=1000, downstream=0)
接下来,我们将寻找与这些序列中的第一个序列(DAL1的启动子)匹配的motif。请注意,在这里和下面,我们在调用matchPWM时使用90%的“min.score”。考虑到DAL80的PFM相对缺乏可变性,这样高的最低匹配分数似乎是合理的:
pfm.dal80.scertf
## 1 2 34 5 6 7 ## a 0.10891089 0101 0.90909091 0.03 ## c 0.66336634 0 0 0 0 0.01010101 0.19 ## g 0.05940594 10 0 0 0.01010101 0.75 ## t 0.16831683 0 010 0.07070707 0.03
的GATAA图案是这个主题中非常强烈的信号。
的结果需要进行一些结构调整getPromoterSeqs作为一个论证matchPWM.我们称之为getPromoterSeq方法使用GRangesList,其中包含一组独特的基因组范围,表示几个基因中的每个基因的转录坐标。对应的结果是aDNAStringSetList其中输入列表中的每个基因都有一个DNAStringSet(本质上是一个DNAStrings列表)。因此,这两个变量都是列表中的列表,其中外部列表以基因命名,内部列表是每转录本坐标或DNA字符串。
因为我们需要的DNA链没有那种主要的基因名称结构,我们称之为unlist剥离这个结构,留下我们想要的DNAStringSet:
打印(类(promoter.seqs))
## [1] "DNAStringSetList" ## attr(,"package") ## [1] "Biostrings"
启动子。Seqs <- unlist(promoter.seqs) print (class(promoter.seqs))
# #[1]“DNAStringSet”# # attr(“包”)# #[1]“Biostrings”
matchPWM (pcm.dal80。scertf,启动子。seq[[1]],“90%”)
## DNAString主题:TTGAGGAGTTGTCCACATACACATTAGTGTTGAT…GCAAAAAAAAAGTGAAATACTGCGAAGAACAAAG ##视图:##开始结束宽度## [1]620 626 7 [TGATAAG] ## [2] 637 643 7 [CGATAAG]
这两个GATAA命中点的接近性表明二聚体DAL80或其他一些GATAA结合二聚体可能结合DAL1。
所有7个基因的启动子与一个结合基序的所有匹配都可以通过这个命令一次找到:
脉宽调制。命中<- sapply(promoter。seqs,函数(pseq)匹配pwm (pcm.dal80。Scertf, pseq, min.score="90%"))
我们可以总结三个母题(dal80。scertf gat1。Jaspar, gat1.scertf),通过基因和母题创建计数的数据框架。首先,确定点击率:
dal80.scertf。命中<- sapply(promoter。seqs,函数(pseq)匹配pwm (pcm.dal80。Scertf, pseq, min.score="90%"))gat1.scertf.hits <- sapply(promoter.seqs, function(pseq) matchPWM(pcm.gat1.scertf, pseq, min.score="90%")) gat1.jaspar.hits <- sapply(promoter.seqs, function(pseq) matchPWM(pcm.gat1.jaspar, pseq, min.score="90%"))
现在数数它们的长度:
dal80.scertf<- sapply(dal80.scertf.hits, length) gat1.jaspar <- sapply(gat1.jaspar.hits, length) gat1.scertf <- sapply(gat1.scertf.hits, length)
最后,从这些信息创建一个data.frame:
资源描述。Gata <- data.frame(基因=基因,dal80。scertf gat1。jaspar gat1.scertf)
简单的dal80.scertf5碱基图案的点击率最高。更复杂的8-碱基gat1.jasparMtoif的点击率更低:也许它被过度指定了。从ScerTF中获得的GAT1的“其他”(非gataa)基序在这些基因的启动子中的匹配量比GATA基序少。事实上,非gataa基序命中可能与偶然没有太大区别,这可以通过随机选择基因启动子中基序命中的抽样分布来揭示。这样的分析将留给读者作为练习。
[回到顶部]
该数据集和我们的探索揭示了这些紧密共同调控的NCR基因中的许多GATAA结合位点,但仍存在未回答的问题,其中一些是:
据报道,GAT1有两个(或更多)完全不同的结合基序。这是因为它有两个或更多不同的结合域吗?它们是否都有功能,但只是在不同的条件下?
负调控因子DAL80的基因表达与其已知抑制基因的表达高度相关。我们认为消极的监管者与其目标之间的关系是相反的。为什么丰富的DAL80不阻止其他6个基因的表达?
DAL80/ScerTF motif和GAT1/JASPAR motif密切相关。上面的匹配表显示了这两种图案截然不同的总数。母题的发现结构能解释这种差异吗?
对反直觉的DAL80表达的一种推测性解释是“核隔离”,这是一种基因被表达但mRNA被保留以供以后使用的机制。看到Lavut A, Raveh D2012.
GAT1有多个结合基序(我们展示了两个,SGD四个这是基因调控尚未完全理解的复杂性的另一个迹象。
四种与gataa结合的调控因子,两个正两个负,以及它们的许多下游靶标,其中一些我们在这里已经研究过了,因此可以被视为尚未完全阐明的复杂调控回路的一部分。明智地整合许多其他类型的数据,仔细的实验室工作,以及正确的计算工具,最终将澄清这些问题。
[回到顶部]
这里使用的包有大量的帮助页面,并包括突出显示常见用例的小插图。帮助页和小插图可以从R会话中获得。加载包后,键入,例如:
帮助(包=“MotifDb”)?查询
虽然它很简单,只有几个方法,但有必要详细了解MotifDb包。要访问小插图:
browseVignettes(包=“MotifDb”)
最后,您可以打开一个网页,其中包含所有已安装包的全面帮助资源:
help.start ()
[回到顶部]
sessionInfo ()
## R版本4.1.0(2021-05-18)##平台:x86_64-pc-linux-gnu(64位)##运行在:Ubuntu 20.04.2 LTS ## ##矩阵产品:默认## BLAS: /home/biocbuild/bbs-3.13-bioc/R/lib/libRblas。所以## LAPACK: /home/biocbuild/bbs-3.13-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]网格stats4并行统计图形grDevices utils ##[8]数据集方法基础## ##其他附加包:# # # # [1] generegulation_1.16.0 [2] seqLogo_1.58.0 # # [3] org.Sc.sgd.db_3.13.0 # # [4] motifStack_1.36.0 # # [5] TxDb.Scerevisiae.UCSC.sacCer3.sgdGene_3.2.2 # # [6] MotifDb_1.34.0 # # [7] GenomicFeatures_1.44.0 # # [8] AnnotationDbi_1.54.0 # # [9] Biobase_2.52.0 # # [10] BSgenome.Scerevisiae.UCSC.sacCer3_1.4.0 # # [11] BSgenome_1.60.0 # # [12] rtracklayer_1.52.0 # # [13] Biostrings_2.60.0 # # [14] XVector_0.32.0 # # [15] GenomicRanges_1.44.0 # # [16] GenomeInfoDb_1.28.0 # # [17] IRanges_2.26.0 # # [18]S4Vectors_0.30.0 ## [19] BiocGenerics_0.38.0 ## [20] BiocStyle_2.20.0 ## ##通过命名空间加载(并且没有附加):## [9] utf8_1.2.1 R6_2.5.0 ## [11] colorspace_2.0-1 DBI_1.1.1 ## [13] splitstackshape_1.4.8 ade4_1.7-16 ## [15] timdyselect_1.1.1 prettyunits_1.1.1 ## [17] grImport2_0.2-0 bit_4.0.4 ## [23] sass_0.4.0 scales_1.1.1 ## [25] rappdirs_0.3.3 string_1 .4.0 ## [27] digest_0.6.27Rsamtools_2.8.0 # # [29] rmarkdown_2.8 jpeg_0.1 - 8.1 # # [31] base64enc_0.1-3 pkgconfig_2.0.3 # # [33] htmltools_0.5.1.1 MatrixGenerics_1.4.0 # # [35] highr_0.9 dbplyr_2.1.1 # # [37] fastmap_1.1.0 htmlwidgets_1.5.3 # # [39] rlang_0.4.11 RSQLite_2.2.7 # # [41] jquerylib_0.1.4 BiocIO_1.2.0 # # [43] generics_0.1.0 jsonlite_1.7.2 # # [45] BiocParallel_1.26.0 dplyr_1.0.6 # # [47] rcurl_1.98 - 1.3 magrittr_2.0.1 # # [49] GenomeInfoDbData_1.2.6 Matrix_1.3-3 # # [51] munsell_0.5.0 Rcpp_1.0.6 # # [53] fansi_0.4.2[65] KEGGREST_1.32.0 magick_2.7.2 ## [67] knitr_1.33 pillar_1.6.1 ## [69] rjson_0.2.20 biomaRt_2.48.0 ## [71] XML_3.99-0.6 glue_1.4.2 ## [73] evaluate_0.14 data.table_1.14.0 ## [75] BiocManager_1.30.15 png_0.1-7 ## [77] vctrs_0.3.8 gtable_0.3.0 ## [79] purrr_0.3.4 assertthat_0.2.1 ## [81] cachem_1.0.5 ggplot2_3.3.3 ## [83] xfun_0.23 restfulr_0.0.13 ## [85] tibble_3.1.2 GenomicAlignments_1.28.0 ## [87] memoise_2.0.0 ellipsis_0.3.2
[回到顶部]