两类错误
在经典假设检验中,如果p值低于某个阈值(常用阈值α=5%),那么我们认为一个效应是具有统计学意义的(是显著的),这个过程产生两个问题:
- 如果一个效应的确是偶然发生的,那么我们将它误判为统计显著的概率是多少?这个概率就是误报率(false positive rate)。
- 如果一个效应不是偶然的,那么假设检验失败的概率是多少?这个概率称为漏报率(false negative rate)。
相对而言,漏报率比较容易统计,如果阈值α=5%,那么漏报率就是5%,理由如下:
- 如果效应不为真,那么原假设成立,因此,通过模拟原假设就可以计算检验统计量的分布,我们将这个分布称为
。
- 重复运行试验,每次得到一个
的测试统计量
。随后,我们计算出
值,
值是
中随机值大于
的概率,即为1-
。
- 当
大于95%,即
大于第95百分秩时,
值小于5%。而
中随机抽取的值大于第95百分秩的概率是多少呢?是5%。
因此,如果你进行一个阈值为5%的假设检验,20次里会有1次漏报。
功效
误报率收到实际效应大小的影响,而我们通常无法得到实际效应的大小,因此误报率较难计算。一个办法是计算一个假定效应大小的误报率。如果我们假设观测到的组间差异是准确的,那么可以以观测样本为总体模型,使用模拟数据运行假设检验。
中心思想:
- 假设观测到的组间样本存在差异是确实存在的。
- 将两个样本分别进行有放回的随机抽样,组成新的样本,新样本和原样本元素个数相等。
- 对新样本进行假设检验,验证新样本是否有差异。
- 重复2、3步骤100次,计算检验结果为无差异(p>0.05)的次数。
- “检验结果为无差异(p>0.05)的次数”除以100次,即为误报率(注意:此误报率是在确定样本存在差异的条件下)
python代码:
#导入数据
live,firsts,others=first.MakeFrames()
import collections
#有放回抽样,抽取等长度的序列
def Resample(xs):
return np.random.choice(xs,len(xs),replace=True)
#将两个样本中的元素混合打散。
def RunModel(group1,group2):
m,n=len(group1),len(group2)
pool=np.hstack((group1,group2)) #将两个Series前后拼接成一组
np.random.shuffle(pool) #将拼接后的数组中的元素打散,重新排列。
data=pool[:m],pool[m:] #将数组重新划分成两个数组
return data
#计算每次重新划分之后的均值之差。
def TestStatistic(data):
group1,group2=data
di=abs(group1.mean()-group2.mean())
return di
#计算误报次数,即p值大于0.5的次数(差异不显著的次数),处于100次,得出误报率。
def FalseNegRate(group1,group2,num_runs=100):
count=0
for i in range(num_runs):
sample1=Resample(group1)
sample2=Resample(group2)
ht=[TestStatistic(RunModel(sample1,sample2)) for _ in range(101)]
b=sum(1 for x in ht if x>=abs(sample1.mean()-sample2.mean())) #计算比当前情况乃至更差情况出现的次数
p_value=b/101
if p_value>0.05:
count+=1
return count/num_runs
FalseNegRate(firsts['prglngth'],others['prglngth'])
输出:
0.68
结果约为70%,这个结果说明,如果妊娠时间均值的实际差异为0.78周,那么我们预期,如果使用这个规模的样本进行试验,结果有70%的可能性为误报,同样,我们预期检验通过的可能性只有30%。称为“功效”,有的时候也称为“敏感度”。这个值反映了一个检验检测出指定大小效应的能力。
在上面这个示例中,检验结果通过的可能性只有30%(假设实际差异为0.78周)。一般来说,我们认为功效超过80%才是我们能够接受的,因此,示例中的检验属于“低功效”的。
通常,假设检验失败并不说明两个群组之间不存在差异,而是说,如果差异的确存在的话,这个差异太小,以至于无法在这种规模的样本中检验到。
如何验证错误
1、多重检验
如果你运行一个假设检验,那么误报的可能性约为1/20,还在可接受范围内。但是如果运行20个检验,那么在大多数情况下,你至少应该预期得到一次误报。
其次使用同一个数据集进行探索分析和检验分析,会天然降低误报的可能性。
如果要弥补多重检验的问题。你可以通过以下方式:
- 调整阈值α。
- 将数据分区,一部分数据用来探索,一部分数据用来检验。
2、复现
通常我们也可以通过重现别人发表的结果,间接解决问题,通常,人们将某一个新发现的第一篇论文视为探索性的,使用新数据复现该结果的后续论文则为验证性的。
如果,原始数据中多有统计显著的效应,在新数据中都得到了复现,证明探索性的结果是有说服力的。