数据分析中常碰见多重检验问题 (multiple testing).Benjamini于1995年提出一种方法,通过控制FDR(False Discovery Rate)来决定P值的域值. 假设你挑选了R个差异表达的基因,其中有S个是真正有差异表达的,另外有V个其实是没有差异表达的,是假阳性的.实践中希望错误比例Q=V/R平均而言不能超过某个预先设定的值(比如0.05),在统计学上,这也就等价于控制FDR不能超过5%.
根据Benjamini在他的文章中所证明的定理,控制fdr的步骤实际上非常简单。
设总共有m个候选基因,每个基因对应的p值从小到大排列分别是p(1),p(2),...,p(m),则若想控制fdr不能超过q,则只需找到最大的正整数 i,使得 p(i)<= (i*q)/m.然后,挑选对应p(1),p(2),...,p(i)的基因做为差异表达基因,这样就能从统计学上保证fdr不超过q。

The False Discovery Rate (FDR) of a set of predictions is the expected percent of false predictions in the set of predictions. For example if the algorithm returns 100 genes with a false discovery rate of .3 then we should expect 70 of them to be correct.

The FDR is very different from a p-value, and as such a much higher FDR can be tolerated than with a p-value. In the example above a set of 100 predictions of which 70 are correct might be very useful, especially if there are thousands of genes on the array most of which are not differentially expressed. In contrast p-value of .3 is generally unacceptabe in any circumstance. Meanwhile an FDR of as high as .5 or even higher might be quite meaningful.

计算方法 请参考:

http://stat.ethz.ch/R-manual/R-devel/library/stats/html/p.adjust.html

> p<-c(0.0003,0.0001,0.02)
>  p
[1] 3e-04 1e-04 2e-02
>
> p.adjust(p,method="fdr",length(p))
[1] 0.00045 0.00030 0.02000
>
> p*length(p)/rank(p)
[1] 0.00045 0.00030 0.02000
> length(p)
[1] 3
> rank(p)
[1] 2 1 3
 sort(p)
[1] 1e-04 3e-04 2e-02

1) P-value 是 (在H0 = true的情况下)得到和试验数据一样极端(或更极端)的统计量的概率. 它不是H1发生的概率. 假定吃苹果的一组和不吃苹果的一组的差异为D, P-value=0.2的意思是, pure randomly (即H0=true)的情况下, 观察到和D一样或比D更大的差异的概率是20%.

2) p-value 的本质是控制PFR (false positive rate), hypothesis test 的目的是make decision. 传统上把小概率事件的概率定义为0.05或0.01, 但不总是这样. 主要根据研究目的. 在一次试验中(注意:是一次试验, 即single test), 0.05 或0.01的cutoff足够严格了(想象一下, 一个口袋有100个球, 95个白的, 5个红的, 只让你摸一次, 你能摸到红的可能性是多大?). 我刚才强调的是single test, 在multiple test中, 通常不用p-value, 而采用更加严格的q-value. 与p-value 不同, q-value 控制的是FDR (false discovery rate).

3)举个例子.假如有一种诊断艾滋病的试剂, 试验验证其准确性为99%(每100次诊断就有一次false positive). 对于一个被检测的人(single test) 来说, 这种准确性够了. 但对于医院 (multiple test) 来说, 这种准确性远远不够, 因为每诊断10 000个个体, 就会有100个人被误诊为艾滋病.

4)总之, 如果你很care false positive, p-value cutoff 就要很低. 如果你很care false negative (就是"宁可错杀一千, 也不能漏掉一个" 情况), p-value 可以适当放松到 0.1, 0.2 都是可以的.
*******************

Multiple testing的问题最近越来越火了:)

其实我一直有一个问题,从Benjamini开始,现在FDR的控制方法不下10种,为什么Storey的是最流行的?实际应用起来除了Benjamini的方法,其它所有的方法基本上都是一样的。q-value究竟是如何脱颖而出的呢?

q-value 是随着multipel test 而产生的. 在multiple test (比如10000次), 如果用p-value=0.05去cut. 如果有1000次是显著的, 那么在这1000中, 有10000*0.05=500次是 False positive. 这显然不能接受. 太宽松了.

Bonferroni提出FWER, 在上面的例子中, 就是把cutoff 设为: 0.05/10000 = 0.000005, 这虽然能控制False Positive, 但这只在极少数情况下有用. 因为太严格了, 大量的true alternatives 被miss掉了

q-vlaue 实际上是上述两种方法的折衷. 既能控制FP, 有不会miss掉太多的true alternatives.

For details see Storey's paper published ON PNAS (2003).

*************************

