本次笔记主要介绍多重比较下两种常用的矫正P值的方法:Bonferroni法和Benjamini & Hochberg法(BH法)
多重比较问题
假设检验的基本原理是小概率原理,即我们认为小概率事件在一次试验中实际上不可能发生。当同一研究问题下进行多次假设检验时,不再符合小概率原理所说的“一次试验”。如果在该研究问题下只要有检验是阳性的,就对该问题下阳性结论的话,对该问题的检验的犯一类错误的概率就会增大。如果同一问题下进行n次检验,每次的检验水准为α(每次假阳性概率为α),则n次检验至少出现一次假阳性的概率会比α大。假设每次检验独立的条件下该概率可增加至
常见的多重比较情景包括:
- 多组间比较
- 多个主要指标
- 临床试验中期中分析
- 亚组分析
反映多重比较问题的一张漫画:
常见解决方法
解决方法首先是避免多重比较的发生或者减小比较次数,比如:
- 临床试验中选择一个主要主要指标,其他的作为次要指标,用主要指标的结果来决定试验的结果。
- 将几个指标构建成一个复合指标作为主要指标分析。
- 事先计划好要进行的比较,比如说不需要每两组间都进行比较,而是所有组都统一和某一个参照组比较以减少比较的次数。
有些特定问题有对应的特定方法。比如说使用方差分析进行多组间均值比较时,有专门的两两比较方法,再比如临床试验期中分析也有专门的α消耗函数来决定各次期中分析使用的检验水准。这里我们介绍临床研究中更一般情况下的多重比较的常见方法。Bonferroni法和Benjamini & Hochberg法(BH法) 这两种方法可以矫正各次检验的P值,用矫正后的P值与既定的α进行统计推断以保证总的一类错误概率不大于α。(实际上原本的方法是调整各检验的α值,我们这里介绍的是与之等价的矫正P值的方法)
设希望控制总的一类错误概率为α,比较的次数为n。
Bonferroni法
Bonferroni法得到的矫正P值=P×n
Bonferroni法非常简单,它的缺点在于非常保守(大概是各种方法中最保守的了),尤其当n很大时,经过Bonferroni法矫正后总的一类错误可能会远远小于既定α。
Benjamini & Hochberg法
简称BH法。首先将各P值从小到大排序,生成顺序数
排第k的矫正P值=P×n/k
另外要保证矫正后的各检验的P值大小顺序不发生变化。
R实现
利用R自带的基础包中的p.adjust()
可以进行多重检验的P值矫正。
p.adjust(p, method = p.adjust.methods, n = length(p))
- p为原始的p值构成的向量,
- method指定矫正用的方法。可以用的方法可以通过运行“p.adjust.methods ”来查看,有: Bonferroni correction ("bonferroni") ,Holm (1979) ("holm"), Hochberg (1988) ("hochberg"), Hommel (1988) ("hommel") and Benjamini & Hochberg (1995) ("fdr"或“BH”)
- n为比较次数
实例:
# BH方法
p <- c(0.020, 0.030, 0.244 ,0.510)
round(p.adjust(p, "BH"), 3)
round()
指定结果输出的小数点位数。
输出结果为
## [1] 0.060 0.060 0.325 0.510
按照上面介绍的BH法,我们可以手算验证矫正的结果为:
0.08,0.06,0.325,0.510
注意原本排第一的检验结果矫正后变为0.08,比排第二的检验结果矫正后P值0.06要大,因此将原本排第一的检验的矫正后P值调整为0.06.
另外,如果调整后P值大于1,p.adjust()
会将结果调整为1.
关于p.adjust()
的更多内容:http://web.mit.edu/people/jhaas/MacData/afs/sipb/project/r-project/arch/sun4x_59/lib/R/library/stats/html/p.adjust.html