R语言入门之非参数假设检验
1. 前言
在往期内容中,我已经和大家讲解了t检验和方差分析(ANOVA)在R语言中如何实现,这里需要注意:使用t检验和方差分析时,需要样本服从正态分布,并且方差齐性,或者经过变量变换后服从正态分布和方差齐性。但是如果我们的数据无论经过怎样的变量变换都达不到正态分布或方差齐性的要求,那么我们就需要使用基于秩次的非参数假设检验,非参数检验主要针对非正态样本,其统计效力会比带参数的假设检验要弱一些。
R语言里提供了许多可以进行非参数假设检验的函数,这里我们主要介绍三个常用的函数,一个是基于秩次的Wilcox秩和检验, Kruskal Wallis秩和检验和Friedman秩和检验。
在这里我还将会以鸢尾花(iris)数据集为例和大家详细讲解使用方法。不过请大家注意,我只是展示如何使用基于秩次的非参数假设检验,这里的鸢尾花数据可能更适合用参数检验的方法。
2. 构建数据集并检验数据的正态性
#建立相关数据集
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. 基于秩次的非参数假设检验
# 独立双样本Wilcox秩和检验
wilcox.test(y~A) # y是数值型向量,A是二分类变量
wilcox.test(mydata$Sepal.Length~mydata$Species) #检验不同鸢尾花花萼长度差异
# 独立双样本Wilcox秩和检验
wilcox.test(y,x) # y与x均是数值型向量
wilcox.test(setosa$Sepal.Length, versicolor$Sepal.Length) #检验不同鸢尾花花萼长度差异
从上面的结果可以看出,即使使用Wilcox秩和检验,这两种鸢尾花的花萼长度还是有较大差异的,这和t检验的结果一致。其实,一般差异比较明显的数据,使用参数检验和非参数检验的结果不会有很大的变化,但是对于一些边际值,我们在进行统计检验和做出结论时需要非常非常慎重!
# 配对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)。
# 随机区组设计的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()。
这一期关于非参数假设检验的内容就分享到这里,咱们下期再见!
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(4)创建多维钻取分析
- silverlight:RadMaskedTextBox设置MaskType="Numeric"及Mask="n"时的一个bug
- 微信里面最神秘的功能,你知道吗?
- 以大数据之名,变身!——In big data we trust
- 90%家长都不知道关于少儿编程的这些疑题!
- 常用SQL语句和语法汇总
- Python学习笔记1——斐波那契数列
- 视觉传感器几大技术要点详解!
- Spark之搜狗日志查询实战
- 区块链与数字货币是什么关系呢?
- 保存数据到MySql数据库——我用scrapy写爬虫(二)
- 人工智能将取代人类?危机亦或是新的机遇
- 大数据驱动的未来网络:体系架构与应用场景(下)网络架构与场景详解
- 冷静点,NVIDIA 禁止 Geforce 进数据中心想限制的并不是深度学习
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android基于腾讯云实时音视频仿微信视频通话最小化悬浮
- Android自定义View之RadioGroup实现跨多行显示
- Android RadioGroup多行显示效果 解决单选问题
- RadioGroup实现单选框的多行排列
- Android实现悬浮窗全系统版本
- Android基础控件RadioGroup使用方法详解
- Android采用消息推送实现类似微信视频接听
- Android BottomSheet实现可拉伸控件
- Android自定义RecyclerView实现不固定刻度的刻度尺
- Android RIL使用详解
- 详解Android aidl的使用方法
- Android 进度条自动前进效果的实现代码
- Android 系统服务TelecomService启动过程原理分析
- Android圆角头像工具类详解
- Android实现系统消息推送