置换检验--coin包(独立样本t检验、单因素精确检验、Wilcoxon秩和检验、K样本置换检验)


1 置换检验

置换方法和参数方法都计算了相同的t统计量。但置换方法并不是将统计量与理论分布进行比较,而是将其与置换观测数据后获得的经验分布进行比较,根据统计量值的极端性判断

是否有足够的理由拒绝零假设。

R目前有一些非常全面而复杂的软件包可以用来做置换检验。本节剩余部分将关注两个有用

的包:coinlmPerm包。coin包对于独立性问题提供了一个非常全面的置换检验的框架,而lmPerm包则专门用来做方差分析和回归分析的置换检验。

2 coin 包做置换检验

对于独立性问题,coin包提供了一个进行置换检验的一般性框架。通过该包,你可以回答

如下问题

q 响应值与组的分配独立吗?

q 两个数值变量独立吗?

q 两个类别型变量独立吗?

相对于传统检验,提供可选置换检验的coin函数

 

coin函数中,yx是数值变量,AB是分类因子,C是类别型区组变量,DE是有序因子,y1y2是相匹配的数值变量。

上表中列出来的每个函数都是如下形式:

function_name( formula, data, distribution= )

formula描述的是要检验变量间的关系; q

data是一个数据框;

distribution指定经验分布在零假设条件下的形式,可能值有exactasymptoticapproximate。若distribution="exact",那么在零假设条件下,分布的计算是精确的(即依据所有可能的排列组合)。当然,也可以根据它的渐进分布(distribution="asymptotic")或蒙特卡洛重抽样(distribution="approxiamate(B=#)")来做近似计算,其中#指所需重复的次数。distribution="exact"当前仅可用于两样本问题。

2.1 独立两样本和 K 样本检验

1)独立样本传统t检验

install.packages("coin")

library(coin)

score <- c(40, 57, 45, 55, 58, 57, 64, 55, 62, 65)  #生成10个向量

treatment <- factor(c(rep("A",5), rep("B",5)))  #函数 factor 用于将一个向量编码为一个因子

mydata <- data.frame(treatment, score)  #将上面向量和标签的组合成一个数据框

t.test(score~treatment, data=mydata, var.equal=TRUE)  

#t.test()对数据向量进行单样本和双样本t检验。var.equal是一个逻辑变量,表示是否将两个方差视为相等,如果是TRUE,则使用集合方差来估计方差,否则就使用Welch(或Satterthwaite)自由度的近似值。

 

2)单因素精确检验

oneway_test(score~treatment, data=mydata, distribution="exact")

#oneway_test()是两样本和K样本置换检验,若distribution="exact",那么在零假设条件下,分布的计算是精确的(即依据所有可能的排列组合)。

 

结果分析:传统t检验表明存在显著性差异(p<0.05),而精确检验却表明差异并不显著(p>0.072)。由于只有10个观测,可能更倾向于相信置换检验的结果,在做出最后结论之前,还要多收集些数据。

(3)Wilcoxon-Mann-Whitney U检验(Wilcoxon秩和检验)

本例子是检验美国南部监禁概率与非南部间的差异

library(MASS)

UScrime <- transform(UScrime, So = factor(So))

wilcox_test(Prob ~ So, data=UScrime, distribution="exact")

 

 结果分析:p-value值小于0.05,所以美国南部监禁概率与非南部监禁概率差异非常显著,即监禁在南部可能更多,数值变量So被转化为因子,因为coin包规定所有的类别型变量都必须以因子形式编码。

4K样本置换检验

library(multcomp)

set.seed(1234)  #设置随机种子,是为了可以让结果重现

oneway_test(response~trt, data=cholesterol,distribution=approximate(nresample=9999))

#response~trt是用来分析评价五种药物疗法对降低胆固醇的效果,蒙特卡洛重抽样(distribution="approxiamate(nresample=#)")来做近似计算,其中#指所需重复的次数

 

结果分析:p-value值小于0.05,即表明各组间病人的响应值显著不同。

2.2  数值变量间的独立性

spearman_test()函数提供了两数值变量的独立性置换检验。我们检验美国文

盲率与谋杀率间的相关性如下代码可进行相关性的置换检验:

states <- as.data.frame(state.x77)

set.seed(1234)

spearman_test(Illiteracy~Murder, data=states,distribution=approximate(nresample=9999))

 

结果分析:基于9999次重复的近似置换检验可知:独立性假设并不被满足。注意,state.x77是一个矩阵,在coin包中,必须将其转化为一个数据框。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM