我们一般平时较为常用的检验要属有参检验,但是其要求样本必须满足近似正态,无离群点,数据量大等要求;而有些时候其实很难都满足以上前提条件,则这时需要使用无参检验,其只关注数据的秩,但是无参检验有时也无法处理一些样本数较少的情况,这时则可以使用置换检验
置换检验,是Fisher提出的一种基于大量计算(computationally intensive),利用样本数据的随机排列(置换检验的核心思想,故名Permutation test),进行统计推断的方法。因其对总体分布自由,特别适合用于总体分布未知的小样本数据,以及一些常规方法难以使用的假设检验情况
置换检验的思路简单的说如下:
- 提出原假设,比如XX处理后结果没有变化
- 计算统计量,如两组的均值之差,记作t0
- 将所有样本放在一起,然后随机排序进行分组,再计算其统计量t1
- 重复第3步骤,直至所有排序可能性都齐全(比如有A组有n样本,B组有m样本,则总重复次数相当于从n+m中随机抽取n个的次数),得到一系列的统计量(t1-tn)
- 最后将这些统计量按照从小到大排序,构成抽样分布,再看t0是否落在分布的置信区间内(如95%置信区间),这时候可计算一个P值(如果抽样总体1000次统计量中大于t0的有10个,则估计的P值为10/1000=0.01),落在置信区间外则拒绝原假设
- 如果第3步骤是将所有可能性都计算了的话,则是精确检验;如果只取了计算了部分组合,则是近似结果,这时一般用蒙特卡罗模拟(Monte Carlo simulation)的方法进行置换检验
- 置换检验和参数检验都计算了统计量,但是前者是跟置换观测数据后获得的经验分布进行比较,后者则是跟理论分布进行比较
具体实例示范可参照文章Permutation Test 置换检验
从上述可看出,置换检验的原假设很强:
- 它假设对于所有个体 ,是否得到处理对于其结果变量 没有任何影响:H0:Y1i=Y0i,i=1..n;其中,根据 “潜在结果”(potential outcomes)的术语, 为个体 接受处理的结果变量取值,而 为个体 未接受处理的结果变量取值。这种原假设被称为 “尖锐原假设”(sharp null hypothesis)
- 传统统计检验的Neyman-Pearson 原假设则仅关心平均效应是否相等:H0:E(Y1)=E(Y0);显然,如果尖锐原假设成立,则只要在等式 两边同时求期望,即可得到传统的 Neyman-Pearson 原假设;故前者比后者更强
置换检验在GSEA的算法思路中是一个重要的组成部分:
- 比如当我们将
Permutation type
参数设置为1000后,就想相当于我们从原始所有样本中随机抽取1000个置换后的样本。 - 接着作者先计算这1000个置换样本的signal to noise scores(也可以是log2_Ratio_of_Classes等),然后再计算每个置换样本的在每个gene sets下的ES值,这个ES值就是置换检验中的统计量。
- 最后根据这1000个ES的经验分布,计算原始样本的ES值在这分布中的位置,也就是P值,来确定是否能推翻原假设
基于置换检验是将统计量与经验分布进行比较,然后根据统计量的极端性来判断是否有足够理由拒绝零假设,这种思路可以延伸到大部分经典统计检验和线性模型上
如R语言中的
coin
包对于独立性问题提供了一个非常全面的置换检验的框架
按照其说法,coin
包可以解决如下几个问题:
- 响应值与组的分配独立吗?
- 两个数值变量独立吗?
- 两个类别型变量独立吗?
总是其提供了相对于经典统计检验的置换检验函数,具体函数的使用可参考书籍R语言实战或者文章R语言置换检验
而还有一个lmPerm
包则可用来处理线性模型的置换检验,如对传统的lm
和aov()
而修改的置换检验版lmp()
和aovp