1. 前言
在往期内容中,我已经和大家讲解了t检验和方差分析(ANOVA)在R语言中如何实现,这里需要注意:使用t检验和方差分析时,需要样本服从正态分布,并且方差齐性,或者经过变量变换后服从正态分布和方差齐性。但是如果我们的数据无论经过怎样的变量变换都达不到正态分布或方差齐性的要求,那么我们就需要使用基于秩次的非参数假设检验,非参数检验主要针对非正态样本,其统计效力会比带参数的假设检验要弱一些。
R语言里提供了许多可以进行非参数假设检验的函数,这里我们主要介绍三个常用的函数,一个是基于秩次的Wilcox秩和检验, Kruskal Wallis秩和检验和Friedman秩和检验。
在这里我还将会以鸢尾花(iris)数据集为例和大家详细讲解使用方法。不过请大家注意,我只是展示如何使用基于秩次的非参数假设检验,这里的鸢尾花数据可能更适合用参数检验的方法。
2. 构建数据集并检验数据的正态性
代码语言:javascript复制#建立相关数据集
setosa <- iris[which(iris$Species=='setosa'),] #提取setosa类的鸢尾花
versicolor <- iris[which(iris$Species=='versicolor'),] #提取versicolor类的鸢尾花
mydata <- rbind(setosa,versicolor) #按行合并数据集
#正态性检验
shapiro.test(mydata$Sepal.Length[which(mydata$Species=='setosa')])#d对“setosa”的花萼长度进行正态性检验
shapiro.test(mydata$Sepal.Length[which(mydata$Species=='versicolor')])#对“versicolor”的花萼长度进行正态性检验
检验结果显示,p-value均大于0.05,说明两组数据均符合正态分布,应该使用参数检验,但是为了方便,我这里还会将这组数据用于非参数检验。从上面的讲解中,我想大家也应该能明白,当你使用非参数假设检验时一定要看看数据是否服从正态分布!
3. 基于秩次的非参数假设检验
代码语言:javascript复制# 独立双样本Wilcox秩和检验
wilcox.test(y~A) # y是数值型向量,A是二分类变量
wilcox.test(mydata$Sepal.Length~mydata$Species) #检验不同鸢尾花花萼长度差异
代码语言:javascript复制# 独立双样本Wilcox秩和检验
wilcox.test(y,x) # y与x均是数值型向量
wilcox.test(setosa$Sepal.Length, versicolor$Sepal.Length) #检验不同鸢尾花花萼长度差异
从上面的结果可以看出,即使使用Wilcox秩和检验,这两种鸢尾花的花萼长度还是有较大差异的,这和t检验的结果一致。其实,一般差异比较明显的数据,使用参数检验和非参数检验的结果不会有很大的变化,但是对于一些边际值,我们在进行统计检验和做出结论时需要非常非常慎重!
代码语言:javascript复制# 配对Wilcox秩和检验
wilcox.test(y1,y2,paired=TRUE) # y1与y2均是数值型向量
# 完全随机设计多个样本的Kruskal Wallis秩和检验
# 使用airquality数据集检验臭氧浓度和月份的关系
# 使用?airquality了解详情
kruskal.test(y ~ A) # y是数值型向量,A是多分类变量(分类数>2)
kruskal.test(Ozone ~ Month,data = airquality) # 检验臭氧浓度和月份的关系
从结果可以看出,臭氧浓度在不同月份间存在着差异(p-value < 0.05)。
代码语言:javascript复制# 随机区组设计的Friedman秩和检验
friedman.test(y~A|B)# y是数值型向量(检测量),A 代表处理组,B代表区组
下图是一个随机区组设计的Friedman秩和检验数据表,有兴趣的朋友可以将数据制成表格,在R中进行计算,我在这里就不演示了。
对于wilcox.test()函数,你可以通过alternative=参数来指定单侧检验。
上面就是关于如何在R中进行非参数检验的方法,主要有三个函数:(1)独立双样本或配对样本的wilcox.test();(2)完全随机设计多个样本的Kruskal Wallis秩和检验kruskal.test();(3)随机区组设计的Friedman秩和检验 friedman.test()。
这一期关于非参数假设检验的内容就分享到这里,咱们下期再见!