置换检验(Permutation test),也称随机化检验或重随机化检验,是Fisher于20世纪30年代提出的一种基于大量计算(computationally intensive),利用样本数据的全(或随机)排列,进行统计推断的方法。
其对总体分布自由,应用较为广泛,特别适用于总体分布未知的小样本资料,以及某些难以用常规方法分析资料的假设检验问题,属于非参数检验方法。
与Bootstrap Methods类似,通过对样本进行顺序上的置换,重新计算统计检验量,构造经验分布,然后在此基础上求出P值进行推断。
步骤:
两独立样本比较 (A组 10个观测值, B组15个观测值)
置换检验通常使用coin包,里面包含各种置换检验函数。
举例
现有“en”及“ch”两组独立数据
pacman::p_load(coin)
feature <-c(4508,21904,9.717835,0.039856,4.28406,4112,17423,8.474222,0.020499,5.00825,4632,33252,14.35751,0.032547,4.07546,4646,25483,10.96987,0.020499,5.00825)
group <- factor(c(rep("ch",10),rep("en",10)))
mydata <- data.frame(group,feature)
mydata # 长格式数据
group feature
1 ch 4508.000000
2 ch 21904.000000
3 ch 9.717835
4 ch 0.039856
5 ch 4.284060
6 ch 4112.000000
7 ch 17423.000000
8 ch 8.474222
9 ch 0.020499
10 ch 5.008250
11 en 4632.000000
12 en 33252.000000
13 en 14.357510
14 en 0.032547
15 en 4.075460
16 en 4646.000000
17 en 25483.000000
18 en 10.969870
19 en 0.020499
20 en 5.008250
oneway_test(feature~group, data=mydata, distribution="exact")
Exact Two-Sample Fisher-Pitman Permutation Test
data: feature by group (ch, en)
Z = -0.44355, p-value = 0.6614
alternative hypothesis: true mu is not equal to 0
置换检验使用条件:
假定数据成正态分布并不合适;
担心离群点的影响;
对于标准的参数方法来说数据集太小。
数据整形既有专门的包也可用R内置的函数作简单变换。
mydata2 <- unstack(mydata, feature~group) #转换为宽格式
mydata2
ch en
1 4508.000000 4632.000000
2 21904.000000 33252.000000
3 9.717835 14.357510
4 0.039856 0.032547
5 4.284060 4.075460
6 4112.000000 4646.000000
7 17423.000000 25483.000000
8 8.474222 10.969870
9 0.020499 0.020499
10 5.008250 5.008250
with(mydata2,wilcox.test(ch,en,paired = TRUE))
Wilcoxon signed rank test with continuity correction
data: ch and en
V = 3, p-value = 0.04232
alternative hypothesis: true location shift is not equal to 0
其他非参数秩和检验可参考R语言差异检验:非参数检验