内容

1介绍

SummarizedBenchmark,一个完整的基准测试工作流由三个主要组件:

  1. 数据,
  2. 方法,
  3. 性能指标。

前两个(数据方法)为执行基准实验是必要的,和最后一个(性能指标)对评估实验的结果至关重要。这种方法后,SummarizedBenchmark包定义了两个主要类型的对象:BenchDesign对象和SummarizedBenchmark对象。BenchDesign对象只包含基准的设计实验,即数据方法,一个方法被定义为一个函数的组合或算法和参数设置。在构建一个BenchDesign,实验是创建一个执行的SummarizedBenchmark包含的结果应用到数据的方法。SummarizedBenchmark对象扩展BioconductorSummarizedExperiment类,有额外的处理能力性能指标

的基本框架如下图所示。一个BenchDesign创建与方法并结合数据创建一个SummarizedBenchmark应用方法,它包含的输出数据。这个输出然后搭配性能指标由用户指定。注意,相同的BenchDesign可以结合一些数据集生产几个SummarizedBenchmark对象与相应的输出。为了方便,一些违约性能指标在包中实现,可以添加到吗SummarizedBenchmark使用简单的命令对象。

基本的基准测试类的关系

基本的基准测试类的关系

在这个描述中,我们首先说明的基本使用BenchDesignSummarizedBenchmark类的一个简单的比较方法的上下文中假定值修正多重假设检验。更高级的功能在其他几个案例研究演示了包的小插曲。熟悉基本的SummarizedBenchmark本文中描述框架,我们建议阅读SummarizedBenchmark:类的细节装饰图案的结构BenchDesignSummarizedBenchmark类和细节的问题再现性使用这些类。然后,我们建议进行更详细的SummarizedBenchmark:完整的案例研究装饰图案,我们描述的更高级的功能包和案例研究为微分表达式分析比较三种方法。

2快速入门案例研究

说明的基本使用BenchDesign类,我们使用tdat数据集包含在这个包中。

数据集是一个data.frame包含了两个示例50 t的结果。执行的测试是使用独立模拟集20观察来自一个标准正态分布(当H = 0(当)或两个mean-shifted正常分布H = 1)。

# # 1 # # H test_statistic effect_size pval SE 1 -3.2083437 -1.17151466 4.872282 e 03 0.3651463 # # 2 0 0.1692236 0.07321912 8.675080 e-01 0.4326768 # # 3 1 -5.7077940 -1.81715381 2.061521 e-05 0.3183636 # # 4 1 -1.9805856 -1.09107836 6.313031 e-02 0.5508867 # # 5 1 -1.0014358 -0.37726058 3.298895 e-01 0.3767197 # # 6 1 -0.9190433 -0.47583669 3.702252 0.5177522 e-01

提出了几种方法和实现计算假定值调整q值与控制错误的总数的目标发现在测试的集合。在这个例子中,我们比较三个这样的方法:

  1. Bonferroni调整(p.adjustw /方法= " bonferroni ")邓恩(1961),
  2. Benjamini-Hochberg (p.adjustw /方法=“黑洞”)业务(Benjamini和1995),
  3. 层的罗斯福核反应能量(qvalue: qvalue)(2002楼)

首先,考虑基准测试的三种方法看起来没有SummarizedBenchmark框架。

比较方法,每一个应用tdat,结果存储在独立的变量。

因为利益的价值可从每种方法的输出向量的长度50(假设检验)的数量,为了保持干净,它们可以组合成一个单一的data.frame

# # adj_bonf adj_bh adj_qv # # 1 # # 2 1.00000000 0.90365415 0.3290660527 0.24361409 0.02191765 0.0079813228 0.00103076 - 0.00103076 # # 3 # # # 5 # 4 1.00000000 0.12140444 0.0442094809 0.0003753518 1.00000000 0.47127065 0.1716134119 1.00000000 0.48250104 0.1757029652 # # 6

data.frame调整假定值和q值可以用来比较的方法,通过直接解析表或使用一个框架iCOBRA。此外,data.frame可以保存为RDSRdata对象备查,不再需要原始数据的验算。

