参考资料:R语言实战【第2版】
如果数据无法满足t检验或ANOVA的参数假设,可以转而使用非参数检验。举例来说,若结果变量在本质上就严重偏倚或呈现有序关系,那么可以考虑非参数检验。
1、两组的比较
若两组数据独立,可以使用Wilcoxon秩和检验(这里也可以称为Mann-Whitney U检验)来评估观测是否是从相同的概率分布中抽得的(即,在一个总体中获得更高得分的概率是否比另一个总体要打)。调用格式为:
wilcox.test(y~x,data)
其中,y是数值型变量,而x是一个二分变量。调用格式也可以是:
wilcox.test(y1,y2)
其中,y1和y2为各组的结果变量。可选参数的取值为一个包含了这些变量的矩阵或数据框。默认进行一个双侧检验。我们可以通过添加参数exact来进行精确检验,指定alternative="less"或alternative="greater"进行有方向的检验。
# 加载MASS包
library(MASS)
# 查看UScrime的数据分布
with(UScrime,by(Prob,So,median))
# 对数据进行非参数检验
wilcox.test(Prob~So,UScrime)
y1<-UScrime[UScrime$So==0,"Prob"]
y2<-UScrime[UScrime$So==1,"Prob"]
wilcox.test(y1,y2)
本例结论:拒绝原假设,即南方各州和非南方各州监禁率不同。
Wilcoxon符号秩和检验(不同于上面提到的Mann-Whitney U检验)是非独立样本t检验的一种非参数替代方案。它适用于两组成对数据和无法保证正态性假设的情景。调用格式与Mann-Whitney U检验完全相同,不过还需要添加一个参数paired=TURE。
# 查看数据
sapply(UScrime[c("U1","U2")],median)
# wilcoxon秩和检验
with(UScrime,
wilcox.test(U1,U2,paired=TRUE))
当t检验的假设合理时,参数检验功效更强(更容易发现存在的差异),而非参数检验在假设非常不合理时(如对于等级有序数据)更适用。
2、多于两组的比较
如果无法满足ANOVA设计的假设,那么可以使用非参数方法来评估组间的差异。如果各组独立,则Kruskal-Wallis检验将是一种实用的方法。如果各组不独立(如重复测量设计或随机区组设计),那么Friedman检验会更合适。
Kruskal-Wallis检验的调用格式为:
kruskal.test(y~A,data)
其中,y是一个数值型结果变量,A是一个拥有两个或更多水平的分组变量(grouping variable)。(若有两个水平,则它与Mann-Whitney U检验等价)。
Friedman检验的调用格式为:
friedman.test(y~A | B,data)
其中,y是数值型结果变量,A是一个分组变量,而B是一个用以认定匹配观测的区组变量(blocking variable)。在以上两个调用格式中,data皆是可选参数,它指定了包含这些变量的矩阵或数据框。
# 调用R自带的state.x77数据集
states<-data.frame(state.region,state.x77)
# kruskal-wallis检验
kruskal.test(Illiteracy~state.region,data=states)
本例结论:美国的四个区域的文盲率存在明显的不同。虽然我们已经知道存在显著差异,但这个检验并没有告诉我们哪些区域显著地与其他地区不同。要回答这个问题,我们可以使用Wilcoxon检验,每次比较两组数据。但另一种更好的方法是在控制犯第一类错误的概率(发现一个事实上并不存在的差异的概率)的前提下,执行可以同步进行的多组比较,这样可以直接完成所有组之间的成对比较。