参考资料:R语言实战【第2版】
置换检验并不是将统计量与理论分布进行比较,而是将其与置换观测数据后获得的经验分布进行比较,根据统计量的极端性判断是否有足够的理由拒绝零假设。
经验分布依据的是数据所有可能的排列组合。此时的置换检验称作“精确”检验。随着样本量的增加,获取所有可能排列的时间开销会非常大。这种情况下,我们可以使用蒙特卡洛模拟,从所有可能的排列中进行抽样,获得一个近似的检验。
如果我们觉得鉴定数据成正态分布并不合适,或者担心离群点的影响,或者感觉对于标准的参数检验方法来说数据集太小,那么置换检验便提供了一个非常不错的选择。
注意:置换检验都是使用伪随机数来从所有可能的排列组合中进行抽样的(当作近似检验)。因此,每次检验的结果都有所不同。如果设置了随机种子,则结果就可以复现。
coin包
coin包对于独立性问题提供了一个非常全面的置换检验框架。首次使用需要进行安装
intall.packages(c("coin"))
通过coin包,我们可以回答以下问题:
①响应值与组的分配独立吗?
②两个数值变量独立吗?
③两个类别变量独立吗?
相对于传统的参数或非参数检验,coin包中提供的置换检验函数如下:
检验 | coin函数 |
两个样本和K样本置换检验 | oneway_test(y~A) |
含一个分层(区组)因子的两样本和K样本置换检验 | oneway~test(y~A|C) |
Wilcoxon-Mann-Whitney秩和检验 | wilcox_test(y~A) |
Kruskal-Wallis检验 | kruskal_test(y~A) |
pearson卡方检验 | chisq_test(A~B) |
Cochran-Mantel-Haenszel检验 | cmh_test(A~B|C) |
线性关联检验 | lbl~test(D~E) |
Spearman检验 | spearman_test(y~x) |
Friedman检验 | friedman_test(y~A|C) |
Wilcoxon符号秩检验 | wilcoxsign_test(y1~y2) |
注:在coin函数中,y和x是数值变量,A和B是分类因子,C是类别型区组变量,D和E是有序因子,y1和y2是相匹配的数值变量。因此,在coin包中,类别型变量和序数变量分别转化为因子和有序因子,且数据要以数据框形式存储。
上表中的每个函数都是如下形式:
function_name(formula, data, distribution=)
其中,formula描述的是要检验变量间的关系,data是一个数据框,distribution指定经验分布在零假设条件下的形式,可能值有exact、asymptotic和approximate。
若distribution="exact",那么在零假设条件下,分布的计算时精确的(即依据所有可能的排列组合)。当然,也可以根据它的渐进分布(distribution="asymptotic")或蒙特卡洛重抽样(distribution="approximate(nresample=#)")来做近似计算,其中#指所需重复的次数。distribution="exact"当前仅可以用于两样本问题。