地区1.28.0
重要的技术进步出版以来,我们看到了人类基因组等微阵列和门店技术允许我们产生大量数据,进行数据分析和解释基因组和外遗传性研究的瓶颈。在许多情况下,这些数据可以被转换成一组的基因组区域:基因表达微阵列实验的位置,山峰的地区ChIP-seq数据或高c的接触区域。统计评估这些地区集之间的空间关系和其他地区集甚至其他基因功能分析的一个基础部分。
地区创建了为解决这一问题,并提供功能统计评估地区集使用排列测试之间的关系。其排列测试框架专门设计与基因组区域和所有功能基因组和mask-aware。区域包含许多预定义的随机化和评价功能涵盖最常见的用例,但是用户也可以提供自定义函数来扩展其功能。除了文本输出,地区也可以画出排列测试结果,因此可以从一组基因地区出版物准备几行代码。
此外,地区包括一组基于Bioconductor的辅助函数GenomicRanges基础设施管理和操作区域设置一个简单和一致的接口。
最常见的用途之一地区是回答这个问题:区域设置一个重叠的区域在B超预期?例如:是我ChIP-seq山峰活跃基因的启动子?还是重复区域的破发点吗?要回答这样的问题我们可以使用方便overlapPermTest
功能区域,评价两组之间的重叠区域的数量。
要做到这一点,我们需要两个地区作为集农庄
,一个data.frame
或一个榻文件。一个可行的方法来创建一个农庄
是使用toGRanges
函数。在这种情况下,作为一个例子,我们将创建两组随机区域约有50%的重叠。
< - createRandomRegions (nregions = 50,长度。意味着= 5000000,length.sd = 3000000)
# # # #附加包:“Biostrings”
# #以下对象从包:基地的蒙面:# # # # strsplit
B < - c ([1:25], createRandomRegions (nregions = 25、长度。意味着= 500000,length.sd = 30000) numOverlaps (A, B, count.once = TRUE)
# # 26 [1]
numOverlaps (randomizeRegions (A)、B count.once = TRUE)
# # 8 [1]
一旦我们有两套区域,我们可以测试如果A与B超预期。要做到这一点,我们将使用overlapPermTest
。
pt < - overlapPermTest (A = B = B, ntimes = 50)
# #[1]“注:最低假定值只有50排列是0.0196078431372549。你应该考虑增加的数量排列。”
pt
# # $ numOverlaps # #假定值:0.0196078431372549 # # z分数:6.9427 # #的迭代次数:50 # #选择:大# #评估的原始地区设置:26 # #评价函数:numOverlaps随机化功能:# # # # # # randomizeRegions attr(,“类”)# # [1]“permTestResultsList”
我们可以看到,测试很重要,p值< 0.05。现在,情节,我们可以简单的情节pt
对象。
情节(pt)
我们可以看到测试结果的可视化表示。在灰色的随机的重叠区域B,集群在黑条代表均值和绿色的数量设置一个重叠的原始地区,这比预期的要大得多。红线表示意义的限制。
此外,我们可以测试,如果两个地区集之间的关系是高度依赖于他们的确切位置。要做到这一点,我们可以使用localZScore
函数。
lz < - localZScore (pt = pt = A, B = B)情节(lz)
本例中显示移动的区域产生一个z得分下降,表明,该协会是依赖的确切位置区域和不是一个地区的影响。更多的信息localZScore
函数可以在部分找到当地的z分数。
在这个小例子中我们使用overlapPermTest
测试的数量两个地区集之间的重叠。使用更常规的permTest
函数,我们可以测试其他类型的协会使用不同的评估函数(距离,评价函数的基因组或自定义用户定义函数)和应用不同类型的随机化。此外,这个例子假设数据是指人类基因组和使用默认的面具和地区没有随机化。在接下来的部分中,详细解释了所有这些选项。
地区的核心功能是统计评估之间的联系不同的RS或RS使用排列测试方法以及其他基因的功能。这个功能是支持的permTest
功能,并行执行排列和高度可定制的功能测试和生产的统计评估结果。
与permTest
和正确的生物数据可以回答不同类型的生物问题如:
注意:但是,重要的是要考虑区域的排列测试只能测试一组区域之间的关系和其他一些功能但不确定哪些地区最有助于协会。因此,对于问题的类型”确定该地区在RS与一些“”,区域并不是一个合适的选择,应该使用和更具体的分析工具。
有三个主要元素需要执行一个排列测试:我们的RS、随机化策略和一个评价函数。让我们看看它是如何运作的一个例子:
想象我们获得一组基因,我的特殊基因,我们想给他们往往在于基因组的某些部分,在我们的案例中一系列的地区我们知道改变,例如,他们拷贝数增加。
首先我们需要我们的RSs加载到r .我们可以使用toGRanges
函数。
特殊的< - toGRanges(系统。文件(“extdata”、“my.special.genes。txt”,包= "地区"))。< - toGRanges(系统的基因。文件(“extdata”、“all.genes。txt”,包= "地区"))< - toGRanges(系统改变。文件(“extdata”、“my.altered.regions。txt”,包= "地区"))长度(特殊)
# # 200年[1]
长度(all.genes)
# # 49646年[1]
长度(改变)
# # 8 [1]
接下来我们需要的是一个评估函数。在我们的示例中我们想要测试的重叠RS与改变的区域,所以我们将使用numOverlaps
函数,给定两个RS返回它们之间重叠的数量。
使用numOverlaps
我们可以数一数之间的重叠两个RS,在我们的案例中我们可以计算数量的特殊基因重叠区域的改变。
numOverlaps(特别的,改变)
# # 114年[1]
但这个数字,114年的200年,大还是小?这是否意味着相关基因改变地区吗?或者可能只是偶然?
这里是随机化策略发挥其作用的地方。我们需要一个随机化策略,创建一个新的地区,是随机的对我们的评估函数,而是考虑原来的区域设置的特异性。例如,如果我们的原始RS来自上天的一个实验中,所有的地区都可映射的部分基因组中并没有任何意义随机区域变成一个着丝点或任何其他non-mappable基因组的一部分。
所提供的帮助,许多随机化功能地区接受一个面具,表明随机区域不能被放置的地方。在任何情况下,选择最佳的随机化策略是一个关键部分的排列测试和最终结果有很大的影响。
最不受限制的函数中地区是randomizeRegions
,给定一个RS,基因组和一个可选的面具,返回一个新的RS与相同数量的地区和相同的宽度与原始的随机放置在non-masked部分基因组。这也是最慢的随机函数可用。
在我们的示例中,由于特殊的基因大集合的一个子集的基因更好的使用resampleRegions
给定一个宇宙的区域,随机选择一个子集创建随机区组。
随机的。RS < - resampleRegions random.RS(特别的,宇宙= all.genes)
与200范围和2 # #农庄对象元数据列:# # seqnames范围链| V4 V6 # # < Rle > < IRanges > < Rle > | <人物> <人物> # # 31045 chr11 124824016 - 124911385 * | NM_025004 + # # 42604 chr17 80400462 - 80408707 * | NR_036517 - # # 41317 chr17 36337710 - 36348609 * | NM_001291465 - # # 29800 chr11 58390145 - 58393205 * | NM_000614 + # # 33392 chr12 112842993 - 112847443 * | NM_000970 - # #…………………# # 48795 chr22 46756730 - 46933067 * | NM_014246 - # # 6255 chr2 38813 - 46588 * | NM_001077710 - # # 46506 chr20 9288446 - 9461462 * | NM_000933 + # # 14311 chr5 138855112 - 138862375 * | NM_198282 - # # 43175 chr18 47015604 - 47015694 * | NR_003701——# # - - - - - - - # # seqinfo: 24从一个未指明的基因组序列;没有seqlengths
现在,我们可以使用评价函数来测试水平的随机RS协会改变地区。我们可以重复,得到不同的评价。
随机的。RS < - resampleRegions(特别的,宇宙= all.genes) numOverlaps(随机的。RS,改变)
49 # # [1]
随机的。RS < - resampleRegions(特别的,宇宙= all.genes) numOverlaps(随机的。RS,改变)
# # 44 [1]
随机的。RS < - resampleRegions(特别的,宇宙= all.genes) numOverlaps(随机的。RS,改变)
# # [1]54
随机的。RS < - resampleRegions(特别的,宇宙= all.genes) numOverlaps(随机的。RS,改变)
# # 41 [1]
如果我们这样做,很多时候我们会建立一个分布的评价从随机获得RS所以,我们可以把我们的初步评估与那些获得随机和确定合理的原来的评价是否得到机会。实际上,仅仅计算评价的次数随机RS(或降低)高于原来的评估,我们可以计算偶然看到我们最初的评估的概率,这价值正是排列的假定值测试。此外,我们计算的z分数评价的原始RS和之间的距离的均值随机评估除以标准差的随机评估。z分数,虽然没有直接的可比性,可以帮助评估“强度”的评价。
执行一个排列的主要功能测试地区是permTest
,一个函数在一个地区(RS)在接受任何格式(见第四节-地区集),一个随机函数和一个评价函数和返回permTestResults
对象。
上述函数执行整个排列测试分析,评估原始RS,创建一个数量的随机化和评估和基因表达计算假定值和z分数。它利用平行包随机并行和评估。
除了3必需的参数,permTest
接受其他固定参数-ntimes
指定数量的随机化,详细的
切换的一个进度条,force.parallel
强迫或禁止使用多核运行分析…,它还接受任何额外的参数随机化所需的函数(通常是一个基因组和面具)或评价函数。
例如检查是否我区域重叠重复超过预期,我们可以使用:
#不运行pt < - permTest(=我。地区,B =重复,随机。函数= randomizeRegions evaluate.function = numOverlaps)
或者如果我们想检查我的特殊基因高甲基化水平,我们可以使用一个测试是这样的:
#不运行pt < - permTest(=我。基因,随机。函数= resampleRegions宇宙=。基因,评估。函数= meanInRegions x = methylation.levels.450K)
后我们的示例之前,我的特殊基因,改变区域我们可以叫permTest
是这样的:
pt < - permTest(=特殊ntimes = 50,随机。函数= resampleRegions宇宙=。基因,评估。函数= numOverlaps, B =改变,verbose = FALSE)
# #[1]“注:最低假定值只有50排列是0.0196078431372549。你应该考虑增加的数量排列。”
注意:自permTest
使用运营商的省略号(…)评估所需的额外的参数和随机函数强烈建议总是使用命名参数(例如= RS1而不是只有RS1)。未能这样做可能导致难以调试错误。
在任何情况下我们会得到一个permTestResults
对象与结果分析。查看这个结果我们可以打印或使用总结。在这种情况下,我们可以看到,该协会是统计学意义,所以我们可以得出结论,与我相关的特殊基因改变的区域。
pt
# # $ numOverlaps # #假定值:0.0196078431372549 # # z分数:9.8819 # #的迭代次数:50 # #选择:大# #评估的原始地区集:114 # #评价函数:numOverlaps随机化功能:# # # # # # resampleRegions attr(,“类”)# # [1]“permTestResultsList”
总结(pt)
# #排列测试:1 # #重要排列测试:1 # #迭代:50 # #随机化功能:resampleRegions # #测试结果:# # pvalue zscore测试# # numOverlaps 0.01960784 - 9.8819大
我们可以得到一个图形表示的结果排列测试使用情节
。它描绘了一个灰色的直方图表示的评价随机RS安装正常,黑条代表的均值随机评估和绿色栏代表的评价原始RS。此外,红条(和红色阴影)代表意义限制(默认0.05)。因此,如果绿色的酒吧是在红色阴影区域这意味着最初的评估极不可能因此假定值将是巨大的。
情节(pt)
比较,想象我们有一个第二子集的基因,我定期基因,不与改变相关的区域。我们可以运行相同的测试,我们将得到一个负面的结果。在这种情况下,我们得到一个非重要假定值和图中我们可以看到原始的评估是接近的意思是随机的。
常规< - toGRanges(系统。文件(“extdata”、“my.regular.genes。txt”,包= "地区"))长度(常规)
# # 200年[1]
numOverlaps(常规,改变)
# # 46 [1]
pt.reg < permTest(有规律的、ntimes = = 50,随机。函数= resampleRegions宇宙=。基因,评估。函数= numOverlaps, B =改变,verbose = FALSE)
# #[1]“注:最低假定值只有50排列是0.0196078431372549。你应该考虑增加的数量排列。”
pt.reg
# # $ numOverlaps # #假定值:0.254901960784314 # # z分数:-0.5547 # #的迭代次数:50 # #选择:少# #评价的原始地区设置:46 # #评价功能:numOverlaps随机化功能:# # # # # # resampleRegions attr(,“类”)# # [1]“permTestResultsList”
情节(pt.reg)
选择正确的数量的排列并不是一个简单的任务。大量的排列会产生更精确的结果,更好的情节,但排列测试可以计算昂贵,根据地区的数量RS和随机化策略选择它可能需要几个小时执行一个排列测试几千排列。另一方面,最低的假定值是有限的数量排列和执行与低排列排列测试号码可以产生不准确的结果。一个好的策略可以尝试第一次的排列和继续只有结果看好或者至少不清楚,因为如果在一些排列的原始评价非常接近随机化的均值,它最终将重要的概率很小。较低的排列,地区将生成一个注明最低的假定值实现和晚增加排列号码。
作为一个例子,上面的两个排列的测试中,如果运行5000排列会产生这样的情节。
#没有运行-见图1 pt.5000 < permTest (ntimes = 5000 =特殊,随机。函数= resampleRegions宇宙=。基因,评估。函数= numOverlaps, B =改变,verbose = TRUE)情节(pt.5000)
这是一个重要的情节排列测试5000排列。
#没有运行-见图2 pt.5000。reg < - permTest(=定期ntimes = 5000,随机。函数= resampleRegions宇宙=。基因,评估。函数= numOverlaps, B =改变,verbose = TRUE)情节(pt.5000.reg)
这是不重要的情节排列测试5000排列。
选择一个好的随机化策略在执行一个排列测试是至关重要的。一个人应该选择一个随机化策略,ramdomizes区域对协会的评价,同时保持尽可能多的内在结构和特征区域。例如,一般不会有意义随机区域变成一个着丝点或任何不可用地区这样一个unmappable地区门店数据。
在地区一个随机函数是任何函数,采用RS作为参数,并返回一个RS与随机区域。不同的随机函数包含在包,但是也可以创建自定义随机函数更具体的需求(见第四部分地区集)。
这是最一般的随机化策略。它沿着独立的基因组随机地方所有地区。函数接受每个地区的原始RS和随机的染色体和位置,同时保持它的大小和任何相关的元数据。面具可选参数可以用来指定的部分基因组区域不能被放置的位置(如着丝粒)。
除了之外有两个参数:
作为一个例子,我们可以用3个地区创建一个RS染色体1。
< - toGRanges (data.frame(对应= c (“chr1”、“chr1”,“chr1”),开始= c(20000、50000、100000),结束= c (22000、70000、400000)))
我们可以在整个基因组随机:
randomizeRegions(基因组=“hg19”)
与3和0 # #农庄对象元数据列:链# # # # seqnames范围< Rle > < IRanges > < Rle > # # [1] chr5 54829332 - 54829332 * # # [2] chr4 62031963 - 62031963 * # # [3] chrX 3133032 - 3133032 * # # - - - - - - - # # seqinfo: 298年从一个未指明的基因组序列;没有seqlengths
相反,如果我们每集。空空的omosome to TRUE, all randomized regions will be in chr1.
randomizeRegions(基因组=“hg19”, per.chromosome = TRUE)
与3和0 # #农庄对象元数据列:链# # # # seqnames范围< Rle > < IRanges > < Rle > # # [1] chr1 156910316 - 156910316 * # # [2] chr1 221000108 - 221000108 * # # [3] chr1 41402430 - 41402430 * # # - - - - - - - # # seqinfo: 298年从一个未指明的基因组序列;没有seqlengths
另一个随机函数可用地区circularRandomizeRegion。在这种情况下,而不是随机的所有地区独立随机过程维护秩序和距离的地区,而在染色体改变他们的地位。从概念上讲,每个染色体都是“环状”和给定一个随机旋转同时保持地区稳定。如果指定一个面具,在这种情况下,考虑到更大的约束在随机过程中,是不可能的,以确保没有地区将重叠的面具。而不是用户可以指定的最大比例的区域重叠的面具。如果阿普特旋转染色体检测到太多的重叠,一个新的随机旋转将被应用。这个过程会重复,直到一个合适的解决方案如果发现或max。重试旋转已经应用。如果旋转后,一个地区位于结束和开始的染色体之间,它将分裂成两个区域。因此,区域的数量不是guarateed一样原始RS。circularRandomizeRegions
可以显著的速度比吗randomizeRegions
。
作为一个例子,我们可以随机RS与以前相同,并观察如何在同一个染色体随机区域和在相同的相对距离:
circularRandomizeRegions(基因组=“hg19”,面具= NA)
与3和0 # #农庄对象元数据列:链# # # # seqnames范围< Rle > < IRanges > < Rle > # # 1 chr1 146003475 - 146003475 * # # 2 chr1 146033475 - 146033475 * # # 3 chr1 146033475 - 146383475 * # # - - - - - - - # # seqinfo: 1从一个未指明的基因组序列;没有seqlengths
最后resampleRegions随机函数可用。在这种情况下,原始RS是有限集的一个子集所有有效的区域称为宇宙。例如,一套小的基因在基因组中所有基因的一个子集。随机过程在本例中选择其他随机成员由宇宙,重采样。
评价函数是函数定义是什么排列测试被测试。提供了一些评价函数地区涵盖最常见的使用但它是可能的(简单)来创建您自己的自定义评价函数(参见2.6.1的一节)。一般来说,一个评估函数是一个函数RS和返回一个数值。
numOverlaps函数接收2 RS A和B,并返回区域的重叠区域的数量在B,这是评价函数时使用的测试是否我们的RS与第二个RS更多(或更少)——比预期的机会。e组做的ChIP-seq峰值往往躺在CpG岛吗?
如果不是评估两个重叠RS我们想要测试他们的距离,我们可以使用meanDistance,给定两个RS A和B,计算每个区域的均值距离最近的地区在B是有用的回答的问题类型”是我的高表达基因比预期更接近某个TFBS的机会吗?”
meanInRegion函数是非常有用的,当我们要评估的关系RS对某种数值。例如,我们可以测试我们RS的甲基化水平是否高于预期,或者如果它积累突变比人们想象的更少。
可以使用自定义在permTest随机化和评价策略。为此,用户只需要创建一个合适的函数和给它permTest函数作为参数。
一个评估函数可以是任何函数与至少一个RS作为它的第一个参数和一个省略号(…)返回一个单一的数值。它还可以包括任何其他参数。
例如,这是一个有效的(尽管非常缓慢)函数来评估我们的GC内容区域。
gcContent < -函数(bsgenome,…) {< - toGRanges reg。seq < - getSeq (bsgenome) base.frequency < - alphabetFrequency (reg.seqs) gc。pct < -(总和(base.frequency [C]) +总和(base.frequency (“G”])) /笔(宽度(A))返回(gc.pct)}
一个随机函数是任何函数与至少一个RS和一个省略号作为参数并返回一个RS。定义一个不同的和有意义的随机函数,不过,不是那么容易想出一个有趣的评价函数。
例如,一个有效的随机化策略可以交换metada值与每个区域有关。这是一个简单的函数,排列第一列元数据并返回交换RS。
permuteRegionsMetadata < -函数(…),{< - toGRanges (A) mcols (A) (1) < - mcols (A)(样本(长度(A)), 1]返回(A)}
为了创建可复制的代码与函数,使用随机数字排列测试等地区,有必要使用set.seed
。然而,由于地区使用平行执行测试设置也是必要的mc.set.seed
参数错误,以确保再现性。
< - createRandomRegions (nregions = 50,长度。意味着= 5000000,length.sd = 3000000)B < - c ([1:25], createRandomRegions (nregions = 25、长度。意味着= 500000,没有mc.set length.sd = 30000) #。种子= FALSE set.seed (123) overlapPermTest (A, B, ntimes = 10, force.parallel = TRUE)
# #[1]“注:最低假定值只有10排列是0.0909090909090909。你应该考虑增加的数量排列。”
# # $ numOverlaps # #假定值:0.0909090909090909 # # z分数:6.6246 # #的迭代次数:10 # #注:不到20迭代所产生不可靠的结果替代:# # # #大评价的原始地区设置:26 # #评价函数:numOverlaps随机化功能:# # # # # # randomizeRegions attr(,“类”)# # [1]“permTestResultsList”
set.seed (123) overlapPermTest (A, B, ntimes = 10, force.parallel = TRUE)
# #[1]“注:最低假定值只有10排列是0.0909090909090909。你应该考虑增加的数量排列。”
# # $ numOverlaps # #假定值:0.0909090909090909 # # z分数:13.0084 # #的迭代次数:10 # #注:不到20迭代所产生不可靠的结果替代:# # # #大评价的原始地区设置:26 # #评价函数:numOverlaps随机化功能:# # # # # # randomizeRegions attr(,“类”)# # [1]“permTestResultsList”
与mc.set #。种子= FALSE set.seed (123) overlapPermTest (A, B, ntimes = 10, mc.set。种子= FALSE, force.parallel = TRUE)
# #[1]“注:最低假定值只有10排列是0.0909090909090909。你应该考虑增加的数量排列。”
# # $ numOverlaps # #假定值:0.0909090909090909 # # z分数:8.7964 # #的迭代次数:10 # #注:不到20迭代所产生不可靠的结果替代:# # # #大评价的原始地区设置:26 # #评价函数:numOverlaps随机化功能:# # # # # # randomizeRegions attr(,“类”)# # [1]“permTestResultsList”
set.seed (123) overlapPermTest (A, B, ntimes = 10, mc.set。种子= FALSE, force.parallel = TRUE)
# #[1]“注:最低假定值只有10排列是0.0909090909090909。你应该考虑增加的数量排列。”
# # $ numOverlaps # #假定值:0.0909090909090909 # # z分数:8.7964 # #的迭代次数:10 # #注:不到20迭代所产生不可靠的结果替代:# # # #大评价的原始地区设置:26 # #评价函数:numOverlaps随机化功能:# # # # # # randomizeRegions attr(,“类”)# # [1]“permTestResultsList”
最低假定值实现排列取决于使用的排列数量。另一方面,z分数是衡量实力的协会是独立的数量排列。它被定义为期望值之间的距离和观测,用标准差来衡量。
当执行一个关联分析可以发现关联,虽然显著,不是生物学上相关。与ChIP-seq数据,例如,无知是检测一个重要广泛的染色质标记重叠覆盖拥有区域和转录因子。这种联系,而真实的,是间接的和基于这两个地区倾向于集中于基因。
虽然我们不能检测生物相关的协会,localZscore函数我们至少可以检查协会是专门与地区RS的确切位置。为此,RS的基地转移到5’和3’从其原始位置和评价函数计算每转RS。策划评估转移位置,我们可以估计z分数的价值如何变化,当移动地区RS:中心顶点表示协会是高度依赖的确切位置区域而平坦曲线表明,该协会的区域,因为我们可以移动区域并获得相同的关联值。
例如,在前一个示例中,我们已经确定了一个积极的协会之间的一组“特殊”和一组基因改变的基因组区域。特殊的基因往往在这些alterede区域,但该协会高度依赖他们的确切位置吗?还是一个地区性协会?测试,我们可以移动的位置基因评估这个位置变化会影响z分数。
pt < - permTest(=特殊ntimes = 50,随机。函数= resampleRegions宇宙=。基因,评估。函数= numOverlaps, B =改变,verbose = FALSE)
# #[1]“注:最低假定值只有50排列是0.0196078431372549。你应该考虑增加的数量排列。”
lz < - localZScore(=特殊,pt = pt,窗口= 10 *意味着(宽度(特殊)),步骤=(宽度(特殊))/ 2,B =改变)情节(lz)
在这种情况下,我们可以看到,没有改变的z分数如果我们移动区域。这预计,因为改变区域远大于特殊的基因和数万megabases大小,因此,该协会并不是高度依赖的确切位置区域。
相反,我们可以创建一个例子为一个协会高度依赖于测试协会RS的确切位置的一个子集。
基因组< - filterChromosomes (getGenome (“hg19”), keep.chr =“chr1”) B < - createRandomRegions (nregions = 100,长度。意味着= 10000,长度。sd = 20000,基因组=基因组,non.overlapping = FALSE) < - B[示例(20)]pt < - overlapPermTest (= A, B = B, ntimes = 100,基因组=基因组,non.overlapping = FALSE) pt
# # $ numOverlaps # #假定值:0.0099009900990099 # # z分数:37.9947 # #的迭代次数:100 # #选择:大# #评估的原始地区设置:20 # #评价功能:numOverlaps随机化功能:# # # # # # randomizeRegions attr(,“类”)# # [1]“permTestResultsList”
lz < - localZScore (= A、B = B pt = pt,窗口= 10 *意味着(宽度(A)),步骤=意味着(宽度(A)) / 2)情节(lz)
在这种情况下,我们可以看到当我们取代地区有点远离他们的初始位置,z分数下降几乎为0。
在地区基因组、基因组区域的一部分,是由三个参数定义:染色体,开始和结束,开始是小于或等于结束,都是在染色体的极限。这个定义包括从单基地(开始等于结束)整个染色体。此外,基因组区域可以有相关数据或注释将通常依赖于数据的性质。区域设置,然后,被定义为一群一个或多个基因组区域和被称为RS沿着这文档。
在内部,地区使用农庄
代表一个RS,函数返回一个RS返回农庄
对象。然而,地区接受不同的数据格式作为输入由于它toGRanges
函数。特别是,它接受:
农庄
对象的GenomicRangesBioconductor包。data.frame
或任何其他类继承它的“榻”结构的前三列表示染色体,开始和结束。有一些限制有关的命名列的数据帧中详细说明toGRanges
函数帮助页面。一个文件:一个文件名或连接到一个文件中接受的格式rtracklayer的导入功能(床,人造石铺地面,…)
字符串:所使用的一个或多个字符串形式UCSC的或进口(例如“chr9:23000 - 25000”)。它将正确地处理逗号作为成千上万的分隔符(例如“chr9:23,000 - 25000”)或者是开始/结束分隔符(如。“chr9:23000 25000),这些操作的组合样式相同的特征向量。
提供了两个实用函数地区管理转换的农庄
:toGRanges
和toDataframe
。
toGRanges
接受一个RS在任何支持的格式和创建一个农庄
对象从它toDataframe
接受一个农庄
对象并将它转换成一个data.frame
例如,我们可以创建一个农庄
从一个data.frame
代表一个RS染色体1和2与3地区(x, y)使用额外的值toGRanges
:
< - data.frame(= 1,从而向开始= c(24) 1, 15日,结束= c(10年,20年,30),x = c (1、2、3), y = c (“A”、“b”、“c”)) b < - toGRanges b (A)
与3和2 # #农庄对象元数据列:# # seqnames范围链| x y # # < Rle > < IRanges > < Rle > | <数字> <人物> # # 1 1 1 1 - 10 * | # # 2 1 15 - 20 * | 2 b # # 3 1能力* | 3 c # # - - - - - - - # # seqinfo: 1从一个未指明的基因组序列;没有seqlengths
我们可以回到一个data.frame
结构使用toDataframe
函数。
toDataframe (B)
# #杆开始结束x y # # 1 1 1 10 1 # # 2 1 15 20 2 b # # 3 1 24 30 3 c
大部分功能地区准备与基因组和面具。基因组是可用的完整的一套染色体长度和面具的基因组区域“不可用”,例如着丝粒,高度重复区域,等等…完美的面具是特定于应用程序的,可能会对最终的结果有重要影响。
地区提供了一个功能基因组和面具,getGenomeAndMask
,但通常直接用户不需要使用它。在地区,所有函数接受一个基因组和面具作为参数在内部使用这个函数,接受任何基因组和面具规范接受这些函数。
在地区染色体的基因组是一个简单的列表及其长度。因此,可以通过指定一个基因组data.frame
2列(空空的
和长度
)或3列(空空的
,开始
和结束
)或农庄
对象与一个地区每个染色体。然而,当使用一个标准的染色体作为可用BSgenome
,它是可能的和更方便依赖自动加载的基因组(考虑到系统中安装)。通过指定BSgenome
基因组的名称如hg19 mm9, dm2…-地区将获取正确的基因组信息。
与基因组一样,可以指定一个面具data.frame
或农庄
对象的“禁止”地区。然而,也有可能和更方便使用的自动检索默认掩码BSgenome
如果它是适合应用程序。再一次,自动检索面具,掩盖了版本的BSgenome
必须安装。
的getGenomeAndMask
接受两个参数,一个基因组和一个可选的面具。一般来说,基因组将基因组组装的名字(“hg19”、“mm10”,等等…)和函数将检查是否安装了这个名字的有一个基因组并返回。如果没有可用的时候,会提示用户安装它。如果基因组的蒙面版本可用,这是一个将被使用。如果一个基因组已经可用的形式data.frame
或农庄
对象(或任何其他有效的RS格式),该函数将返回它农庄
。
第二个参数,面具
,可以用来指定一个面具或显式地请求来检索一个也没有。特别是,如果面具
是空的(这是默认值),它将尝试检索的面具BSGenome
包,如果面具
NA它将返回一个空的面具,如果面具
是接受toGRanges
它将返回它的面具。
函数返回一个列表
基因组和面具的元素,他们两人农庄
对象。
最新版本的基因组包含许多其他“染色体”代表不同的替代程序集和补丁具体复杂的地区。而这些额外染色体是有用的在某些情况下,在他们干扰分析,所以最好删除它们的基因组。这样做,一般过滤任何子集的染色体,地区包括filterChomosomes
函数。它将RS并返回一个过滤的版本只包含地区指定的染色体。使用它需要指定一个RS,有机体和染色体的类型(常染色体,规范化,…)。除了可以指定一个自定义列表保持染色体的名字。
可用依赖于生物体染色体类型,和listChrTypes
函数可以用来看看生物和染色体子集是可用的。
人类。基因组< - getGenomeAndMask (“hg19”,面具= NA)美元的人类基因组。规范< - filterChromosomes(人类。基因组生物=“汞”)listChrTypes ()
# #智人(hg):常染色体,规范# #亩肌肉(毫米):常染色体,规范# #牛(bosTau):常染色体,规范# #线虫(ce):常染色体,规范# #鲐鱼类(danRer):规范# #猕猴属mulata (rheMac):常染色体,规范# #鼠形(rn):常染色体,规范# #酿酒酵母(sac):常染色体,规范# #黑腹果蝇(dm):常染色体,规范# #黑猩猩(panTro):常染色体,规范化
人类。常染色体< - filterChromosomes(人类。基因组生物=“汞”,chr.type =人类常染色体)。123 < - filterChromosomes(人类。基因组。空空的=c("chr1", "chr2", "chr3"))
地区包括一组辅助函数的基础上GenomicRanges基础设施管理和操纵RS:joinRegions
,commonRegions
,mergeRegions
,overlapRegions
等等…所有这些函数共享标准和简单的签名,与一个或两个RS的格式和几乎所有人(除了接受splitRegions
和overlapRegions
)返回一个农庄
对象。
min.dist
,连接不到的地区min.dist
基地。农庄
对象和他们的十字路口,他们两人共有的基因组区域。农庄
对象的基因组区域包含在其中,RS是相当于合并成一个,然后融合重叠区域。农庄
对象的区域没有出现在B,这是部分重叠的地区- B。农庄
对象的基因组区域覆盖的A或B而不是两个。农庄
对象overlapRegions
是一个最强大的和有用的RS管理功能地区。它有一个参数的数量和类型的返回值。全面的描述,参考地区用户指南。给定两个RS A和B,overlapRegions
标识的区域在重叠区域B,过滤器,并返回它们。可以过滤通过地区之间的关系(例如,“该地区必须包含在一个从B”)或重叠的数量(例如“至少10基地”,“至少一半的地区”)。返回值可能是一个完整的表的信息,对每一个重叠,该地区,该地区在B和他们的关系,一个布尔向量表示为每个区域在它是否重叠区域B后,过滤条件或简单有效的数量之间的重叠两个RS。此外,可以指定如果额外的数据列与RS必须保持或可能会被忽略。
例子:考虑到与10个地区两个相同的RS染色体1我们一直使用到目前为止,我们可以得到完整的表与重叠:
重叠。df < - overlapRegions overlaps.df (A, B)
# #杆startA安达startB endB类型# # 1 1 1 10 1 10 # # 2 1 15 20 15 20 # # 3 1 24 30 24 30相等
我们可以过滤重叠,只有那些从包含一个区域一个区域B .此外,得到该地区的基地从B:覆盖的区域
重叠。df < - overlapRegions (A、B类型=“比娜”,get.pctA = TRUE) overlaps.df
# #杆startA安达startB endB类型pct.basesA # # 1 1 1 1 10等于100 # # 2 1 15 20 15 20等于100 # # 3 1 24 30 24 30等于100
或只能得到至少5基地的重叠
重叠。df < - overlapRegions (A, B, min.bases = 5) overlaps.df
# #杆startA安达startB endB类型# # 1 1 1 10 1 10 # # 2 1 15 20 15 20 # # 3 1 24 30 24 30相等
或者布尔向量表示的区域在重叠区域B与5或更多的基地(这是很方便的一个子集RS基于区域重叠另一个RS)
重叠。bool < - overlapRegions (A, B, min.bases = 5, only.boolean = TRUE) overlaps.bool
# # 1 2 3 # #真的真的真的
或区域的重叠区域的数量从B至少5个基地
overlaps.int < - overlapRegions (A, B, min.bases = 5, only.count = TRUE) overlaps.int
# # 3 [1]
在本节中,我们将介绍如何使用的例子地区回答真正的生物问题。
基因启动子区域GC富人和有许多深藏于发起人CpG岛。然而,它们之间有显著关联?做CpG岛重叠与启动子不止一个期望的机会吗?
我们将使用吴et al . 2010描述的CpG岛和推动者的UCSC的定义为-2000 + 200个碱基对TSS根据基因组组装hg19。启动子文件可以dowloadedhttp://gattaca.imppc.org/regioner/data/UCSC.promoters.hg19.bed。
#没有运行set.seed (12345) cpgHMM < - toGRanges (“http://www.haowulab.org/software/makeCGI/model-based-cpg-islands-hg19.txt”)启动子< - toGRanges (“http://gattaca.imppc.org/regioner/data/UCSC.promoters.hg19.bed”)
测试的想法是随机移动CpG岛沿着它们的基因组,数数有多少重叠子。因为我们想要测试是否两套区域有重叠高于预期,我们不需要一个特殊的随机化策略,我们可以使用方便的功能overlapPermTest
,它使用permTest
在幕后,但预设一些参数(特别是,它使用numOverlaps
作为评价函数和randomizeRegions
随机化策略)。
开始,我们将删除非规范的推动者和CpG岛染色体,所以我们局限于标准的基因组的一部分,删除任何他们可能包括冗余。
#没有运行cpgHMM < - filterChromosomes (cpgHMM有机体=“汞”,chr.type =“规范”)启动子< - filterChromosomes(启动子,有机体=“汞”,chr.type =“规范”)
此外,为了加速这个例子中,我们将使用2000的65699的一个子集CpG岛地区集。在整个地区通用设置应该使用,在很多情况下,一个足够大的子集应该给一个想法关于协会。使用整个组是完全可能的,只会慢得多。
以确保我们将计数CpG岛只有一次即使重叠2个或更多的推动者,我们使用参数count.once = TRUE
,将自动传递到numOverlaps
函数。一般来说,所需的任何参数随机化或评价函数可以在这里将使用相关功能。
#不运行cpgHMM_2K < -示例(cpgHMM, 2000) pt <——overlapPermTest (cpgHMM_2K推动者,ntimes = 1000,基因组=“hg19 count.once = TRUE) pt假定值:0.000999000999000999 z分数:60.5237的迭代次数:1000替代:大评价的原始地区集:614评价函数:numOverlaps随机化功能:randomizeRegions意味着交换美元(pt) 79.087
获得的假定值(> 0.001)向我们展示了一个强大的协会。614 2000 CpG岛重叠至少有一个发起人而平均只有79.087岛屿重叠随机区组的启动子。这些结果可以概括在一个阴谋策划perTestResults
。
#没有运行情节(pt)
CpG岛和基因启动子之间的联系
在情节我们可以看到灰色评估随机的分布地区,绿色评价的原始地区设置(在这种情况下,614年CpG岛重叠至少有一个发起人),和红色的意义的限制。高z分数和情节做出明显的极端意义协会测试。
吴H, Caffo B,杰夫哈,范伯格美联社,伊RA(2010)重新定义CpG岛使用层次隐马尔可夫模型。生物统计学11 (3):499 - 514。
CTCF蛋白在真核基因组的结构作用及其与cohesin复杂关系很好了昂& Corces 2014。cohesin复杂由四个亚基,Scc1 (Rad21) Scc3, Smc1 Smc3,形成一个环形结构。Cohesin也相关启动子有或没有CTCF (Ong & Corces 2011)。我们想要测试如果峰决定ChIP-seq实验与Rad21重叠超过预期产生的峰值与CTCF ChIP-seq实验。我们也想要测试,如果Rad21山峰重叠与发起人过半的预期。此外,我们想看看这两个协会是不同的。
Rad21与CTCF ChIP-seq山峰从编码项目(http://www.genome.gov/encode/)。UCSC的峰值文件可以下载和阅读使用toGRanges
函数。发起人将示例1中一样,也就是说,在UCSC的TSS -2000 / + 200。
#没有运行set.seed (12345) download.file (“http://hgdownload-test.cse.ucsc.edu/goldenPath/hg19/encodeDCC/wgEncodeAwgTfbsUniform/wgEncodeAwgTfbsSydhHepg2Rad21IggrabUniPk.narrowPeak.gz”、“Rad21.gz”) download.file (“http://hgdownload-test.cse.ucsc.edu/goldenPath/hg19/encodeDCC/wgEncodeAwgTfbsUniform/wgEncodeAwgTfbsUwHepg2CtcfUniPk.narrowPeak.gz”、“Ctcf.gz”) HepG2_Rad21 < - toGRanges (gzfile (“Rad21.gz”),头= FALSE) HepG2_Ctcf < - toGRanges (gzfile (“Ctcf.gz”),头= FALSE)启动子< - toGRanges (“http://gattaca.imppc.org/regioner/data/UCSC.promoters.hg19.bed”)
我们将开始分析通过移除任何特性在染色体非规范使用filterChromosomes
。在这种情况下只有启动子
在其它染色体区域。此外,加快分析我们将使用只有一个子集的5000的37233 Rad21山峰。最后的例子有更多信息子集的大小。
#没有运行启动子< - filterChromosomes(启动子、生物=“hg19”) HepG2_Rad21_5K < -样本(HepG2_Rad21, 5000)
测试Rad21之间的关联和CTCF或推动者我们将使用permTest
函数。我们想要测试如果该地区集重叠超过预期,因此我们将使用numOverlaps
作为评价函数,通过它count.once
参数计算中每个区域最多一次。我们将使用随机函数circularRandomizeRegions
,因为它是速度比randomizeRegions
,将使该地区的内部结构(不会改变相邻区域之间的距离)和我们不测试这样的距离。用这个函数可能不可能,以确保一个完美的排斥蒙面的地区,但在这种情况下我们也能容忍。一般来说,在许多情况下,circularRandomizeRegions
是一个合适的替代randomizeRegions
的好处是快得多。我们还将设置mc.cores = 4
所以4处理器核心和使用mc.set.seed = FALSE
确保可再生的效果。这两个参数一般不需要。
重要提示:是非常重要的,通过传入的参数的名称permTest
,因为它使用省略号…
和可能产生意想不到的错误如果参数是传递没有一个名字。
#不运行pt_Rad21_5k_vs_Ctcf < - permTest (= HepG2_Rad21_5K, B = HepG2_Ctcf ntimes = 1000,随机。函数= circularRandomizeRegions评估。函数= numOverlaps计数。一旦= TRUE,基因组=“hg19 mc.set。种子= FALSE, mc.cores = 4) pt_Rad21_5k_vs_Prom < permTest (A = HepG2_Rad21_5K, B =推动者,ntimes = 1000,随机。函数= circularRandomizeRegions评估。函数= numOverlaps计数。一旦= TRUE,基因组=“hg19 mc.set。种子= FALSE, mc.cores = 4) pt_Rad21_5k_vs_Ctcf pt_Rad21_5k_vs_Prom情节(pt_Rad21_5k_vs_Ctcf,主要=“Rad21_5K vs CTCF”)情节(pt_Rad21_5k_vs_Prom,主要=“Rad21_5K vs推动者”)
协会Rad21峰值与CTCF基因启动子。
我们可以看到,测试都是重要的假定值很低。事实上,他们都尽可能低的假定值这个数的随机化,因为没有一个随机区域设置了评估值高于原始设置。然而,协会与CTCF更极端,实际上CTCF的z分数高约25倍比推动者。它是有意义的,因为大约85%的Rad21山峰重叠与CTCF但只有11%重叠基因启动子。
为了进一步研究协会的性质,我们将使用localZscore
函数,将原始地区,看看在z分数的影响。在本例中,我们将开始与1000个基点的窗口和步骤的50个基点。当地的z分数运行分析,我们需要给它原来的区域设置,排列的结果所需的额外的参数测试和评价函数,在这种情况下,B = HepG2_Ctcf
和count.once = TRUE
。
#没有运行lz_Rad21_vs_Ctcf_1 < - localZScore (= HepG2_Rad21_5K, B = HepG2_Ctcf, pt = pt_Rad21_5k_vs_Ctcf窗口= 1000 = 50步,count.once = TRUE) lz_Rad21_vs_Prom_1 < - localZScore (A = HepG2_Rad21_5K, B =推动者,pt = pt_Rad21_5k_vs_Prom窗口= 1000 = 50步,count.once = TRUE)情节(lz_Rad21_vs_Ctcf_1,主要=“Rad21_5k vs CTCF (1 kbp)”)的阴谋(lz_Rad21_vs_Prom_1,主要=“Rad21_5k vs推动者(1 kbp)”)
当地协会的z分数分析Rad21峰值与CTCF和基因启动子1 kbp窗口。
分析z分数的变化当Rad21地区移动他们的初始位置,我们可以看到一个非常不同的概要文件。与CTCF的协会,一个狭窄的峰值是显而易见的。这意味着,如果原始地区,Rad21山峰是流离失所的300个基点,协会的z分数几乎降到了零。这样的明确的窄峰表明协会山峰的高度依赖于准确的位置,在这种情况下,考虑到有意义的内容已经描述colocalization CTCF Rad21。然而在启动子的情况下,我们可以看到,没有区域移动时的z分数的下降。这表明协会我们看到更多的区域,它不那么严格依赖的确切位置区域。
增加窗口值为10000 bp和200个基点的一步,我们可以看到一个更广泛的z分数的变化,我们可以看到有一滴z分数,但在一个高得多的距离,这表明更广泛的地区或区域协会。
#没有运行lz_Rad21_vs_Ctcf_2 < - localZScore (= HepG2_Rad21_5K, B = HepG2_Ctcf, pt = pt_Rad21_5k_vs_Ctcf窗口= 10000 = 500步,count.once = TRUE) lz_Rad21_vs_Prom_2 < - localZScore (A = HepG2_Rad21_5K, B =推动者,pt = pt_Rad21_5k_vs_Prom窗口= 10000 = 500步,count.once = TRUE)情节(lz_Rad21_vs_Ctcf_2,主要=“Rad21_5k vs CTCF (10 kbp)”)的阴谋(lz_Rad21_vs_Prom_2,主要=“Rad21_5k vs推动者(10 kbp)”)
当地协会的z分数分析Rad21峰值与CTCF和基因启动子10 kbp窗口。
注意:在许多情况下,可以使用的一个子集地区协会第一眼看到在测试之前与整个地区。然而,子集的大小是很重要的。图中有测试的结果Rad21协会与CTCF基因启动子和三个不同的子集大小:200年、5000年和所有Rad21 reagions。很明显,5000年的子集能够检测与检测两组地区,但200年的子集与CTCF很强的协会,但显然未能检测启动子的协会。
的影响大小在协会测试子集。
Ong CT, Corces VG。增强功能:洞察组织基因表达的调节。Nat牧师麝猫。2011年4月,12 (4):283 - 93。
Ong CT, Corces VG。CTCF:架构蛋白质缩小基因组拓扑和功能。Nat牧师麝猫。2014年4月,15(4):234 - 46所示。
的主要焦点地区不是速度而是灵活性。然而,最耗时的部分测试,主要是随机函数,优化和执行很好(尽管仍然远离纯C实现如bedtools)。在本节中,我们提出一个比较的性能不同的可用的功能。
随机化的过程区域在基因组的位置可以是困难和费时。不同的功能可用地区很多不同的复杂性和性能,从最简单和最快resampleRegions,随机选择一个子集的区域从有限宇宙的可能区域提供的用户,最慢、最复杂的randomizeRegions,创造真正随机的区域在基因组中,考虑一个面具的非基因组的选择部分,甚至确保随机区域之间没有重叠。
这里是一个简短的描述,每一个随机化的算法comlexity功能:
样本
选择N
区域从用户提供的宇宙。它基本上是一个线性算法对区域的数量。在这两个情节你可以看到所需的时间随机变量大小的地区设置与这些算法在不同的条件下。
随机化时间对区域的数量
随机化时间对掩模密度
sessionInfo ()
# # R版本4.2.0 RC (2022-04-19 r82224) # #平台:x86_64-pc-linux-gnu(64位)# #下运行:Ubuntu 20.04.4 LTS # # # #矩阵产品:默认# #布拉斯特区:/home/biocbuild/bbs - 3.15 - bioc / R / lib / libRblas。所以# # LAPACK: /home/biocbuild/bbs - 3.15 - bioc / R / lib / libRlapack。# # # #语言环境:# # [1]LC_CTYPE = en_US。utf - 8 LC_NUMERIC = C # #[3]而= 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 = C LC_TELEPHONE = # # [11] LC_MEASUREMENT = en_US。utf - 8 LC_IDENTIFICATION = C附加基本包:# # # # # # [1]stats4统计图形grDevices跑龙套数据集方法# # # # # #[8]基地其他附加包:# # # # [2][1]BSgenome.Hsapiens.UCSC.hg19.masked_1.3.993 BSgenome.Hsapiens.UCSC.hg19_1.4.3 # # [3] BSgenome_1.64.0 # # [4] rtracklayer_1.56.0 # # [5] Biostrings_2.64.0 # # [6] XVector_0.36.0 # # [7] regioneR_1.28.0 # # [8] GenomicRanges_1.48.0 # # [9] GenomeInfoDb_1.32.0 # # [10] IRanges_2.30.0 # # [11] S4Vectors_0.34.0 # # [12] BiocGenerics_0.42.0 # # [13] knitr_1.38 # # [14] BiocStyle_2.24.0 # # # #通过加载一个名称空间(而不是附加):# # [1]SummarizedExperiment_1.26.0 xfun_0.30 # # [3] bslib_0.3.1 lattice_0.20-45 # # [5] htmltools_0.5.2 yaml_2.3.5 # # [7] xml_3.99 - 0.9 rlang_1.0.2 # # [9] jquerylib_0.1.4 BiocParallel_1.30.0 # # [11] matrixStats_0.62.0 GenomeInfoDbData_1.2.8 # # [13] stringr_1.4.0 zlibbioc_1.42.0 # # [15] MatrixGenerics_1.8.0 evaluate_0.15 # # [17] memoise_2.0.1 restfulr_0.0.13 # # [19] Biobase_2.56.0 fastmap_1.1.0 # # [21] parallel_4.2.0 highr_0.9 # # [23] Rcpp_1.0.8.3 BiocManager_1.30.17 # # [25] cachem_1.0.6 DelayedArray_0.22.0 # # [27] magick_2.7.3 jsonlite_1.8.0 # # [29] Rsamtools_2.12.0 rjson_0.2.21 # # [31] digest_0.6.29 stringi_1.7.6 # # [33] bookdown_0.26 BiocIO_1.6.0 # # [35] grid_4.2.0 cli_3.3.0 # # [37] tools_4.2.0 bitops_1.0-7 # # [39] magrittr_2.0.3 sass_0.4.1 # # [41] rcurl_1.98 - 1.6 crayon_1.5.1 # # [43] Matrix_1.4-1 rmarkdown_2.14 # # [45] R6_2.5.1 GenomicAlignments_1.32.0 # # [47] compiler_4.2.0