Benjamini&Hochberg(1995)和Benjamini&Yekutieli(2001)错误发现率程序之间的实际区别是什么?


34

我的统计程序同时执行了Benjamini&Hochberg(1995)和Benjamini&Yekutieli(2001)的错误发现率(FDR)程序。我已经尽力阅读了以后的文章,但是它在数学上相当密集,并且我不确定我是否理解这些过程之间的区别。从统计程序的基础代码中,我可以看到它们确实有所不同,并且后者包括我所看到的有关FDR的数量q,但还不太了解。

有没有理由更喜欢Benjamini&Hochberg(1995)程序而不是Benjamini&Yekutieli(2001)程序?他们有不同的假设吗?这些方法之间的实际区别是什么?

本杰米尼(Y.)和霍奇伯格(Y.)(1995)。控制错误发现率:一种实用且功能强大的多重测试方法。皇家统计协会杂志系列B,57,289-300。

Benjamini,Y.和Yekutieli,D.(2001)。依赖项下多重测试中错误发现率的控制。统计年鉴29,1165年至1188年。

以下评论中引用了1999年的论文:Yekuteli,D.和&Benjamini,Y.(1999)。基于重采样的错误发现率可控制多个测试过程以实现相关的测试统计信息。统计计划与推断杂志,82(1),171-196。


我认为2001年的论文建立了依赖关系下FDR(1995)的特性。Yekutieli和Benjamini(《统计规划与推断杂志》,1999年)建立了另一种FDR程序。您正在寻找的任何机会吗?
2013年

@julieth:那是我仅阅读摘要时对2001年论文的感觉,但是论文中的公式(例如27-30)确实包含一个称为q的量。再说一遍,您引用的这份1999年论文也是如此。我的感觉是,1999年的论文实现了一种重采样方法,显然(从查看代码来看)不是我的stats程序正在做的事情(R; p.adjust)……但是我可能是错的。
russellpierce

1
在2001年论文的末尾引用了1999年论文,他们说:“最后,回顾一下Yekutieli和Benjamini(1999)的基于重采样的过程,该过程试图解决上述问题,同时利用有关依赖关系的信息“从采样得出的结构。基于重采样的过程更强大,但以更大的复杂度为代价,并且仅进行近似FDR控制。” ...所以我认为2001年的论文提供了一种封闭形式的计算解决方案,而这正是我的stats程序正在执行的。
russellpierce

1
好的,所以您正在使用p.adjust。正如您指出的,99纸完全不同。我总是在p.adjust中看到BY选项,并且没有注意。通常引用2001年的论文来证明FDR和“正回归依赖”。我从来没有看到它引用了一个不同的估计量,但也许它在那里。看来我需要重新阅读它。
2013年

Answers:


21

Benjamini和Hochberg(1995)引入了错误发现率。Benjamini and Yekutieli(2001)证明了这种估计在某些形式的依存关系下是有效的。依赖性可以如下产生。考虑在t检验中使用的连续变量以及与之相关的另一个变量;例如,测试两组的BMI是否不同,以及两组的腰围是否不同。由于这些变量是相关的,因此所得的p值也将相关。Yekutieli和Benjamini(1999)开发了另一种FDR控制程序,该程序可以通过重新采样零分布而在一般依赖性下使用。因为比较是针对零排列分布,所以随着真实正数总数的增加,该方法将变得更加保守。事实证明,随着真实阳性人数的增加,BH 1995也很保守。为了改善这一点,Benjamini和Hochberg(2000)引入了自适应FDR程序。这需要对参数(空比例)进行估算,该参数也用于Storey的pFDR估算器中。斯托里作了比较,认为他的方法更有效,强调了1995年手术的保守性。楼层还具有依赖关系的结果和模拟。

以上所有测试在独立下均有效。问题是这些估计可以应对什么样的独立性。

我目前的想法是,如果您不期望太多真实的肯定,那么BY(1999)程序会很好,因为它结合了分布特征和依赖性。但是,我不知道一个实现。斯托里的方法是为许多具有某些依赖关系的真实肯定而设计的。BH 1995提供了一种替代家庭式错误率的方法,但仍然很保守。

本杰米尼,Y和霍赫伯格。具有独立统计的多重测试中错误发现率的自适应控制。教育与行为统计杂志,2000年。


非常感谢!您能否修改您的问题以澄清以下几点/问题:“重新采样零分布”是1999年的论文吗?请提供2000年论文的引文吗?您似乎对p.adjust很熟悉,它实际上是在执行BY过程吗?假设检验不依赖时,必须使用BH吗?是什么导致假设检验被认为是依赖的?-如果这些问题中有任何一个超出当前范围并需要提出新的问题,请告诉我。
russellpierce

