1介绍

我们的各个步骤指导您完成BEclear包在自己的章节。他们将遵循的逻辑顺序纠正一些批处理影响DNA甲基化数据的一个例子。这篇文章应该只给一个小教程,更详细的个人方法总是可以帮助部分中找到BEclear包,如通过打字calcBatchEffectsR环境包中加载。处理方法中包含BEclear包,一个矩阵或与基因data.frame row-names和样本列名以及样品与第一列data.frame命名“sample_id”和第二列命名“batch_id”作为输入。

2安装

BEclear在Bioconductor可用。因此可以使用安装它BiocManager:

如果(!requireNamespace (“BiocManager”,悄悄地= TRUE)) {install.packages (BiocManager)} BiocManager::安装(“BEclear”)

不然你也可以安装BEclear从Github库通过以下命令:

如果(!requireNamespace (“devtools”,悄悄地= TRUE)) {install.packages (devtools)} devtools:: install_github (“uds-helms / BEclear”)

我们通过Bioconductor然而推荐安装它,因为这负责安装的依赖关系而且可以参考Bioconductor的释放,当使用我们的方案,使您能够繁殖的具体条件。

代码的编译期间,许多地区的软件将自动检测正确的执行和预期结果的再生产。这是实现形式的单元测试的帮助下testthat包中。

当完成安装只需加载包通过键入:

库(BEclear) # >加载所需的包:BiocParallel

3数据

β值存储在ex.data矩阵得到从三级BRCA TCGA的数据门户(癌症基因组图谱研究网络等。2013年)。一般来说,β值计算甲基化信号的总和除以从DNA甲基化microrarray unmethylated和甲基化信号。TCGA的三级数据,这个计算已经完成。这里使用的示例数据包含平均β值的探测属于单个基因的启动子区域。另一种可能性是使用单探针β值,即探测器名称应该用来代替基因名字的rownames矩阵。

你可以通过下面的命令:样本数据加载

数据(“BEclearData”)

它包含一个矩阵与β值:

