1介绍

本文讨论的来龙去脉亚硫酸氢分析的全基因组鸟枪测序(WGBS)数据集,使用BSmooth算法,这是第一次使用(汉森et al . 2011年)正式提出和评估(伊瑞Langmead汉森,2012)。文档的目的是专注于分析等任务和问题。的基本用法bsseq包是覆盖着“bsseq用户指南”。它可能是有用的参考用户指南在阅读分析指导。

在这个描述我们分析染色体21和22(汉森et al . 2011年)。这是主要数据从3结肠癌患者。我们要对每个病人正常结肠组织以及结肠癌。样本运行在ABI固体生成50个基点单头读取。读是使用BSmooth套件中的人鱼对准器保持一致。看到的主要出版更多的细节(汉森et al . 2011年)

这个数据是包含在bsseqData

库(bsseq)库(bsseqData)

bsseqData包含了一个脚本,本月/脚本/创建\ _BS.cancer.R描述了这个数据是如何创建的人鱼对齐输出(也包含在包)。注意,当前版本的BSmooth管道使用对齐输出格式略有不同。

以下对象包含不光滑的“原始”总结对齐数据。

数据(BS.cancer.ex) BS.cancer。< -交货updateObject BS.cancer.ex (BS.cancer.ex)
# #一个“BSseq”类型的对象与# # # # # # 6样本958541个甲基化位点没有平滑# #内存中的所有化验
pData (BS.cancer.ex)
# #与# # 6行和2列类型DataFrame对# # <人物> <人物> # # C1癌症pair1 # # C2 pair2癌症pair3 # # # # C3 N1正常pair1 # # N2正常正常pair3 pair2 # # N3

如果你使用这个包,请引用我们BSmooth纸(伊瑞Langmead汉森,2012)

2平滑

分析的第一步是平滑数据

BS.cancer.ex。符合< - BSmooth (BSseq = BS.cancer。前,BPPARAM = MulticoreParam(工人= 1),详细= TRUE)

这个特定的代码没有被运行时创建装饰图案。需要大约2分钟示例。如果你有6芯可用,使用mc.cores = 6和总运行时间将大约2分钟。注意,设置mc.cores值大于1不支持Windows女士由于操作系统的限制。

为了便于使用,bsseqData包括该命令的结果:

数据(BS.cancer.ex.fit) BS.cancer.ex。符合< - updateObject BS.cancer.ex.fit (BS.cancer.ex.fit)
# #一个“BSseq”类型的对象与# # # # # # 6样本958541个甲基化位点与# # BSmooth平滑(ns = 70 h = 1000, maxGap = 100000000) # #内存中的所有化验

这个步骤使用并行化,每个示例使用运行在一个单独的核心mclapply ()平行包中。这种形式的并行化是内置的bsseq,(写)需要访问机器6芯和足够的RAM。平滑的步骤是完全独立地完成每个样本,如果你有很多样品(或其他情况),另一种方法是将手工计算。后面的小节展示了这样一些示例代码。

让我们讨论覆盖率和代表性。的BS.cancer.ex对象包含所有注释论文认定人类21号染色体和22日是否有实际的数据。因为我们有多个样品,我们可以大致将基因组分为3类:论文认定所有样本数据,论文认定,所有样品都有一些数据和论文认定,但并不是所有的样本数据。检查对象,我们得到的

# #两条染色体上的平均覆盖率论文认定轮(colMeans (getCoverage (BS.cancer.ex)), 1)
# # C1 C2 C3 N1 N2 N3 # # 3.5 4.2 3.7 4.0 4.3 - 3.9
# #两条染色体长度的论文认定(BS.cancer.ex)
# # 958541年[1]
# #的论文认定至少1涉及的内容读入所有6样品总和(rowSums (getCoverage (BS.cancer.ex) > = 1) = = 6)
# # 572628年[1]
# # 0覆盖所有样本的论文认定总和(rowSums (getCoverage (BS.cancer.ex)) = = 0)
# # 136019年[1]

CpG覆盖率约4倍,因此我们希望许多零覆盖论文认定。虽然这应该不是发生在同一CpG所有6个样品。如果我们假设覆盖全基因组泊松分布的参数(λ)4,我们所期望的

logp < - ppois(0,λ= 4,低。尾= FALSE,日志。p = TRUE)轮(1 - exp (6 * logp), 3)
# # 0.105 [1]

的论文认定与零报道至少有一个样本。

