美文网首页
常见非参数检验

常见非参数检验

作者: 谢京合 | 来源:发表于2021-12-03 14:48 被阅读0次

    之前投文章的时候被质疑所用的假设检验不合理。
    所以,这边就是有一个整理各种非参数检验的大动作。

    接下来,分别说一下。
    非参数检验主要用在不符合正态分布的数据。
    而且为啥叫非参数检验呢?因为没有对具体的参数进行检验(貌似是一句废话)。
    因为参数检验一般是对两组或者多组数据的参数(总体的一些特征,如方差)进行检验。
    而非参数检验就是直接用样本数据推算总体情况,故而木得参数。

    非参数检验主要有三种: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代表区组 。

    相关文章

      网友评论

          本文标题:常见非参数检验

          本文链接:https://www.haomeiwen.com/subject/ervpxrtx.html