knitr: kable(交货。数据(1:10,1:5),标题= '一些条目从例子省际层面的)

表1: 一些条目省际层面的例子
s20 s21 s22 s23 s24
ACSM3 0.2297873 0.2162873 0.2071987 0.2329269 0.2120593
ADAM28 0.3435064 0.4579607 0.3749625 0.4205235 0.3933762
ADCK1 0.2176142 0.2120385 0.2130803 0.2171312 0.2143814
AFTPH 0.0314942 0.0306752 0.0303586 0.0293008 0.0236312
AKAP7 0.1265222 0.0898430 0.1638099 0.1087261 0.1150119
ANKRD24 0.0516417 0.0427307 0.0371261 0.0434301 0.0430231
ANKRD44 0.3431776 0.3256014 0.2781775 0.3132249 0.2984070
ANKS4B 0.5712550 0.5467739 0.5209191 0.6075328 0.5419098
APCDD1 0.4861491 0.4201033 0.4405887 0.5275998 0.4438821
APOBEC3G 0.3636649 0.3301716 0.3749334 0.3509543 0.4406087

和一个data.frame包含批次样品的分配:

knitr: kable(交货。样本[1:10],标题=一些条目示例样本注释)

表2: 一些条目示例注释的例子
sample_id batch_id
s20 b109
s21 b109
s22 b109
s23 b109
s24 b117
s25 b117
s26 b117
s27 b117
s28 b117
s29 b117

4检测批处理效果

批处理效果的检测计算的β值之间的平均差异基因在一个批处理和这个基因在其他批次的值。而且我们使用非参数Kolmogorov-Smirnov测试(ks.test)来比较这种基因的β值的分布在批处理和其它批次。

如果一个基因在一批假定值决定的ks.test少或等于0.01和平均差大于或等于0.05被认为是批处理的影响。

4.1检测

批处理计算的影响使用calcBatchEffects函数。计算值差异和假定值。默认情况下我们纠正错误发现率由假定值Benjamini和业务(1995年),但你可以使用覆盖所有的调整方法p.adjust.methods

batchEffect < - calcBatchEffects (data = ex.data = ex.samples样品,调整= TRUE,方法=“罗斯福”)# >信息(2023-04-25 16:16:56)转换矩阵的数据。表# >信息(2023-04-25 16:16:56)计算10批次的批处理影响# >信息[2023-04-25 16:16:57]调整假定值mdifs < - batchEffect医疗pvals < - batchEffect pval美元

4.2总结

看到哪些基因影响您使用的批次calcSummary函数如下:

摘要< - calcSummary(中位数= mdifs pvalues = pvals) # >信息[2023-04-25 16:16:58]生成汇总表knitr:: kable(头(总结),标题=对批处理的总结影响gene-sample示例数据集的组合)

表3: 总结在批处理影响gene-sample示例数据集的组合
基因 batch_id 中位数 pvalue
ADAM28 b136 0.2539018 0.0003223
AKAP7 b136 0.2236255 0.0000298
ANKRD44 b136 0.2578482 0.0024103
APCDD1 b136 0.2078392 0.0000016
沙土荒漠 b136 0.3659073 0.0001033
BCL2L14 b136 0.2356189 0.0058860

4.3得分

此外你可以计算整个一批一批的分数决定影响的严重程度如何。

分数< - calcScore(交货。数据、ex.samples总结,dir = getwd()) # >信息(2023-04-25 16:16:58)计算分数10批次knitr:: kable(得分,标题=“批分数示例的气候资料”)

表4: 批分数省际层面的例子
batch_id count05 count1 是从 count3 count4 count5 count6 count7 count8 count9 BEscore dixonPval
b109 0 0 0 0 0 0 0 0 0 0 0.000 NA
b117 0 0 0 0 0 0 0 0 0 0 0.000 NA
b120 0 0 0 0 0 0 0 0 0 0 0.000 NA
b124 0 0 0 0 0 0 0 0 0 0 0.000 NA
b136 10 2 31日 7 1 0 0 0 0 0 0.752 1 e-07
b142 0 0 0 0 0 0 0 0 0 0 0.000 NA
b155 0 0 0 0 0 0 0 0 0 0 0.000 NA
b72 0 0 0 0 0 0 0 0 0 0 0.000 NA
b185 0 0 0 0 0 0 0 0 0 0 0.000 NA
b61 0 0 0 0 0 0 0 0 0 0 0.000 NA

5归责缺失值

缺失值的归责我们使用稍微描述随机梯度下降方法的修改版本科伦,贝尔和Volinsky (2009年)。在这一节中我们将描述这个方法的实现以及如何使用它。

我们假定我们的完整的数据矩阵\ (D_ {ij} \)可以被描述为一个矩阵的影响\ (L_i \)代表特征的影响(基因在我们的例子中)和一个矩阵\ (R_j \)描述样本的效果在以下方式:

\[开始\{方程}D_ {ij} = L_{我}^ {T} \ * R_ {j}。结束标记{1}\ \{方程}\]

上的方法可以运行完整的数据集或数据集可以分为块的方法。这种分裂成块允许parallelisation的方法,这可以有助于加快这一进程。我们发现一块60 x60行之有效(Akulenko山鸟和头盔2016年)

计算每个块的误差在以下方式:

\[开始\{方程}errorMatrix_ {ij} = Block_ {ij} - L_{我}^ {T} \ * R_ {j}。结束标记{2}\ \{方程}\]

我们尽量减少以下损失函数通过梯度下降法:

\[开始\{方程}min_ {L R} \ sum_{在K ij \} (errorMatrix_ {ij} ^ 2) + \λ\(左\ \ lVert L_{我}\右\ rVert_ {F} ^{2} + \左\ lVert R_ {j} \右\ rVert_ {F} ^ {2})。结束标记{3}\ \{方程}\]在哪里\ (K \)元组的集合吗\ ((i, j) \)存在的价值。\λ(\ \)是惩罚系数,控制限制变量的选择应该如何。默认的\λ(\ \)是1。

另一个系数\γ(\ \)控件的大小两个矩阵的一步\ (L_i \)\ (R_j \)被修改。默认初始化期间与0.01和它的值改变迭代(时代)。

第一次迭代的矩阵\ (L_i \)\ (R_j \)充满了生成的随机值吗rnorm函数的统计数据包和最初的损失和误差矩阵计算。

然后为每个迭代完成如下:

  • \ (L_i \)\ (R_j \)被修改成比例的\γ(\ \)通过以下计算:

    • \[开始\{方程}L_i = L_i + 2 \ \伽马\乘以(errorMatrix_ {ij} \ * R_j - \λ\ * L_i)。(\ #情商:测井方式)\{方程}\]

    • \[开始\{方程}R_j = R_j + 2 \ \伽马\乘以(errorMatrix_ {ij} \ * L_i - \λ\ * R_j)。(\ #情商:Rmod) \{方程}\]

  • 然后计算新的误差矩阵和损失。

  • 如果旧的损失小于新一:

    • \ \(γ= \伽马\ div 2。\)
  • 其他:

    • \ \(γ= 1.05。\ \伽马\倍)

\ (L_i \)\ (R_j \)矩阵迭代结束时最后一个然后使用转嫁丢失的数据。默认的迭代次数为50。

5.1使用

首先你必须设置发现NAs批效应值。为此,您可以使用clearBEgenes功能:

清除。数据< - clearBEgenes(交货。数据、ex.samples总结)# >信息[2023-04-25 16:16:58]删除值和批处理效果:# >信息[2023-04-25 16:16:58]510个值设置为NA(5.1%的数据)

如果你使用BEclear不是为了纠正批处理效果,但只是为了数据归责,你必须设置值你想转嫁给NA,如果他们没有。

归责你使用的数据imputeMissingData功能:

图书馆(ids)纠正。< - imputeMissingData(清除数据。数据,rowBlockSize = 60, colBlockSize = 60,时代= 50,outputFormat = " ", dir = getwd()) # >信息[2023-04-25 16:16:58]开始缺失值的归责。# >信息(2023-04-25 16:16:58)这可能需要一段时间。# >信息[2023-04-25 16:16:58]BEclear归罪启动:# >信息[2023-04-25 16:16:58]块大小:60 x 60 # >信息[2023-04-25 16:16:58]归咎于缺失的数据块1的4 # >信息[2023-04-25 16:16:58]归咎于缺失的数据块2 4 # >信息[2023-04-25 16:16:58]归咎于缺失的数据块3的4 # >信息[2023-04-25 16:16:58]归咎于缺失数据块4的4

如果你设置rowBlockSize和colBlockSize 0矩阵不会分为块和梯度下降法将适用于整个矩阵。

5.2替换值在边界之外

请注意,有时在预测期间,可能会发生返回值边界之外的β值,这意味着值小于或大于1。findWrongValues仅返回这些值的列表,连同位置输出矩阵,replaceOutsideValues纠正这些只需设置错误的值0或1,分别。尤其注意,这些方法用于从DNA甲基化β值的预测数据,只有0和1之间的值。

corrected.data.valid < -replaceOutsideValues (corrected.data) # >信息[2023-04-25 16:16:58]替换值低于0或高于1:# >信息[2023-04-25 16:16:58]0值替换

在这种情况下没有值替换。

6整体调整

除了单个方法BEclear也提供了一个整体的方法,将执行所有的描述在一个叫前面的步骤。它还适用于一些预处理数据集,如果必要的。

结果< - correctBatchEffect (data = ex.data、样品= ex.samples) # >信息(2023-04-25 16:16:58)转换矩阵的数据。表# >信息(2023-04-25 16:16:58)计算10批次的批处理影响# >信息(2023-04-25 16:16:59)调整假定值# >信息汇总表(2023-04-25 16:16:59)生成一个# >信息(2023-04-25 16:16:59)计算分数10批次# >信息[2023-04-25 16:16:59]删除值和批处理效果:# >信息[2023-04-25 16:16:59]510个值(数据)的5.1%将NA # >信息[2023-04-25 16:16:59]开始缺失值的归责。# >信息(2023-04-25 16:16:59)这可能需要一段时间。# >信息[2023-04-25 16:16:59]BEclear归罪启动:# >信息[2023-04-25 16:16:59]块大小:60 x 60 # >信息[2023-04-25 16:16:59]归咎于缺失的数据块1的4 # >信息[2023-04-25 16:16:59]归咎于缺失的数据块2 4 # >信息[2023-04-25 16:16:59]归咎于缺失的数据块3的4 # >信息[2023-04-25 16:16:59]归咎于缺失的数据块4 4 # >信息[2023-04-25 16:16:59]替换值低于0或高于1:# >信息[2023-04-25 16:17:00]0值替换

返回一个列表包含所有结果执行功能。

7并行化

并行化我们使用BiocParellel包中。但是默认情况下所有方法都在串行模式下执行。的方法CalcBatchEffect,imputeMissingDatacorrectBatchEffect支持并行通过参数BPPARAM一个BiocParallel: BiocParallelParam类作为参数。

输入以下概述/支持评估环境:

? BiocParallel:: BiocParallelParam

8策划

另外BEclear还包括一批策划方法的效果。现在让我们使用makeBoxplot比较值的分布在不同的样品前后批效应校正:

makeBoxplot(交货。数据、ex.samples得分,bySamples = TRUE,坳=“标准”,主要=“示例数据”,xlab =“批处理”,ylab =“测试版”价值,scoreCol = TRUE)
β值按样本分组分布的例子

图1:β值按样本分组分布的例子

makeBoxplot(纠正。数据、ex.samples得分,bySamples = TRUE,坳=“标准”,主要=“纠正示例数据”,xlab =“批处理”,ylab =“测试版”价值,scoreCol = FALSE)
分布的修正β值按样本分组

图2:分布的修正β值按样本分组

会话信息

这里的输出sessionInfo ()本文档对系统的编译运行pandoc 2.7.3:

安装R版本4.3.0 RC (2023-04-13 r84269)

平台:x86_64-pc-linux-gnu(64位)

地区:LC_CTYPE = en_US.UTF-8,LC_NUMERIC = C,而= en_GB,LC_COLLATE = C,LC_MONETARY = en_US.UTF-8,LC_MESSAGES = en_US.UTF-8,LC_PAPER = en_US.UTF-8,LC_NAME = C,LC_ADDRESS = C,LC_TELEPHONE = C,LC_MEASUREMENT = en_US.UTF-8LC_IDENTIFICATION = C

附上基本包:统计数据,图形,grDevices,跑龙套,数据集,方法基地

其他附加包:id (v.1.0.1),BEclear (v.2.16.0),BiocParallel (v.1.34.0),老鸨(v.0.6.5)BiocStyle (v.2.28.0)

通过加载一个名称空间(而不是附加):矩阵(v.1.5-4),jsonlite (v.1.8.4),futile.logger (v.1.4.3),编译器(v.4.3.0),BiocManager (v.1.30.20),highr (v.0.10),Rcpp (v.1.0.10),魔法(v.2.7.4),平行(v.4.3.0),jquerylib (v.0.1.4),uuid (v.1.1-0),yaml (v.2.3.7),fastmap (v.1.1.1),晶格(v.0.21-8),R6 (v.2.5.1),knitr (v.1.42),rbibutils (v.2.2.13),bookdown (v.0.33),openssl (v.2.0.6),bslib (v.0.4.2),rlang (v.1.1.0),cachem (v.1.0.7),xfun (v.0.39),sass (v.0.4.5),cli (v.3.6.1),magrittr (v.2.0.3),formatR (v.1.14),Rdpack (v.2.4),futile.options (v.1.0.1),消化(v.0.6.31),网格(v.4.3.0),askpass (v.1.1),dixonTest (v.1.0.4),评估(v.0.20),data.table (v.1.14.8),lambda.r (v.1.2.4),codetools (v.0.2-19),abind (v.1.4-5),rmarkdown (v.2.21),工具(v.4.3.0)htmltools (v.0.5.5)

引用

Ruslan Akulenko,马库斯·乌鸫,Volkhard头盔》2016。“BEclear:批处理效果检测和调整DNA甲基化数据。”《公共科学图书馆•综合》(8):11 - 17。https://doi.org/10.1371/journal.pone.0159921

业务Benjamini Yoav,约瑟夫·》1995。“控制错误发现率:一个实际的和强大的多个测试方法。”英国皇家统计学会杂志》上。系列B(方法论)57 (1):289 - 300。http://www.jstor.org/stable/2346101

癌症基因组图谱研究网络,约翰·N Weinstein, Eric Collisson,戈登•米尔斯,Kenna R米尔斯肖,布拉德Ozenberger,凯尔Ellrott, Ilya Shmulevich,克里斯·桑德,约书亚·M·斯图尔特。2013。“癌症基因组图谱Pan-Cancer分析项目。”自然遗传学45 (10):1113 - 20。https://doi.org/10.1038/ng.2764

萤石Emmanuel J。,和Benjamin Recht. 2009. “Exact Matrix Completion via Convex Optimization.”计算数学基础9 (6):717 - 72。https://doi.org/10.1007/s10208 - 009 - 9045 - 5

科伦,耶胡达罗伯特•贝尔和克里斯Volinsky》2009。“推荐系统的矩阵分解技术。”电脑42 (8):30-37。https://doi.org/10.1109/MC.2009.263