内容

metagene
作者查尔斯·乔利·波帕朗charles.joly-beauparlant@crchul.ulaval.ca法比安·克劳德·拉马泽fabien.lamaze.1@ulaval.caRawane Sambrawane.samb.1@ulaval.ca阿斯特丽德·路易斯·德尚Astrid-Louise.Deschenes@crchudequebec.ulaval.ca阿诺·德洛特arnaud.droit@crchuq.ulaval.ca
修改: 2015年9月18日
编译2016年11月10日星期四19:37:27
许可证: artist -2.0 |文件

1介绍

这个包产生元基因样图来比较dna相互作用蛋白在选定的特征组的行为。典型的分析可以在基因的转录起始位点(TSS)或任何感兴趣的区域(如增强子)的粘度中进行。可以在单个分析中比较一组特性和/或一组bam文件的多个组合。自举分析用于比较组和定位具有统计上不同富集概况的区域。为了提高分析的灵敏度,使用校准数据代替峰值调用者(即:MACS2或PICS)产生的峰值。metagene包使用bootstrap来更好地估计每组样本的平均富集和置信区间。

这个小插图将介绍metagene包的所有主要功能。

2加载metagene包

库(metagene)

3.输入

3.1对齐文件(BAM文件)

分析中可以包含的BAM文件的数量没有硬性限制(但是如果BAM文件太多,内存可能会成为问题)。BAM文件必须被索引。例如,如果您使用文件名file.bam,文件名为file.bam.bai必须存在于同一目录中。

BAM文件的路径(相对或绝对)必须是一个矢量:

<- get_demo_bam_files(
## [1] "/tmp/Rtmpn6ozhW/Rinst77db76ee300c/metagene/extdata/align1_rep1. ". bam" ## [2] "/tmp/Rtmpn6ozhW/Rinst77db76ee300c/metagene/extdata/align1_rep2。. bam" ## [3] "/tmp/Rtmpn6ozhW/Rinst77db76ee300c/metagene/extdata/align2_rep1。. bam" ## [4] "/tmp/Rtmpn6ozhW/Rinst77db76ee300c/metagene/extdata/align2_rep2。"/tmp/Rtmpn6ozhW/Rinst77db76ee300c/metagene/extdata/ctrl.bam"

对于这个演示,我们有2个样本(每个样本有2个重复)。也可以使用命名向量将自己的名字添加到每个BAM文件中:

Named_bam_files <- bam_files names(Named_bam_files) <- letters[seq_along(bam_files)] Named_bam_files
## a ## "/tmp/Rtmpn6ozhW/Rinst77db76ee300c/metagene/extdata/align1_rep1. ". bam" ## b ## "/tmp/Rtmpn6ozhW/Rinst77db76ee300c/metagene/extdata/align1_rep2。. bam" ## c# # "/tmp/Rtmpn6ozhW/Rinst77db76ee300c/metagene/extdata/align2_rep1。## d ## "/tmp/Rtmpn6ozhW/Rinst77db76ee300c/metagene/extdata/align2_rep2。“/tmp/Rtmpn6ozhW/Rinst77db76ee300c/metagene/extdata/ctrl.bam”

使用已命名的BAM文件可以简化metagene辅助函数的使用和设计的创建。

3.2基因组区域

3.2.1之上床上的文件

为了比较感兴趣的自定义区域,可以使用一个或多个BED文件的列表。

区域<- get_demo_regions()区域
## [1] "/tmp/Rtmpn6ozhW/Rinst77db76ee300c/metagene/extdata/list1。## [2] "/tmp/Rtmpn6ozhW/Rinst77db76ee300c/metagene/extdata/list2.bed"

文件的名称(没有扩展名)将用于命名每个组。

metagene也支持narrowPeakbroadPeak

3.2.2GRangesList对象-区域

作为BED文件列表的替代方案,农庄GRangesList对象可以被使用。

3.2.3可用的数据集

中已经提供了一些常用的数据集metagene包:

  • promoters_hg19
  • promoters_hg18
  • promoters_mm10
  • promoters_mm9
数据(promoters_hg19) promoters_hg19
## GRanges对象具有23056个range和1个元数据列:## seqnames ranges strand | gene_id ##    |  ## 1 chr19 [58873215, 58875214] - | 1 ## 10 chr8 [18247755, 18249754] + | 10 ## 100 chr20 [43279377, 43281376] - | 100 ## 1000 chr18 [25756446, 25758445] - | 1000 ## 10000 chr1 [244005887, 244007886] - | 10000 ## # ... ... ... ... . ...## 9991 chr9 [115094945, 115096944] - | 9991 ## 9992 chr21 [35735323, 35737322] + | 9992 ## 9993 chr22 [19108968, 19110967] - | 9993 ## 9994 chr6 [90538619,90540618] + | 9994 ## 9997 chr22 [50963906, 50965905] - | 9997 ## ------- ## seqinfo:来自hg19基因组的93个序列(1个循环)

有关每个数据集的详细信息,请参阅其文档(即:promoters_hg19 ?).

3.3设计小组

一个设计组包含一组BAM文件,当它们放在一起时,就代表了一个逻辑分析。此外,设计组包含每个存在的BAM文件之间的关系。样本(有或没有重复)和对照可以分配到同一个设计组。根据需要,可以有尽可能多的组。一个BAM文件可以分配给多个组。

为了表示每个BAM文件之间的关系,设计组必须具有以下列:

有两种可能的方法来创建设计组,通过读取文件或直接在R中创建设计对象。

3.3.1从文件设计组

可以使用文本文件将设计组加载到metagene包中。由于要指定BAM文件之间的关系,因此以下列是必填的:

  • 第一列:所有设计组、BAM文件名或BAM名称(如果有命名的BAM)的每个BAM文件的路径列表(绝对或相对)。文件被使用)。
  • 以下列:每个设计组(重复和/或对照)一列。列只能接受三个值:
    • 0:忽略文件
    • 1:输入
    • 2:控制