虽然这种方法适用于比较小,它可以迅速成为压倒性的和unweildy方法和参数数量的增加。此外,一旦每个方法和最终应用data.frame(邻接的),没有办法确定如何每个值计算。而提供信息的姓名可以用来“标签”每个方法(如上图)完成的,这并不捕获完整的复杂性,如参数和上下文,功能评估。一个解决方案可能包括手动记录在一个单独的函数调用和参数data.frame希望保持同步的输出data.frame。然而,这是容易出错,如快速“复制和粘贴”行动期间或添加和删除的参数组合。另一个(希望更好)的解决方案,是使用的框架SummarizedBenchmark包中。

SummarizedBenchmark方法,BenchDesign是由数据和任意数量的方法。可选的BenchDesign也可以建造没有任何输入数据或方法。可以添加或删除方法和数据从对象到模块化在几个不同的方式,将在以下部分中描述。为简单起见,我们先展示如何构建BenchDesign只有数据集作为输入。数据对象tdat必须显式地传递到data =参数。

然后,可以添加到感兴趣的每个方法BenchDesign使用调用addMethod ()

至少,调用addMethod ()需要三个参数:

  1. 双相障碍:BenchDesign对象来修改,
  2. 标签方法:一个人物的名字,和
  3. 函数:要调用的函数。

指定的最低参数后,所需的任何参数函数方法应该作为命名的参数传递,例如。p = pval、方法= " bonferroni ",params =作为一个列表quosures使用、动荡频仍的rlang:: (. .)。注意在这里pval包裹在、动荡频仍的rlang:: (. .)需要指定为tdat pval美元的函数来访问data.frame中的列。为读者熟悉ggplot2包,使用、动荡频仍的params = rlang:: (. .)这里应该被类似于使用aes = aes (. .)ggplot2数据之间的映射和绘制(或基准)参数。

添加方法可以写的更简洁的过程使用的管道运营商magrittr包中。

一些方法,比如上面的核反应能量的方法,可能需要调用“后处理”功能在主方法中提取所需的输出(在这里,q值)。这应该是指定使用可选的帖子=参数。

现在,BenchDesign对象包含三种方法。这可以通过调用验证对象。

b
# # BenchDesign - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # #基准数据:# #类型:数据# #名称:H, test_statistic, effect_size, pval, SE # #基准方法:# #方法:bonf;func: p。邻接的ust ## method: BH; func: p.adjust ## method: qv; func: qvalue::qvalue

更多细节可以看到每个方法使用printMethods ()函数。

# # bonf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # BenchDesign方法(BDMethod) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # #方法:p。# #调整功能(p = p.adjust方法。方法,n =长度(p)……# #参数:# # p: pval # #方法:“bonferroni”# #: # # # #元:没有一个# # # #没有BH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # BenchDesign方法(BDMethod) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # #方法:p。# #调整功能(p = p.adjust方法。方法,n =长度(p)……# #参数:# # p: pval # #方法:“黑洞”# #:# # # #元:没有一个# # # #没有qv - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # BenchDesign方法(BDMethod) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # #方法:qvalue: qvalue # #函数(p,罗斯福。水平= NULL, pfdr = FALSE, lfdr.out……p: pval # #参数:# # # #:# #默认值:函数(x) {…# # # #元:没有

在长椅上现在包括所有必要的信息来执行基准测试研究,实际调整假定值和q值尚未计算。要做到这一点,我们只是电话buildBench ()。而buildBench ()不需要任何输入其他比吗BenchDesign对象,当对应的地面真值是已知的,truthCols =应指定参数。在这个例子中,H列的tdatdata.frame包含真正的null或替代每个模拟假设检验的状态。注意,如果任何方法定义在一个单独的包,他们必须安装和加载之前运行实验。

返回的对象是一个SummarizedBenchmark类。的SummarizedBenchmark对象的一个扩展SummarizedExperiment对象。调整假定值的表和q值包含在一个“试验”的对象添加了每个方法使用调用addMethod ()作为一个与相应的列标签正如它的名字。

