P值,通常被我们用来判断是否接受一个假设,关于P值的前世今生,可以看数说君的了一篇文章《P值之死》,在微信公众号中回复“P值”查看。本篇不说P值本身的问题,我们来看它在具体判断中可能出现的另一个问题。
本文目录为:
一、背景
二、问题
三、Bonferroni校正
四、FDR校正
一、背景
先来熟悉一下我们问题的背景。我们知道在假设检验中,有两种错误:拒真错误和取伪错误。
我们用分布图来更形象的说明,不要紧张,非常形象非常好懂的。现在有一些样本,我们打算判断这些样本是来自H0还是H1,。那么
- 原假设: H0:u=0;
- 备择假设:H1:u>0
两个假设下的总体分布如下图:
好了,那么什么是第一类错误和第二类错误呢?
(看不清楚的话点开查看大图)
对了——通过样本得到的Z-value如果大于Zα,我们一般都拒绝原假设,但是它却有一定概率(概率为α)来自H0的,这就是第一类错误,见红字部分。第二类错误就是β,见绿字部分,下面重点是围绕第一类错误α展开,因为它是个大咖。
这个α,我们又把它叫做——显著性水平!假设检验就那这个作为标准。
为什么呢?
一般在做假设检验的时候都要求这个α尽可能的小,因为在假设检验我们通常认为原假设是不能轻易被否定的。
我们的P值就是跟这个标准做比较,我们通常把α取为0.05,复习一下吧:
- P<α=0.05,则拒绝H0;
- P>α=0.05,不能拒绝H0;
这个标准,意味着我们要承担α=5%的错误拒绝的概率。
至于P值是怎么来的,为什么用P值和α相比来判断,可以去看《P值之死》,里面已经进行了详细的梳理。
二、问题
虽然数说君已经在《P值之死》中批判过了这种P与α判断方法的问题,但在这里,我们就认为这种方法是合理的。
对于一个检验问题:
- 我们有5%概率犯第一类错误;
- 也就是说,有95%的概率不犯第一类错误(不要打我,这不是废话);
假如现在,我要做20个相互独立的检验呢?
- 不犯第一类错误的概率为 (1-5%)20 =36%
- 至少出现一次第一类错误的概率为 1-36%=64%
这么大的概率让人难以接受,如果随着m再增加呢,要做100次?1000次?那么几乎可以肯定的说,必然会有至少1个结果是被错误地拒绝的了。
想象一下,你得意洋洋的看着你的100个检验结果,但是突然告诉你这100个里面必然有一个错了,而且你又不知道具体哪个是错的。。。
你可能会说,自打接触统计学这东西一来,对假设检验是能躲就躲能逃就逃,人生截止目前做过不超过10个检验,每一次做都要翻2个小时的书,现在你要我一次性做100个?没但玩?
有但玩。真的,比如现有下面这组数据,我们想分析X1-X20中,哪一个因素和人们的收入有显著关系:
我们做了20个检验,那么这里面就很可能有一个是碰巧显著。你可不要觉得我吃饱了撑的,因为在生物学中,我们要做更大的全基因组关联分析——全基因组?什么概念?——需要对几十万甚至几百万个SNP(单核苷酸多态性)与某个疾病进行单独检验,找出那个与疾病显著相关的SNP,也就是说,要做几百万个检验?!
怎么办???
我们把这个“至少有1个错误”的概率称为 FWER(Family-Wise Error Rate)
FWER (Family-Wise Error Rate)
= 1- (1- α)m
我们现在就想让这个整体犯第一类错误的概率降低为5%,怎么办?
Bonferroni校正的思想就是基于此而来。
三、Bonferroni校正
Bonferroni校正的思想很简单:
Bonferroni correction
假设我们做m个相互独立的检验,我要的目标是—— FWER = 1- (1- α)m =0.05 由于当α很小时,存在这一的近似关系 (1-α)m ≈ 1-ma,因此 1- (1- α)m = ma = 0.05 即α=0.05/m。 也就是说,每一个检验的显著水平不再是0.05了,而应该是0.05/m。对于每一个检验的P值,有:
- P<α=0.05/m,我们才能拒绝H0;
这样我们就校正了显著水平,当然我们也可以让α保持不变,去校正P值:
- P*m<α=0.05,我们才能拒绝H0;
也就是说,每一个检验做出来的P值,我们都要乘以m,叫做校正后的P值,然后去和0.05进行比较。
但是,随着检验次数m的增多,
- 校正后的P值会越来越大,判定的标准越发的严格;
- 同时,第一类错误概率是减少了,第二类错误的概率却增加了。
针对这样的问题,Benjaminiand Hochberg(1995) 提出了FDR校正方法。
四、FDR校正
Bonferroni校正关注的是,所有检验中的第一类错误检验(被错误拒绝的检验),而FDR的关注的是,所有拒绝掉的检验中,错误拒绝的检验,如果觉得绕口的话可以看下面的图:
一共有m个检验,其中最终选择接受原假设的有W个,拒绝的有R个,在拒绝的R个中,有V个是错误拒绝的,有S个是正确拒绝的。
FDR(Falsely Discovery Rate)的定义为:
实际上,FDR也就是错误拒绝的检验个数,占所有拒绝的检验个数的比例。它只关注所有拒绝掉的检验中,错误拒绝的比例,FDR的目的就是要将这个比例降低到α。
那么,该如何做到?很简单,参照下面的步骤即可:
FDR correction
首先,对m个p值按从小到大的顺序进行排序
从P(1)开始,到P(2)、P(3) ...,挨个进行比较,直到找到最大的P(i)满足:
找到之后,拒绝之前所有的原假设H(i),i=1,2,3...i。 至此,完成FDR的校正。 或者,保持α不变,将P值校正为mP(i)/i,这个值又称为Q值 Q-value(i) = m × P(i)/i < α
根据Benjaminiand和Hochberg的论文(1995)里的证明, 以上的过程就可以控制FDR在α以内。感兴趣的可以搜索这篇论文”controlling the False Discovery Rate: a Practical and Powerful Approach to Multiple Testing“。
举个例子吧,加入我们做个20个检验,每个检验有一个P值,那么我们分别用Bonferroni校正和FDR校正,得到的结果如下:
可以看出Bonferroni校正的结果要严格很多,FDR则比较中肯。