本教程中我们展示如何使用BEclear包(Akulenko山鸟和头盔2016年)检测和正确的甲基化数据批处理效果。尽管BEclear开发使用的甲基化数据,它也可以用来发现和正确的批处理效果在其他类型的数据。中央BEclear基于潜在的因子模型的方法(萤石和雷希特2009年),理论上可以在每一个包含实数矩阵来预测缺失值。
BEclear 2.16.0
我们的各个步骤指导您完成BEclear包在自己的章节。他们将遵循的逻辑顺序纠正一些批处理影响DNA甲基化数据的一个例子。这篇文章应该只给一个小教程,更详细的个人方法总是可以帮助部分中找到BEclear包,如通过打字calcBatchEffects
R环境包中加载。处理方法中包含BEclear包,一个矩阵或与基因data.frame row-names和样本列名以及样品与第一列data.frame命名“sample_id”和第二列命名“batch_id”作为输入。
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
β值存储在ex.data矩阵得到从三级BRCA TCGA的数据门户(癌症基因组图谱研究网络等。2013年)。一般来说,β值计算甲基化信号的总和除以从DNA甲基化microrarray unmethylated和甲基化信号。TCGA的三级数据,这个计算已经完成。这里使用的示例数据包含平均β值的探测属于单个基因的启动子区域。另一种可能性是使用单探针β值,即探测器名称应该用来代替基因名字的rownames矩阵。
你可以通过下面的命令:样本数据加载
数据(“BEclearData”)
它包含一个矩阵与β值:
knitr: kable(交货。数据(1:10,1:5),标题= '一些条目从例子省际层面的)
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],标题=一些条目示例样本注释)
sample_id | batch_id |
---|---|
s20 | b109 |
s21 | b109 |
s22 | b109 |
s23 | b109 |
s24 | b117 |
s25 | b117 |
s26 | b117 |
s27 | b117 |
s28 | b117 |
s29 | b117 |
批处理效果的检测计算的β值之间的平均差异基因在一个批处理和这个基因在其他批次的值。而且我们使用非参数Kolmogorov-Smirnov测试(ks.test
)来比较这种基因的β值的分布在批处理和其它批次。
如果一个基因在一批假定值决定的ks.test
少或等于0.01和平均差大于或等于0.05被认为是批处理的影响。
批处理计算的影响使用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美元
看到哪些基因影响您使用的批次calcSummary
函数如下:
摘要< - calcSummary(中位数= mdifs pvalues = pvals) # >信息[2023-04-25 16:16:58]生成汇总表knitr:: kable(头(总结),标题=对批处理的总结影响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 |
此外你可以计算整个一批一批的分数决定影响的严重程度如何。
分数< - calcScore(交货。数据、ex.samples总结,dir = getwd()) # >信息(2023-04-25 16:16:58)计算分数10批次knitr:: kable(得分,标题=“批分数示例的气候资料”)
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 |
缺失值的归责我们使用稍微描述随机梯度下降方法的修改版本科伦,贝尔和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) \{方程}\]
然后计算新的误差矩阵和损失。
如果旧的损失小于新一:
其他:
的\ (L_i \)和\ (R_j \)矩阵迭代结束时最后一个然后使用转嫁丢失的数据。默认的迭代次数为50。
首先你必须设置发现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矩阵不会分为块和梯度下降法将适用于整个矩阵。
请注意,有时在预测期间,可能会发生返回值边界之外的β值,这意味着值小于或大于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值替换
在这种情况下没有值替换。
除了单个方法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值替换
返回一个列表包含所有结果执行功能。
并行化我们使用BiocParellel包中。但是默认情况下所有方法都在串行模式下执行。的方法CalcBatchEffect
,imputeMissingData
和correctBatchEffect
支持并行通过参数BPPARAM
一个BiocParallel: BiocParallelParam
类作为参数。
输入以下概述/支持评估环境:
? BiocParallel:: BiocParallelParam
另外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-8和LC_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。