# # bonf BH qv # #(1) 0.24361409 0.02191765 0.0079813228 # #(2) 1.00000000 0.90365415 0.3290660527 # #(3) 0.00103076 0.00103076 0.0003753518 # #(4) 1.00000000 0.12140444 0.0442094809 # #(5) 1.00000000 0.47127065 0.1716134119 # #(6日)1.00000000 0.48250104 0.1757029652

元数据中包含的方法colData ()相同的对象,每一行对应一个方法的比较。

# # DataFrame 3行6列# # func。pkg func.pkg。更func.pkg。手动参数。p参数。方法##      ## bonf stats 4.2.0 FALSE pval "bonferroni" ## BH stats 4.2.0 FALSE pval "BH" ## qv qvalue 2.28.0 FALSE pval NA ## session.idx ##  ## bonf 1 ## BH 1 ## qv 1

除了列指定的功能和参数调用addMethod ()(函数、post、标签,param。*),colData ()包括其他一些列在补充道buildBench ()的过程。最值得注意的是,列的包名和版本函数如果可用(func.pkg,func.pkg.vers)。

当可用时,地面真理中包含的数据rowData ()SummarizedBenchmark对象。

# # DataFrame H 1 50行和列# # # # <数字> # 1 # 1 # 1 # 2 0 # # 3 # # 4 1 5 # # 1 # #……# # 46 0 47 # # 1 # # 48 50 0 49 # # 1 # # 1

此外,SummarizedBenchmark类包含一个额外的插槽,用户可以定义性能指标来评估不同的方法。因为不同基准实验可能需要使用不同的指标评价方法的性能SummarizedBenchmark类提供了一个灵活的方式来定义性能指标。我们可以使用这个函数定义性能指标addPerformanceMetric ()通过提供一个SummarizedBenchmark度规的对象,一个名字,一个试验名称,定义它的函数。重要的是,该函数必须包含以下两个参数:查询(指一个向量的值被评估,即一个方法)的输出和真理(指地面真理的向量)。如果进一步提供参数性能函数,这些必须包含默认值。

在我们的例子中,我们定义了性能指标“TPR”(真阳性)的分数计算真正的积极恢复给定一个alpha值。这个性能指标使用H我们的分析SummarizedBenchmark实例对象。

# # $ TPR # #函数(查询、真理、α= 0.1){# # goodHits < - sum((查询<α)& = = 1)# # goodHits /真理和真理(= = 1)# #}

在定义所有所需的性能指标,功能estimatePerformanceMetrics ()为每个方法计算这些。参数的性能函数可以在这里传递。在下面的案例中,我们指定了α=值用于计算每个函数的性能指标。

# # DataFrame 3行9列# # func。pkg func.pkg。更func.pkg。手动参数。p参数。方法##      ## bonf stats 4.2.0 FALSE pval "bonferroni" ## BH stats 4.2.0 FALSE pval "BH" ## qv qvalue 2.28.0 FALSE pval NA ## session.idx TPR.1 TPR.2 TPR.3 ##     ## bonf 1 0.125 0.20 0.225 ## BH 1 0.375 0.55 0.625 ## qv 1 0.600 0.70 0.900

默认情况下,该函数返回一个以上DataFrame,性能函数的参数存储在它elementMetadata ()

# # DataFrame 9行4列# # colType化验performanceMetricα# # <人物> <人物> <人物> <数字> # # func。pkg methodInformation NA NA NA # # func.pkg。更methodInformation NA NA NA # # func.pkg。手动methodInformation NA NA NA # #参数。p methodInformation NA NA NA # #参数。方法方法Information NA NA NA ## session.idx methodInformation NA NA NA ## TPR.1 performanceMetric H TPR 0.05 ## TPR.2 performanceMetric H TPR 0.10 ## TPR.3 performanceMetric H TPR 0.20

第二种可能性是设置参数addColData = TRUE存储在这些结果colData ()SummarizedBenchmark对象。