该文件还必须包含头文件。建议使用样品查询第一列的名称,但未检查该值。设计文件中的其他列将用于命名设计组,并且必须是唯一的。

fileDesign <- system.file("extdata/design.txt", package="metagene")表(fileDesign, header=TRUE, stringsAsFactors=FALSE)设计$Samples <-粘贴(system. name)file("extdata", package="metagene"), design$Samples, sep="/") able(design)
样品 align1 align2
/ tmp / Rtmpn6ozhW / Rinst77db76ee300c metagene / extdata / align1_rep1.bam 1 0
/ tmp / Rtmpn6ozhW / Rinst77db76ee300c metagene / extdata / align1_rep2.bam 1 0
/ tmp / Rtmpn6ozhW / Rinst77db76ee300c metagene / extdata / align2_rep1.bam 0 1
/ tmp / Rtmpn6ozhW / Rinst77db76ee300c metagene / extdata / align2_rep2.bam 0 1
/ tmp / Rtmpn6ozhW / Rinst77db76ee300c metagene / extdata / ctrl.bam 2 2

3.3.2来自R的设计团队

不是必须使用设计文件,您可以创建设计data.frame使用您喜欢的方法(只要遵守前面提到的值的限制)。

例如,之前的design data.frame可以直接在R中创建:

design <- data.frame(Samples = c("align1_rep1. "bam”、“align1_rep2。bam”、“align2_rep1。bam”、“align2_rep2。bam", "ctrl.bam"), align1 = c(1,1,0,0,2), align2 = c(0,0,1,1,2)) design$Samples <- paste0(system. bam)file("extdata", package="metagene"), "/", design$Samples) able(design)
样品 align1 align2
/ tmp / Rtmpn6ozhW / Rinst77db76ee300c metagene / extdata / align1_rep1.bam 1 0
/ tmp / Rtmpn6ozhW / Rinst77db76ee300c metagene / extdata / align1_rep2.bam 1 0
/ tmp / Rtmpn6ozhW / Rinst77db76ee300c metagene / extdata / align2_rep1.bam 0 1
/ tmp / Rtmpn6ozhW / Rinst77db76ee300c metagene / extdata / align2_rep2.bam 0 1
/ tmp / Rtmpn6ozhW / Rinst77db76ee300c metagene / extdata / ctrl.bam 2 2

4分析步骤

一个典型的元成因分析将包括以下步骤:

4.1最小的分析

最小亚干分析可分为两个步骤:

  1. 初始化(功能)。
  2. 情节
regions <- get_demo_regions() bam_files <- get_demo_bam_files() #初始化mg <- metagene$new(regions = regions, bam_files = bam_files) #绘图mg$plot(title = "Demo metagene plot")
# # align1_rep1_list1
# # align1_rep1_list2
# # align1_rep2_list1
# # align1_rep2_list2
# # align2_rep1_list1
# # align2_rep1_list2
# # align2_rep2_list1
# # align2_rep2_list2
# # ctrl_list1
# # ctrl_list2

正如您所看到的,显式调用meta分析的每个步骤并不是强制性的。例如,在前面的示例中,情节函数使用默认值自动调用其他步骤(下一节将更详细地描述这些步骤)。

在这种特殊情况下,由于默认情况,情节是混乱的metagene将为BAM文件和区域的每种可能组合生成一条曲线。因为我们有5个BAM文件和2个区域,所以我们得到了10条曲线。

如果我们想要更多地控制分析的每一步是如何执行的,我们必须直接调用每个函数。

4.2完整的分析

为了完全控制元基因分析的每一步,了解如何执行完整的分析是很重要的。如果我们对默认值感到满意,则不必显式调用每个步骤(如前一节所示)。

4.2.1初始化

在此步骤中,将从每个BAM文件中提取指定的每个区域的覆盖率。更具体地说,一个新的农庄将指定的所有区域组合在一起创建地区的参数函数。

Regions <- get_demo_regions() bam_files <- get_demo_bam_files() mg <- metagene$new(Regions = Regions, bam_files = bam_files)

4.2.2生成矩阵

为了生成元生图,覆盖率必须在矩阵中转换,其中列表示位置,行表示区域。此外,为了减少后续步骤的计算时间,还对位置进行了分类。

我们可以控制箱子的大小bin_count论点。默认情况下,bin_count在此步骤中将使用100个。

mg produce_matrices美元()

我们还可以使用我们之前制作的设计来去除背景信号并组合重复:

Mg $produce_matrices(设计=设计)

4.2.3生产data.frame

元成图是利用ggplot2包,它需要一个data.frame作为输入。在此步骤中,将计算功能区的值。用于估计置信区间的算法可以用统计参数。

默认情况下,metagene使用“bootstrap”来更好地估计每组区域/BAM文件中每个位置的富集平均值。另一种称为“基本”的方法将简单地使用色带来表示每个组中每个位置的95%的值。

Mg $produce_data_frame(stat = "basic")
# # align1_list1
# # align1_list2
# # align2_list1
# # align2_list2

4.2.4策划

在此步骤中,metagene将使用data.frame来绘制计算值ggplot2.我们使用。来显示区域的子集region_namesexp_names参数。的region_names对应于初始化时使用的区域名称。的exp_name将根据是否添加了设计而变化。如果没有添加设计,则此参数对应于BAM名称或BAM文件名。否则,我们必须使用设计中的列名。

mg$plot(region_names = "list1", title = "Demo plot子集")

5操纵metagene对象

5.1getter

有多个getter函数可用于访问存储在metagene对象。

5.1.1get_params

初始化过程中使用的各种参数metagene对象,生成的矩阵和生成的绘图被保存,并可以使用get_params功能:

Mg <- get_demo_metagene()
## $padding_size ## [1] 0 ## ## $verbose ## [1] FALSE ## ## $bin_count ## [1] 100 ## ## $bam_files ## align1_rep1 ## "/tmp/Rtmpn6ozhW/Rinst77db76ee300c/metagene/extdata/align1_rep1。. bam" ## align1_rep2 ## "/tmp/Rtmpn6ozhW/Rinst77db76ee300c/metagene/extdata/align1_rep2。. bam" ## align2_rep1 ## "/tmp/Rtmpn6ozhW/Rinst77db76ee300c/metagene/extdata/align2_rep1。. bam" ## align2_rep2 ## "/tmp/Rtmpn6ozhW/Rinst77db76ee300c/metagene/extdata/align2_rep2。/tmp/Rtmpn6ozhW/Rinst77db76ee300c/metagene/extdata/ctrl. bam" ## ctrl ## "bam" ## ## $force_seqlevels ## [1] FALSE ## ## $flip_regions ## [1] FALSE

5.1.2get_design

要获得用于生成最后版本矩阵的设计,可以使用get_design功能:

另外,也可以在不生成##矩阵的情况下添加一个设计:#mg$add_design(get_demo_design()) mg$get_design()
## Samples align1 align2 ## 1 align1_rep1。Bam 1 0 ## 2 align1_rep2。Bam 1 0 ## 3 align2_rep1。Bam 0 1 ## 4 align2_rep2。Bam 0 1 ## 5 ctrl。Bam 2 2

5.1.3get_bam_count

要获取BAM文件中对齐的读取数,可以使用get_bam_count功能:

mg get_bam_count美元(bam_files [1])
## [1] 4635

5.1.4get_regions

要获取所有区域,可以使用get_regions功能:

mg get_regions美元()
## GRangesList对象长度为2:## $list1 ## GRangesList对象具有50个范围和0个元数据列:## seqnames ranges strand ##    ## [1] chr1 [16103663, 16105662] * ## [2] chr1 [23921318, 23923317] * ## [3] chr1 [34848977, 34850976] * ## [4] chr1 [36368182, 36370181] * ## [5] chr1 [36690488, 36692487] * ## ... ... ... ...## [46] chr1 [172081530, 172083529] * ## [47] chr1 [172081796, 172083795] * ## [48] chr1 [172147016, 172149015] * ## [49] chr1 [172205805, 172207804] * ## [50] chr1[172260642, 172262641] * ## ##…## <1个元素> ## ------- ## seqinfo: 1个未指定的基因组序列;没有seqlengths

提取区域的子集也是可能的get_regions功能:

Mg $get_regions(region_names = c(regions[1]))
## GRangesList对象,长度为1:## $list1 ## GRangesList对象,包含50个range和0个元数据列:## seqnames ranges strand ##    ## [1] chr1 [16103663, 16105662] * ## [2] chr1 [23921318, 23923317] * ## [3] chr1 [34848977, 34850976] * ## [4] chr1 [36368182, 36370181] * ## [5] chr1 [36690488, 36692487] * ## ... ... ... ...## [46] chr1 [172081530, 172083529] * ## [47] chr1 [172081796, 172083795] * ## [48] chr1 [172147016, 172149015] * ## [49] chr1 [172205805, 172207804] * ## [50] chr1 [172260642, 172262641] * ## ## ------- ## seqinfo: 1个未指定基因组序列;没有seqlengths

是5.1.5get_raw_coverages

的初始化过程中生成的覆盖metagene对象时,可以使用get_raw_coverages函数。请注意,为了节省空间,metagene将只提取所提供区域的覆盖。

覆盖范围<- mg$get_raw_coverages()覆盖范围[b[1]]
# # RleList长度22 # # $ chr10 # # integer-Rle长度与1 # #运行长度:130694993 130694993 # #值:0 # # # # $ chr11 # # integer-Rle长度与1 # #运行长度:122082543 122082543 # #值:0 # # # # $ chr12 # # integer-Rle长度与1 # #运行长度:120129022 120129022 # #值:0 # # # # $ chr13 # # integer-Rle长度与1 # #运行长度:120421639 120421639 # #值:0 # # # # $ chr14 # # integer-Rle长度与1 # #运行长度:124902244 124902244 # #值:0 ## ##…## <17个元素>
长度(保险)
## [1]

也可以通过提供文件名来提取所有覆盖的子集:

覆盖<- mg$get_raw_coverages(文件名= bam_files[1:2])长度(覆盖)
## [1]

5.1.6get_normalized_coverages

get_normalized_coverages函数的工作原理与get_raw_coverages函数,除了它返回以每百万对齐读取(RPM)为单位的覆盖率。

5.2链接功能

metagene的每个函数(getter除外)都不可见地返回一个指向自身的指针。这意味着函数可以被链接:

rg <- get_demo_regions() bam <- get_demo_bam_files() d <- get_demo_design() title <- "Show chain" mg <- metagene$new(rg, bam)$produce_matrices(design = d)$plot(title = title)
# # align1_list1
# # align1_list2
# # align2_list1
# # align2_list2

5.3复制元存储对象

要复制元数据对象,必须使用克隆功能:

Mg_copy <- mg$clone()

6管理大型数据集

metagene尽量减少它的内存使用,在处理多个大型数据集时可能会遇到内存限制(特别是当有很多具有大宽度的区域时)。

避免这种情况的一种方法是分别分析每个数据集,然后在生成元成图之前合并:

Mg1 <- metagene$new(bam_files = bam_files, regions = regions[1]) Mg1 $produce_data_frame() ## align1_rep1_list1 ## align1_rep2_list1 ## align2_rep2_list1 ## ctrl_list1 mg2 <- metagene$new(bam_files = bam_files, regions = regions[2]) mg2$produce_data_frame() ## align1_rep2_list2 ## align1_rep2_list2 ## align2_rep2_list2 ## align2_rep2_list2 ## ctrl_list2

然后你可以提取data.frameS并将它们与rbind

$get_data_frame() df2 <- mg2$get_data_frame() df <- rbind(Df1, df2)

最后,你可以使用plot_metagene生成元生图的函数:

p <- plot_metagene(df) p + ggplot2::ggtitle("管理大型数据集")

7比较配置文件与排列

可以使用permutation_test的功能。metagene包中。请注意,排列测试功能仍在开发中,预计会在未来的版本中进行更改。

第一步是决定我们想要比较哪些配置文件并提取相应的矩阵:

矩阵< - mg get_matrices美元()m1 < -矩阵[[“list1”]][[“align1”]][["输入"]]m2 < -矩阵[[“list1”]][[“align2”]][["输入"]]

然后我们定义了用于比较两个概要文件的函数。为此,有一个配套的软件包metagene命名similaRpeak提供多个指标。

对于这个例子,我们将准备一个函数来计算两个配置文件之间的RATIO_NORMALIZED_INTERSECT:

library(similaRpeak) perm_fun <- function(profile1, profile2) {similarity(profile1, profile2)[["metrics"]][["RATIO_NORMALIZED_INTERSECT"]]}

然后,我们使用这个度量来比较我们的两个配置文件:

ratio_normalized_intersect <- perm_fun(colMeans(m1), colMeans(m2)) ratio_normalized_intersect
## [1] 0.7336965

为了检查这个值是否重要,我们可以对用于生成轮廓的两个矩阵进行排列,并计算它们的RATIO_NORMALIZED_INTERSECT:

permutation_results <- permutation_test(m1, m2, sample_size = nrow(m1), sample_count = 1000, FUN = perm_fun)

最后,我们检查计算值大于排列结果的频率:

Sum (ratio_normalized_intersection> = permutation_results) / length(permutation_results)
## [1] 0.005