每逢佳节胖三斤,每逢假期懒三分。好久没有更新了,趁着新学期第一次组会的余热开个头~组会上提到了Bonferroni校正,查了查资料写一篇mark一下。
生物学研究中显著性检验被广泛应用于判断样本之间是否存在显著的差异。而在很多情况下我们需要进行多次判断,如判断两组样本对应的10000个基因的表达量是否存在组间差异:基因A是否存在差异?基因B,C,D.. .. ..是否存在差异?如此就需要进行10000次比较。若以p=0.01作为阈值,并假设每次判断都是彼此独立的,那么即使这10000个基因都不存在差异,结果中仍可能会得到100个差异基因的结论,即假阳性结果出现的概率为100%。小概率事件在多次反复进行后会变成一个多次出现的事件(比如你走在街上捡钱的概率很小,但是几十年下来也能捡不少次)。多重检验(10000次)会使得单次检验的标准(p=0.01)变得过于宽松,使得阳性结果出现的频数大大升高(10000*0.01=100)。解决的办法就是要提高判断的标准(p-value),单次判断的犯错概率就会下降,总体犯错概率也会下降。多重检验中提高判断标准的办法就称之为多重检验校正。
Bonferroni校正即为最严格的多重检验矫正方法。原理为:如果在同一数据集上同时检验n个独立的假设,那么用于每一假设的统计显著水平,应为仅检验一个假设时的显著水平的1/n。
举个例子:如以显著水平0.05检验同一数据集上两个独立的假设,此时用于检验该两个假设应使用更严格的0.025;对于10000个基因的检验,若将p设置为10-6,进行10000次比较之后犯错误的概率是10-6*10000 = 0.01,完美的控制了假阳性的出现。
由于这种方法太过严格,也会带来一些缺憾,如假阴性率的提高。一些存原本在差异的样本由于达不到设定的阈值标准而被误判为没有差异。针对这个问题,后人对该方法又进行了很多改进,这里不再详述。
R中的p.adjust函数可以快速方便的进行多重检验校正。
数据集:
> require(graphics)
> set.seed(123)
> x <- rnorm(50,="" mean="c(rep(0," 25),="" rep(3,="">->
> x
> p <->->
> #多重校正检验
> p.adjust(p, method = p.adjust.methods, n = length(p))
检验方法有以下几种:
p.adjust.methods:'holm', 'hochberg', 'hommel', 'bonferroni', 'BH', 'BY','fdr', 'none'。
若想得到较小的p.adjust,原始的p值必须非常非常小。采用以上数据对各种方法进行比较发现,Bonferroni方法最为严格(绿色的线),p.adjust对p值变化最为灵敏。
Figure 1 多重检验校正方法比较
参考材料:
1. http://blog.csdn.net/zhu_si_tao/article/details/71077703
2. http://blog.sina.com.cn/s/blog_4af3f0d20100bzx9.html
3. https://wenku.baidu.com/view/8769ef556bd97f192279e9aa.html
4. https://stat.ethz.ch/R-manual/R-devel/library/stats/html/p.adjust.html
一个环境工程专业却做生信分析的深井冰博士,深受拖延症的困扰。想给自己一点压力,争取能够不定期分享学到的生信小技能,亦或看文献过程中的一些笔记与小收获,记录生活中的杂七杂八。
联系客服