以往进行置换检验可能需要编程,但在R语言中利用coin包和lmPerm可方便的进行这项工作。我们来构造两组数据来说明T检验、wilcox检验和置换检验的区别。
score=c(40,57,45,55,58,57,64,55,62,65)
treatment=factor(c(rep("A",5),rep("B",5)))
mydata=data.frame(treatment,score)
library(lattice)
stripplot(treatment~score,data=mydata)
从上面的图形可以看到两组数据有差别,但这种差别是否显著呢,用三种方法分别来看一下P值,注意本例的置换检验函数是coin包中的oneway_test
可见T检验的P值为0.047,wilcox检验P值为0.09,而置换检验P值为0.07,由于样本数量只有十个,所以更倾向于相信置换检验。library(coin)
t.test(score~treatment,data=mydata,var.equal=T)
wilcox.test(score~treatment,data=mydata)
oneway_test(score~treatment,data=mydata,distribution='exact')
我们也可以对多组数据进行比较,还是利用multcomp包中的cholesterol数据集,首先绘图进行观察,然后分别用传统的方差分析函数aov,非参数的kruskal检验和lmPerm包中的置换检验函数aovp获得P值。
library(multcomp)
stripplot(trt~response,data=cholesterol)
summary(aov(response~trt,data=cholesterol))
kruskal.test(trt~response,data=cholesterol)
library(lmPerm)
summary(aovp(response~trt,data=cholesterol))
在这个例子中,因为样本数据表现良好,所以参数检验和置换检验所得结论相近,P值都非常小而拒绝原假设。但非参数检验的信息利用不足,导致检验效能降低,无法检验出这种差别的存在。
从R语言实战上抄的,真nb
回复删除