大约有130 k论文认定没有数据的6个样品。这可能发生,因为机会(虽然不太可能)或因为CpG unmappable。因为我们是亚硫酸氢处理转换读取,unmappable部分大于正常dna测序的基因组。这个实验我们只用50个基点单头读取(在我们的经验中使用100个基点paired-end读大大增加可映射比例的基因组)。这些论文认定(零覆盖在所有样本)在某种意义上是容易处理:一个当然应该注意对论文认定没有数据得出结论。

我们有大约959 - 573 - 136 = 250美元论文认定一些(但不是所有)的样品没有保险,这些都是在某种意义上更难处理。因为我们有非常低的报道,可能只是偶然一个样品没有覆盖,它可能过于严格的排除这些论文认定的分析。

平滑为每个样本单独完成,只使用覆盖率的数据(样本)是非零的。这估计全基因组甲基化剖面,然后评估在所有论文认定BSseq对象。因此,平滑后,每个对象CpG甲基化估计有价值。这是非常好的情况下你想比较单一CpG跨多个样品,但样品的一个或两个零覆盖偶然。但是注意这些平滑甲基化概要文件少意义的部分基因组中没有涉及论文认定附近。我们解决这个问题通过移除这些论文认定平滑后,见下文。

其他的参数BSmooth ()函数mc.cores,mc.preschedule,parallelBy控制功能以及内置的并行ns,h,maxGap控制平滑。ns论文认定的最低数量是包含在每个窗口中,h是最小的窗口的一半(实际的窗口宽度是2次h或宽到足以包含ns覆盖论文认定,哪个更大)。注意,窗口宽度是不同的在每一个在基因组中的位置,也可能是不同的对于不同的样本在同一位置,因为它取决于有多少附近论文认定的非零覆盖。默认条件下,一个平滑的集群是整个染色体。“集群”我们指一组论文认定这是一起处理。这意味着,即使两个论文认定之间存在着巨大的距离,我们借的力量。通过设置maxGap这是可以预防因为参数描述了最长的距离两个论文认定之前集群分为两个集群。

2.1手动分割平滑计算

一个例子,只显示样本1和2为简便起见,是(本例中没有被运行时创建装饰图案):

# #分裂datag BS1 < - BS.cancer。前[1]保存(BS1、文件=“BS1.rda”) BS2 < - BS.cancer。前[2]保存(BS1、文件=“BS1.rda”) # #做分裂# #在每个节点上执行以下操作# #节点1负载BS1 (“BS1.rda”)。符合< - BSmooth (BS1)保存(BS1.fit)保存(BS1。健康,文件= " BS1.fit.rda ") # #节点1 # #节点2负载BS2 (“BS2.rda”)。符合< - BSmooth保存(BS2 (BS2)。健康,文件=“BS2.fit.rda”) # #节点完成2 # #加入;在新的R会话负载(BS1.fit.rda)负载(“BS2.fit.rda”) BS。符合< - (BS1结合起来。健康,BS2.fit)

这仍然需要你有一个节点有足够的内存来保存所有样品在内存中。

3计算t统计量

之前计算t统计量,我们将删除与很少或没有覆盖论文认定。如果不这么做,你会发现许多dmr的基因组领域很少报道,这是最有可能的假阳性。它是开放个人喜好哪些论文认定移除,但对这一分析,我们将只保留论文认定,至少2癌症样本和正常样本至少2至少2 x的报道。为了可读性,我们将覆盖存储在一个单独的矩阵(这是由于打印输出换行符)。

BS。x < - getCoverage keepLoci (BS.cancer.ex.fit)。<——交货(rowSums (BS。浸(BS.cancer。前$ Type = = "癌症"]> = 2)> = 2 & rowSums (BS。浸(BS.cancer。前女友$ Type = =“正常”]> = 2)> = 2)长度(keepLoci.ex)
# # 597371年[1]
BS.cancer.ex。符合< - BS.cancer.ex.fit (keepLoci.ex,)

(keepLoci.ex也可以直接检查吗bsseqData包中。)

现在我们已经准备好计算t统计量,

BS.cancer.ex.tstat<- BSmooth.tstat(BS.cancer.ex.fit, group1 = c("C1", "C2", "C3"), group2 = c("N1", "N2", "N3"), estimate.var = "group2", local.correct = TRUE, verbose = TRUE)
# # (BSmooth。tstat)预处理……在0.6秒(BSmooth # #。tstat]计算统计群体内部……在0.2秒(BSmooth # #。tstat]计算数据跨组…在1.5秒完成
BS.cancer.ex.tstat
# #一个“BSseqTstat”类型的对象与基于平滑的# # # # 597371个甲基化位点数据:# # BSmooth (ns = 70 h = 1000, maxGap = 100000000) # # # # BSmooth与参数。tstat(本地。正确的= TRUE, maxGap = 100000000)