p.adjust同时具有(BH和BY)选项。但是,我认为这些是相同的,所以我错过了一些东西。
julieth 2013年

而且底层代码也不同(我检查过),因此它们将产生不同的数字。
russellpierce

那么,您认为p.adjust与BY参数一起执行是什么过程?我认为这不是1999年的程序。基础代码是pmin(1,cummin(q * n / i * p [o]))[ro]。BH是pmin(1,cummin(n / i * p [o]))[ro]。因此它们的区别仅在于q,它是sum(1 /(1:n)),其中n = p值的数量。O和RO只是用来放P值在该函数递减数字顺序,然后吐出来在用户inputed他们以相同的顺序背出。
russellpierce

1
因此,由于没有新的答案出现,因此我将接受该答案并总结我的理解。p.adjust可能会误导BY。执行的操作不是重新采样。BH,2000年引入了自适应FDR程序,这涉及到空值比例的估计,它可能是BY代码中出现的q。在此期间,明智的做法是直接引用p.adjust,因为它反映了您使用选项“ BY”时使用的实际过程,并且要意识到“ BY”实际上可能是在实施Benjamini&Hochberg, 2000.
russellpierce13年

5

p.adjust不误解BY。本文参考定理1.3(第1182页第5节的证明):

Benjamini,Y.和Yekutieli,D.(2001)。依赖项下多重测试中错误发现率的控制。统计年鉴29,1165年至1188年。

由于本文讨论了几种不同的调整,因此p.adjust()的帮助页面(在撰写本文时)的参考有些模糊。在最一般的依赖结构下,可以保证该方法以指定的速率控制FDR。克里斯托弗·热诺维斯(Christopher Genovese)的幻灯片中提供了丰富的评论,网址为:www.stat.cmu.edu/~genovese/talks/hannover1-04.pdf注意幻灯片37中的评论,指的是BY 2001论文中定理1.3的方法。用p.adjust()的'BY'表示:“很遗憾,这通常非常保守,有时甚至比Bonferroni还要保守。”

数值示例: method='BY' vsmethod='BH'

以下是Benjamini和Hochberg(2000)论文中使用R的p.adjust()函数将method ='BY'与method ='BH'进行比较的结果,用于表2第2列的p值:

> p <-    c(0.85628,0.60282,0.44008,0.41998,0.3864,0.3689,0.31162,0.23522,0.20964,
0.19388,0.15872,0.14374,0.10026,0.08226,0.07912,0.0659,0.05802,0.05572,
0.0549,0.04678,0.0465,0.04104,0.02036,0.00964,0.00904,0.00748,0.00404,
0.00282,0.002,0.0018,2e-05,2e-05,2e-05,0)
> pmat <- rbind(p,p.adjust(p, method='BH'),p.adjust(p, method='BY'))
> rownames(pmat)<-c("pval","adj='BH","adj='BY'")
> round(pmat,4)

[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] pval 0.8563 0.6028 0.4401 0.4200 0.3864 0.3689 0.3116 0.2352 0.2096 adj='BH 0.8563 0.6211 0.4676 0.4606 0.4379 0.4325 0.3784 0.2962 0.2741 adj='BY' 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] pval 0.1939 0.1587 0.1437 0.1003 0.0823 0.0791 0.0659 0.0580 0.0557 adj='BH 0.2637 0.2249 0.2125 0.1549 0.1332 0.1332 0.1179 0.1096 0.1096 adj='BY' 1.0000 0.9260 0.8751 0.6381 0.5485 0.5485 0.4856 0.4513 0.4513 [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26] [,27] pval 0.0549 0.0468 0.0465 0.0410 0.0204 0.0096 0.0090 0.0075 0.0040 adj='BH 0.1096 0.1060 0.1060 0.1060 0.0577 0.0298 0.0298 0.0283 0.0172 adj='BY' 0.4513 0.4367 0.4367 0.4367 0.2376 0.1227 0.1227 0.1164 0.0707 [,28] [,29] [,30] [,31] [,32] [,33] [,34] pval 0.0028 0.0020 0.0018 0e+00 0e+00 0e+00 0 adj='BH 0.0137 0.0113 0.0113 2e-04 2e-04 2e-04 0 adj='BY' 0.0564 0.0467 0.0467 7e-04 7e-04 7e-04 0

一世=1个1个/一世

> mult <- sapply(c(11, 30, 34, 226, 1674, 12365), function(i)sum(1/(1:i)))

setNames(mult,paste(c('m =',rep('',5)),c(11,30,34,226,1674,12365))) m = 11 30 34 226 1674 12365 3.020 3.995 4.118 6.000 8.000 10.000

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.