之前投文章的时候被质疑所用的假设检验不合理。
所以,这边就是有一个整理各种非参数检验的大动作。
接下来,分别说一下。
非参数检验主要用在不符合正态分布的数据。
而且为啥叫非参数检验呢?因为没有对具体的参数进行检验(貌似是一句废话)。
因为参数检验一般是对两组或者多组数据的参数(总体的一些特征,如方差)进行检验。
而非参数检验就是直接用样本数据推算总体情况,故而木得参数。
非参数检验主要有三种:Wilcox秩和检验(两组), Kruskal Wallis秩和检验(多组)和Friedman秩和检验(区组)。
1、Wilcox秩和检验
两组数据的检验,可以在检验之前判断一下是否符合正态分布。
iris##R自带的数据
table(iris$Species)
setosa versicolor virginica
50 50 50
colnames(iris)##这个数据集包含以下几个信息
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
#可以用上述三组数据尝试理解基础理论。
#比较两组数据的萼片长度是否存在显著差异。
#检测萼片长度是否符合
library(lattice)
library(MASS)
##直方图检测
histogram(setosa$Sepal.Length)
##QQ图检测
qqnorm(setosa$Sepal.Length, main ="QQ for setosa")
qqline(setosa$Sepal.Length)
##shapiro.test检测是否符合,假设检验(H0)是符合正态分布。
##P<0.05拒绝原假设,P>0.05接受原假设
shapiro.test(setosa$Sepal.Length) #仅仅对setosa这个品种的萼片长度的分布进行估算
nortest <- with(iris, tapply(Sepal.Length, Species, shapiro.test))#对所有品种的萼片长度进行估算。
nortest
$setosa
Shapiro-Wilk normality test
data: X[[i]]
W = 0.9777, p-value = 0.4595
$versicolor
Shapiro-Wilk normality test
data: X[[i]]
W = 0.97784, p-value = 0.4647
$virginica
Shapiro-Wilk normality test
data: X[[i]]
W = 0.97118, p-value = 0.2583
好了,既然都符合,那就可以选择参数检验。
但是我们这里讲的是非参数检验,这里需要说明如果数据分布很规整,其实参数和非参数的差别不大。所以,继续非参数检验。
#两组比较
wilcox.test(subset(iris, Species=="setosa")$Sepal.Length, subset(iris, Species=="versicolor")$Sepal.Length )
Wilcoxon rank sum test with continuity correction
data: subset(iris, Species == "setosa")$Sepal.Length and subset(iris, Species == "versicolor")$Sepal.Length
W = 168.5, p-value = 8.346e-14
alternative hypothesis: true location shift is not equal to 0
#或者提取两个品种的数据。
setosa <- iris[which(iris$Species=='setosa'),] #提取setosa类
versicolor <- iris[which(iris$Species=='versicolor'),] #提取versicolor类
mydata <- rbind(setosa,versicolor) #按行合并数据集
wilcox.test(mydata$Sepal.Length~mydata$Species) #检验不同鸢尾花花萼长度差异
Wilcoxon rank sum test with continuity correction
data: mydata$Sepal.Length by mydata$Species
W = 168.5, p-value = 8.346e-14
alternative hypothesis: true location shift is not equal to 0
2、Kruskal Wallis秩和检验
完全随机设计多个样本的Kruskal Wallis秩和检验。
kruskal.test(y ~ A) # y是数值型向量,A是多分类变量(分类数>2)
kruskal.test(Sepal.Length ~ Species, data = iris) # 检验三个品种花萼长度差异
Kruskal-Wallis rank sum test
data: Sepal.Length by Species
Kruskal-Wallis chi-squared = 96.937, df = 2, p-value < 2.2e-16
3、Friedman秩和检验
针对随机区组设计的Friedman秩和检验 。
啥叫个随机区组实验?
这里加一句,我个人最讨厌名词解释,所谓名词解释就是用一段人类听不懂的话翻译一个人类听不同的词。所以最好的解释方法还是举栗子说明,简单直白。
这里就举个栗子,假如有三个(组)小鼠A、B和C。这三个小鼠的身体状况差别很大,A非常强壮,称得上是鼠界的金钟国(们);B一般,是普通的老鼠(们);C就非常的弱,就是鼠界的王鼻子(们)。然后对每只老鼠都进行多个处理,例如:缺氧处理、溺水处理、电击处理等等(为啥要处理的这么残忍???),查看小鼠的血管扩张程度(即检测值)。
这样做有个什么好处?可以消除(减弱)区组间误差值。即避免金钟国(们)和王鼻子(们)本身的差别。
想要知道,不同组在不同处理之后,是否存在显著差异,就用friedman.test。
friedman.test(y~A|B)# y是检测量(数值型向量), A 代表处理组,B代表区组 。
网友评论