(BS.cancer.ex.tstat也可以直接检查吗bsseqData包中。)

的参数BSmooth.tstat ()很简单。group1group2包含的两组样品名称(它总是group1——group2)相比,和指数可以用来代替样品名称。estimate.var描述了样本被用来估计可变性。因为这是一个癌症数据集,比法线和癌症有更高的可变性,我们只使用正常样本估计可变性。其他的选择estimate.var相同(每组假设相同的可变性)配对(做一个配对t检验)。这个论点local.correct描述了我们是否应该使用大规模(低频)意味着校正。这在癌症尤其重要,我们发现许多大型癌症和法线之间的甲基化差异。

我们可以看看边际t统计量的分布

情节(BS.cancer.ex.tstat)

hypomethylation是清晰可见的“块”的边际分布的t统计量。

即使在比较,我们不遵守这些大规模的甲基化差异,它通常会提高边际局部t统计量的分布改正(“改善”使他们更对称的感觉)。

4发现dmr

一旦t统计量计算,我们可以计算差异甲基化区域(dmr)阈值t。在这里,我们使用的截止\ \ (4.6)所选,通过观察t统计量的分位数(整个基因组)。

dmrs0 < - dmrFinder (BS.cancer.ex。tstat截止= c (-4.6, 4.6))
# #创建dmr data.frame [dmrFinder]
dmr < -子集(dmrs0 n > = 3 & abs (meanDiff) > = 0.1) nrow (dmr)
# # 373年[1]
头(dmr, n = 3)
# #杆开始结束idxStart idxEnd集群n宽度invdensity # # 14 chr21 4301 236 57140 57375 15140 28219673 28215373 18.22458 # # 21 chr21 2789 220 79950 80169 20172 32932526 32929738 12.67727 # # 26 chr21 2769 225 92256 92480 21568 34444680 34441912 12.30667 # # areaStat maxStat meanDiff group1。意味着group2。意味着tstat。sd方向# # 14 2623.165 13.50173 0.3423310 0.3870996 0.04476853 0.04503204超# # 21 2326.016 12.16182 0.3616328 0.4174597 0.05582693 0.04492697超# # 26 2156.520 12.39799 0.3093227 0.3406376 0.03131488 0.04604162超级

这里,我们过滤掉DMR不有至少3论文认定和至少一个平均差之间的甲基化(在DMR)至少0.1的正常和癌症。虽然这两个过滤器的确切值可以争论,它无疑是一个好主意使用这样的东西。

其他的参数dmrFinder ()qcutoff选择一个quantile-based截止(例如qcutoff = c (0.01, 0.99)),maxGap这确保DMR正在分裂如果有两个以上的论文认定maxGap它们之间(默认300个基点)。

我们排名dmr的列areaStat这是在每个CpG t统计量的总和。这是种DMR的面积,除了它是加权论文认定的数量,而不是由基因长度。这是目前最好的统计我们知道,尽管它远非完美(我们想做得更好)。

5策划

它是总是一个好主意看dmr。编码标准绘图参数的一种方式上校,lty,lwd将列添加到吗pData,就像

pData < - pData (BS.cancer.ex.fit) pData坳< -美元代表(c(“红”、“蓝色”),每个= 3)pData (BS.cancer.ex.fit) < - pData

这是设置后,我们可以画出一个DMR的样子

plotRegion (BS.cancer.ex。健康,dmr[1],延长= 5000,addRegions = dmr)

扩展告诉我们有多少英国石油公司扩展到绘图区域的两侧。addRegions是一个data.frame农庄清单其他地区应该突出显示。

通常,我们把数以百计的dmr在一个PDF文件,使用外部工具来看看他们。为了这个目的,plotManyRegions ()是非常有用的,因为它要快得多策划个人dmrplotRegion ()。(不运行)是一个例子

