原标题:如何正确避开臭p?

一、相关背景知识

尽管去年就有学者对p提出异议,但不能否认,目前发文章,p依然是香的,受认可的。

那么问题来了,很多时候,做出来的结果是阴性的,而大家普遍不喜欢报道阴性结果。那么这时候就有人挖空心思,左比右比,横比竖比,硬生生造出来一个满足检验水准的p。

对不起,你的p是有问题的,这个结果是假阳性、不可信的。

为了直观展示,我在R中模拟一批数据,带大家来一步步揭示p值为什么要校正:

这个例子是:北京地区男性女性的收入有没有差距?为了回答这个问题,我们抽取(模拟)了10000例样本

set.seed(5)

#为了让大家能重复出我的结果,设定种子数

income

#生成“收入”变量,样本为10000例,均值为1万(北京地区嘛),标准差为5000(考虑到大家收入差距还是蛮大的。当然了,在这个前提下,极少数样本会<0)

sex

#生成“性别”变量,一半男,一半女

ck

#基于收入、性别,生成数据集ck

head(ck)

#查看一下

好了,数据集生成了,下面进行检验,男女到底收入有没有差异?采用t检验进行分析

t.test(income~sex,data = ck)

t检验显示p值大于0.05,无差异(很正常,因为是随机生成的)

从箱式图来看,分布也的确非常相似,也提示没有差异。

好了,划重点!

如果这10000人就是你的研究总体,而你又没有那么大的财力去收集每一个样本(现实中往往很多人只收个几百、甚至几十例的样本,比如那些临床大夫)

我们看看他们所谓的辛苦收集来的数据会是什么样的结果:

我们要做的就是从这个10000人的总体中抽取一个小样本,先来个大的研究吧,200例。我这里抽取100次,进行100遍检验,相当于比较了100次。

p

for (i in 1:100) {

set.seed(eval(i*19+20)) #每循环一次,设定一个种子数

sample

data

t

p

}

p05

#从p值合集里抽取小于0.05的

100次比较,全部的p值列在下面:

看看其中小于0.05的

高达6次!

高达6次!

高达6次!

也就是说:我只要比较不到20次,就能得到1次有差异(“假阳性”)的结果!

如果我们的研究样本小一点,比如再减少一半,只抽100例,

那么每比较10次,就有1次假阳性!

亲们,你说你们的p值要校正不?

二、p值的校正方法:

#1.最常见最保守的方法就是Bonferroni校正

理念:如果在同一数据集上同时检验n个独立的假设,那么用于每一假设的统计显著水平,应为仅检验一个假设时的显著水平的1/n。

举个例子:如要在同一数据集上检验两个独立的假设,显著水平设为常见的0.05。此时用于检验该两个假设应使用更严格的0.025。即0.05* (1/2)。该方法是由Carlo Emilio Bonferroni发展的,因此称Bonferroni校正。

这样做的理由是基于这样一个事实:在同一数据集上进行多个假设的检验,每20个假设中就有一个可能纯粹由于概率,而达到0.05的显著水平。(有时甚至更高,我上面的模拟,每10次就有1次达到显著水平)

假如有10个检验,经过Bonferroni 校正以后,新的p值可以这样计算1-(1-p)^(1/10),即为新的显著性水平

2.FDR校正

FDR(假阳性率)错误控制法是Benjamini于1995年提出的一种方法,基本原理是通过控制FDR值来决定P值的值域,比Bonferroni校正要宽松一些。

核心思想就是控制“错误率”,比如你比较了10000个SNP基因位点,只要保证错误的在500个以内,就相当于统计学上的p<0.05.

计算方法: FDR校正是对每个p-value做校正,转换为q-value。q=p*n/rank,其中rank是指p-value从小到大排序后的次序。

记住了哟,多重比较的时候,最次也要用下q-value进行校正。

三、最后一个问题:哪些情景需要校正?

1.方差分析的两两比较就不说了,地球人都知道。

2.卡方分割,这个会有人忽视

(如下表)

有的人就喜欢掰开了揉碎了去比较:闭青VS开青,开青VS继发,青年VS老年,blabla

为求p值,也是拼了...

3.重复测量资料,多个时间点的比较

4.SNP位点

等等,凡是对“同一个数据集”进行多次检验,脑袋里都要有“校正”的这根弦!

就是这么喜欢分享~

相关文章