赞同:)不过我的问题并不是关于FWER,而是关于FDR的控制。Benjamini and Hochberg在1995年第一次提出了FDR的概念,其出发点就是基于Bonferroni的保守性,并给出了控制FDR的方法(这算是FDR控制方 法的祖师爷了)。不过他们的方法也有其保守性。所以随后人们开始研究更加powerful的方法,现有的方法有Storey的, Broberg的,Dalmasso的,Guan的,Strimmer的等等等等。Benjamini的方法是将FDR控制在一个level以下,而之后 所有的方法都在试图精确地估计FDR。所以后来的这些方法都要powerful一些。不过他们所付出的代价就是robustness。

现有FDR控制方法最大的弊端在于,他们假设p-value's under the null hypothesis是(1)independent(2)following uniform (0,1) distribution. 这两点假设从实际观察到的数据来看经常是不合理的,尤其是第二点。(顺便提一句,Storey和Leek在07年的PLOS Genetics发表了一篇文章专门解决第二个假设的合理性问题,很牛,有兴趣可以看一下)

我现在的问题是:Storey的方法没有比后来出现的其它方法更精确,在robustness方面也没有体现其优越性。它究竟是怎么获胜的?为什么它是最流行的FDR control procedure?

From: http://cos.name/cn/topic/13846

Bonferroni校正   
如果在同一数据集上同时检验n个独立的假设,那么用于每一假设的统计显著水平,应为仅检验一个 假设时的显著水平的1/n。举个例子:如要在同一数据集上检验两个独立的假设,显著水平设为常见的0.05。此时用于检验该两个假设应使用更严格的 0.025。即0.05* (1/2)。该方法是由Carlo Emilio Bonferroni发展的,因此称Bonferroni校正。   这样做的理由是基于这样一个事实:在同一数据集上进行多个假设的检验,每20个假设中就有一个可能纯粹由于概率,而达到0.05的显著水平。   
维基百科原文:   
Bonferroni correction   Bonferroni correction states that if an experimenter is testing n independent hypotheses on a set of data, then the statistical significance level that should be used for each hypothesis separately is 1/n times what it would be if only one hypothesis were tested.   For example, to test two independent hypotheses on the same data at 0.05 significance level, instead of using a p value threshold of 0.05, one would use a stricter threshold of 0.025.   The Bonferroni correction is a safeguard against multiple tests of statistical significance on the same data, where 1 out of every 20 hypothesis-tests will appear to be significant at the α = 0.05 level purely due to chance. It was developed by Carlo Emilio Bonferroni.   A less restrictive criterion is the rough false discovery rate giving (3/4)0.05 = 0.0375 for n = 2 and (21/40)0.05 = 0.02625 for n = 20.   
数据分析中常碰见多重检验问题(multiple testing).Benjamini于1995年提出一种方法,通过控制FDR(False Discovery Rate)来决定P值的域值. 假设你挑选了R个差异表达的基因,其中有S个是真正有差异表达的,另外有V个其实是没有差异表达的,是假阳性的.实践中希望错误比例Q=V/R平均而言不 能超过某个预先设定的值(比如0.05),在统计学上,这也就等价于控制FDR不能超过5%.   根据Benjamini在他的文章中所证明的定理,控制fdr的步骤实际上非常简单。   设总共有m个候选基因,每个基因对应的p值从小到大排列分别是 p(1),p(2),...,p(m),则若想控制fdr不能超过q,则只需找到最大的正整数i,使得 p(i)<= (i*q)/m.然后,挑选对应p(1),p(2),...,p(i)的基因做为差异表达基因,这样就能从统计学上保证fdr不超过q。   The False Discovery Rate (FDR) of a set of predictions is the expected percent of false predictions in the set of predictions. For example if the algorithm returns 100 genes with a false discovery rate of .3 then we should expect 70 of them to be correct.   The FDR is very different from a p-value, and as such a much higher FDR can be tolerated than with a p-value. In the example above a set of 100 predictions of which 70 are correct might be very useful, especially if there are thousands of genes on the array most of which are not differentially expressed. In contrast p-value of .3 is generally unacceptabe in any circumstance. Meanwhile an FDR of as high as .5 or even higher might be quite meaningful.   FDR错误控制法是Benjamini于1995年提出一种方法,通过控制FDR(False Discovery Rate)来决定P值的域值. 假设你挑选了R个差异表达的基因,其中有S个是真正有差异表达的,另外有V个其实是没有差异表达的,是假阳性的。实践中希望错误比例Q=V/R平均而言不 能超过某个预先设定的值(比如0.05),在统计学上,这也就等价于控制FDR不能超过5%.   对所有候选基因的p值进行从小到大排序,则若想控制fdr不能超过q,则只需找到最大的正整数 i,使得 p(i)<= (i*q)/m.然后,挑选对应p(1),p(2),...,p(i)的基因做为差异表达基因,这样就能从统计学上保证fdr不超过q。因此,FDR的计 算公式如下:   q-value(i)=p(i)*length(p)/rank(p)   
参考文献:   
1.Audic, S. and J. M. Claverie (1997). The significance of digital gene expression profiles. Genome Res 7(10): 986-95.   
2.Benjamini, Y. and D. Yekutieli (2001). The control of the false discovery rate in multiple testing under dependency. The Annals of Statistics. 29: 1165-1188.