pdf文件(= " dmrs_top200。pdf”,宽度= 10,身高= 5)plotManyRegions (BS.cancer.ex。健康,dmr[1∶],延长= 5000,addRegions = dmr) dev.off ()

这情节top200。

6问题和答案

BSmooth算法应该给光滑的甲基化的估计。然而,当我画出平滑值,我看到锯齿状的线,这对我看起来并不顺利。

我们估计一个全基因组甲基化配置文件是一个光滑函数的基因组的位置。然而,并不是存储在这个概要文件BSseq对象。相反,我们评估这个光滑轮廓的甲基化位点的对象。一个例子(的值)

pos冰毒1 205 0.1 203 0.1 200 0.1 0.6 0.6 0.6

策划我们做这个点之间的线性插值。最终的结果是,甲基化配置文件可能会出现锯齿状特别是如果有一个“大”之间的距离两个论文认定(pos之间5200年如上图所示)。如果我们想情节真的光滑的资料我们会甲基化概要文件存储在例行评估网格在整个基因组。这占用了大量的空间并将增加并发症的内部数据结构。

7sessionInfo ()

# # R版本3.6.1(2019-07-05)# #平台:x86_64-pc-linux-gnu(64位)# #下运行:Ubuntu 18.04.3 LTS # # # #矩阵产品:默认# #布拉斯特区:/home/biocbuild/bbs - 3.10 - bioc / R / lib / libRblas。所以# # LAPACK: /home/biocbuild/bbs - 3.10 - bioc / R / lib / libRlapack。# # # #语言环境:# # [1]LC_CTYPE = en_US。utf - 8 LC_NUMERIC = C # #[3]而= 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 = C LC_TELEPHONE = # # [11] LC_MEASUREMENT = en_US。utf - 8 LC_IDENTIFICATION = C附加基本包:# # # # # # [1]stats4并行数据图形grDevices跑龙套数据集# #[8]方法基础# # # #其他附加包:# # [1]bsseqData_0.23.0 bsseq_1.22.0 # # [3] SummarizedExperiment_1.16.0 DelayedArray_0.12.0 # # [5] BiocParallel_1.20.0 matrixStats_0.55.0 # # [7] Biobase_2.46.0 GenomicRanges_1.38.0 # # [9] GenomeInfoDb_1.22.0 IRanges_2.20.0 # # [11] S4Vectors_0.24.0 BiocGenerics_0.32.0 # # [13] BiocStyle_2.14.0 # # # #通过加载一个名称空间(而不是附加):# # [1]gtools_3.8.1 locfit_1.5 - 9.1 # # [3] xfun_0.10 beachmat_2.2.0 # # [5] HDF5Array_1.14.0 lattice_0.20-38 # # [7] rhdf5_2.30.0 colorspace_1.4-1 # # [9] htmltools_0.4.0 rtracklayer_1.46.0 # # [11] yaml_2.2.0 xml_3.98 - 1.20 # # [13] rlang_0.4.1 R.oo_1.22.0 # # [15] R.utils_2.9.0 GenomeInfoDbData_1.2.2 # # [17] stringr_1.4.0 zlibbioc_1.32.0 # # [19] Biostrings_2.54.0 munsell_0.5.0 # # [21] R.methodsS3_1.7.1 evaluate_0.14 # # [23] knitr_1.25 permute_0.9-5 # # [25] Rcpp_1.0.2 scales_1.0.0 # # [27] BSgenome_1.54.0 BiocManager_1.30.9 # # [29] limma_3.42.0 XVector_0.26.0 # # [31] Rsamtools_2.2.0 digest_0.6.22 # # [33] stringi_1.4.3 bookdown_0.14 # # [35] grid_3.6.1 tools_3.6.1 # # [37] bitops_1.0-6 magrittr_1.5 # # [39] rcurl_1.95 - 4.12 Matrix_1.2-17 # # [41] data.table_1.12.6 DelayedMatrixStats_1.8.0 # # [43] rmarkdown_1.16 Rhdf5lib_1.8.0 # # [45] GenomicAlignments_1.22.0 compiler_3.6.1

8引用

汉森,Kasper D,本杰明Langmead,伊瑞和拉斐尔。2012。“亚硫酸氢BSmooth:从全基因组测序读差异甲基化区域。”基因组生物学13 (10):R83。https://doi.org/10.1186/gb - 2012 - 13 - 10 - r83

汉森,Kasper D,温斯顿Timp,赫克托耳Corrada布拉沃,萨文Sabunciyan,本杰明Langmead,奥利弗·g·麦克唐纳,波文,等。2011。“广义跨癌症表观遗传的稳定域的损失。”自然遗传学43 (8):768 - 75。https://doi.org/10.1038/ng.865