10 # # DataFrame 3行和列# # func。pkg func.pkg。更func.pkg。手动参数。p参数。方法##      ## bonf stats 4.2.0 FALSE pval "bonferroni" ## BH stats 4.2.0 FALSE pval "BH" ## qv qvalue 2.28.0 FALSE pval NA ## session.idx TPR.1 TPR.2 TPR.3 pm.session ##      ## bonf 1 0.125 0.20 0.225 1 ## BH 1 0.375 0.55 0.625 1 ## qv 1 0.600 0.70 0.900 1
# # DataFrame 10行4列# # colType化验performanceMetricα# # <人物> <人物> <人物> <数字> # # func。pkg methodInformation NA NA NA # # func.pkg。更methodInformation NA NA NA # # func.pkg。手动methodInformation NA NA NA # #参数。p methodInformation NA NA NA # #参数。方法方法Information NA NA NA ## session.idx methodInformation NA NA NA ## TPR.1 performanceMetric H TPR 0.05 ## TPR.2 performanceMetric H TPR 0.10 ## TPR.3 performanceMetric H TPR 0.20 ## pm.session performanceMetricSes.. NA NA NA

最后,如果用户喜欢整齐的格式,通过设置参数整洁= TRUE函数返回一个long-formated版本的结果。

# # func。pkg func.pkg。更func.pkg。手动参数。p参数。方法session.idx ## 1 stats 4.2.0 FALSE pval "bonferroni" 1 ## 2 stats 4.2.0 FALSE pval "BH" 1 ## 3 qvalue 2.28.0 FALSE pval  1 ## 4 stats 4.2.0 FALSE pval "bonferroni" 1 ## 5 stats 4.2.0 FALSE pval "BH" 1 ## 6 qvalue 2.28.0 FALSE pval  1 ## 7 stats 4.2.0 FALSE pval "bonferroni" 1 ## 8 stats 4.2.0 FALSE pval "BH" 1 ## 9 qvalue 2.28.0 FALSE pval  1 ## pm.session label value assay performanceMetric alpha ## 1 1 bonf 0.125 H TPR 0.05 ## 2 1 BH 0.375 H TPR 0.05 ## 3 1 qv 0.600 H TPR 0.05 ## 4 1 bonf 0.200 H TPR 0.10 ## 5 1 BH 0.550 H TPR 0.10 ## 6 1 qv 0.700 H TPR 0.10 ## 7 1 bonf 0.225 H TPR 0.20 ## 8 1 BH 0.625 H TPR 0.20 ## 9 1 qv 0.900 H TPR 0.20

作为一种替代方法来达到同样的data.frame与前面的块,我们可以调用该函数tidyUpMetrics ()保存结果SummarizedBenchmark对象。

# # func。pkg func.pkg。更func.pkg。手动参数。p参数。方法session.idx ## 1 stats 4.2.0 FALSE pval "bonferroni" 1 ## 2 stats 4.2.0 FALSE pval "BH" 1 ## 3 qvalue 2.28.0 FALSE pval  1 ## 4 stats 4.2.0 FALSE pval "bonferroni" 1 ## 5 stats 4.2.0 FALSE pval "BH" 1 ## 6 qvalue 2.28.0 FALSE pval  1 ## pm.session label value assay performanceMetric alpha ## 1 1 bonf 0.125 H TPR 0.05 ## 2 1 BH 0.375 H TPR 0.05 ## 3 1 qv 0.600 H TPR 0.05 ## 4 1 bonf 0.200 H TPR 0.10 ## 5 1 BH 0.550 H TPR 0.10 ## 6 1 qv 0.700 H TPR 0.10

例如,下面的代码提取TPR 0.1的alpha Bonferroni方法。

# # 1 # #值0.2

3下一个步骤

这个描述的最小结构描述SummarizedBenchmark框架的使用BenchDesignSummarizedBenchmark类。这应该是足够的对于构建和执行简单的基准,但可能还不够对于更复杂的基准测试实验。使用一个更详细的例子SummarizedBenchmark中提供了SummarizedBenchmark:完整的案例研究可以找到各种装饰图案和额外的特性功能小插曲。一个更完整的描述BenchDesignSummarizedBenchmark类中可以找到SummarizedBenchmark:类的细节装饰图案。

引用

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

邓恩,橄榄琼。1961。“多种方法之间的比较。”美国统计协会杂志》上56 (293):52 - 64。

层,约翰。d . 2002。“直接错误发现率的方法。”英国皇家统计学会杂志》:系列B(统计方法)64 (3):479 - 98。