多重检验中的FDR错误控制方法与p-value的校正及Bonferroni相关推荐

  1. JAVA Web项目中所出现错误及解决方式合集(不断更新中)

    JAVA Web项目中所出现错误及解决方式合集 前言 一.几个或许会用到的软件下载官网 二.Eclipse的[preferences]下没有[sever]选项 三.Tomcat的安装路径找不到 四.T ...

  2. Sql Server 因为触发器问题导致数据库更新报错“在触发器执行过程中引发了错误,批处理已中止”的问题处理...

    在维护一个非常旧的项目时,由于该项目版本已经非常老了,而且在客户现场运行的非常稳定,更要命的是本人目前没有找到该项目的代码,为了处理一个新的需求而且还不能修改程序代码,于是决定从数据库入手,毕竟该项目 ...

  3. react 错误边界_React with GraphQL和错误边界中的自定义错误页面

    react 错误边界 by Abi Noda 通过Abi Noda React with GraphQL和错误边界中的自定义错误页面 (Custom error pages in React with ...

  4. 诊断IIS中的ASP0115错误

    诊断IIS中的ASP0115错误 作者:未知 重要说明:本文包含有关修改注册表的信息.修改注册表之前,一定要备份注册表,并且一定要知道在发生问题时如何还原注册表.有关如何备份.还原和编辑注册表的信息, ...

  5. php中常见的错误类型有,JavaScript中常见的错误类型有哪些?(详细介绍)

    在JavaScript中,当发生错误时会生成描述错误类型的错误对象,此错误对象包含错误类型和编号等信息,这些信息可用于后续处理等,在本篇文章中将给大家介绍常见的错误类型以及如何处理这些错误. Java ...

  6. windows server 驱动精灵_大神教你如何在Win10中检查磁盘驱动器错误

    正文 如果你在使用Win10的过程中遇到随机错误,尤其是与磁盘读取或写入相关的错误,那么你可能需要回想一下,最近有没有不正确地关机,磕碰到硬盘,或者你的硬盘使用了太多的年头. 在这篇文章中,机长将介绍 ...

  7. GDI+ 中发生一般性错误(生成验证码时出现的错误)

    我在生成验证码时,出现这样的错误:GDI+ 中发生一般性错误. 怎么解决? 转载于:https://www.cnblogs.com/happyangle/archive/2008/06/11/1217 ...

  8. GDI+中发生一般性错误

    在PictureBox中有一副图,希望保存成图片,用 pictureBox1.Image("c:\\aa.jpg",System.Drawing.Imaging.ImageForm ...

  9. python语言包含的错误,Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种...

    Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种 答:编译错误 人体体温能自动调控在37度,其原因是( ). 答:人体内产生的热能是分批放出的 人体内有完善的 ...

最新文章

  1. What is corresponding Cron expression to fire in every X seconds, where X 60? --转载
  2. 二十年后我发明了保姆机器人作文_五年级作文:二十年后的家乡(张羽彤)
  3. PASSWORD,ENABLE,CONSOLE,VTY及TACACS认证顺序及区别
  4. 爱宠无人看护?别担心人工智能已经来了
  5. 【SpringBoot_ANNOTATIONS】组件注册 02 @ComponentScan 自动扫描组件 指定扫描规则
  6. Nas初体验(黑群晖实战)
  7. Mac版kettle
  8. 互联网吞噬世界,“大数据”吞噬互联网!
  9. 触龙说赵太后原文及翻译
  10. 由preempt_disable的实现想到的
  11. android Retrofit下载图片
  12. python练习---大球吃小球游戏
  13. 基于STC12C5A的MINI3216多功能点阵时钟
  14. 在特定时间段内显示隐藏,判断日期活动是否开启结束
  15. 在Excel中粘贴时怎样跳过隐藏行
  16. 记一次fegin远程调用 object is not an instance of declaring class
  17. 微信小程序9---Button按钮和icon图标
  18. MADS100桌面发卡器
  19. javascript案例11——摇号、点名、随机点名
  20. 自动化测试工具 AirTest 的使用方法与简介

热门文章

  1. python stl文件_打开本地STL文件并创建webgl使用的geometry
  2. 计算机毕业设计asp.net酒店客房管理系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目
  3. RK 3568 移植CH9344驱动流程记录
  4. LaTeX:Texlive 2020和TeX studio的下载与安装
  5. shellcode编码
  6. css实现鼠标触碰动态显示图片文本
  7. GD32F103替代STM32F103带来串口不能用的问题
  8. Django REST framework(官方教程)
  9. 深度解析信创服务器主板一站式解决方案核心技术!
  10. 对比 | PCB线路板和集成电路的区别