统计推断——假设检验——python代码实现“功效”计算——以检验均值差为例

两类错误

在经典假设检验中,如果p值低于某个阈值(常用阈值α=5%),那么我们认为一个效应是具有统计学意义的(是显著的),这个过程产生两个问题:

  • 如果一个效应的确是偶然发生的,那么我们将它误判为统计显著的概率是多少?这个概率就是误报率(false positive rate)。
  • 如果一个效应不是偶然的,那么假设检验失败的概率是多少?这个概率称为漏报率(false negative rate)。

相对而言,漏报率比较容易统计,如果阈值α=5%,那么漏报率就是5%,理由如下:

  • 如果效应不为真,那么原假设成立,因此,通过模拟原假设就可以计算检验统计量的分布,我们将这个分布称为CDF_{T}
  • 重复运行试验,每次得到一个CDF_{T}的测试统计量t。随后,我们计算出p值,p值是CDF_{T}中随机值大于t的概率,即为1-CDF_{T}(t)
  • CDF_{T}(t)大于95%,即t大于第95百分秩时,p值小于5%。而CDF_{T}中随机抽取的值大于第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、复现

通常我们也可以通过重现别人发表的结果,间接解决问题,通常,人们将某一个新发现的第一篇论文视为探索性的,使用新数据复现该结果的后续论文则为验证性的。

如果,原始数据中多有统计显著的效应,在新数据中都得到了复现,证明探索性的结果是有说服力的。

 

 

 

你可能感兴趣的:(假设检验,统计学,pyhton)