首页 > 解决方案 > R中的克鲁斯卡尔瓦利斯

问题描述

我曾尝试执行 Kruskal-Wallis 检验,但我不确定数据是否正确排序,因此,我不知道结果是否正确。

我仍然不知道如何验证它是否正确,不知道您是否可以帮助我识别错误。

谢谢你。

数据:
有13个样本和138个观测值,按月划分。

             ï..meses fajerae
            1     ene-15       0
            2     ene-15       1
            3     ene-15       0
            4     ene-15       0
            5     ene-15       0
            6     ene-15       0
            7     ene-15       1
            8     ene-15       1
            9     ene-15       0
            10    ene-15       1
            11    feb-15       0
            12    feb-15       0
            13    feb-15       0
            14    feb-15       1
            15    feb-15       0
            16    feb-15       1
            17    feb-15       1
            18    feb-15       0
            19    feb-15       0
            20    feb-15       3
            21    feb-15       2
            22    feb-15       2
            23    feb-15       0
            24    feb-15       0
            25    feb-15       1
            26    mar-15       1
            27    mar-15       0
            28    mar-15       3
            29    mar-15       3
            30    mar-15       1
            31    mar-15       4
            32    mar-15       2
            33    mar-15       5
            34    mar-15       0
            35    mar-15       1

在这里,我进行 Kruskal-Wallis 检验。

#kruskal-wallis test
  
setwd("~/")

datos <- read.csv(file.choose(), header = TRUE)
datos


#estructura de los datos
str(datos)
attach(datos)
names(datos)
class(datos)
factor(datos)

在这里它不识别级别,结果为空,我希望它显示月份,ene-15、Feb-15、Mar-15、Nov-15 等。

levels(datos$ï..meses)

但在表中,它是正确的。

table(datos$ï..meses)

    abr-17 dic-15 dic-16 dic-17 ene-15 ene-16 ene-17 ene-18 feb-15 feb-16 mar-15 
        10     10     10     12     10     10     13     20     15      2     10 
    mar-17 nov-15 
         4     12

我做了同方差性检验

# Homocedasticidad: la varianza debe de ser constante entre todos los grupos.
 
 leveneTest(fajerae ~ ï..meses, data = matriz, center = "median")
 
 #Results#
 Levene's Test for Homogeneity of Variance (center = "median")
       Df F value  Pr(>F)  
  group  12  1.8447 0.04784 *
        125                  
  ---
 Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
  Warning message:
  In leveneTest.default(y = y, group = group, ...) : group coerced to factor.

还有 Kruskal-Wallis 测试,它给了我一个结果,但我不知道如何检查它是否正确。

    kruskal.test(fajerae ~ ï..meses, data = matriz)

#Results# 
Kruskal-Wallis rank sum test
data:  fajerae by ï..meses 
Kruskal-Wallis chi-squared = 24.493, df = 12, p-value = 0.01742

标签: rstatisticsdifferencestatistical-testkruskal-wallis

解决方案


问题中的代码可以简化。

1.加载您要使用的非基础包。

library(car)

2.检查您的数据结构str

str(datos)
#'data.frame':  35 obs. of  2 variables:
# $ ï..meses  : chr  "ene-15" "ene-15" "ene-15" "ene-15" ...
# $ fajerae   : int  0 1 0 0 0 0 1 1 0 1 ...

那个名字,,ï..meses是相当丑陋的,它的口音和废话点,使它更漂亮。

names(datos)[1] <- "meses"

str你的输出知道那meses是类的"character",所以下一条指令预计会返回NULL

levels(datos$meses)
#NULL

但如果你想要一个因素,那就简单了

datos$meses <- factor(datos$meses)

3的分布meses

table(datos$meses)
#
#ene-15 feb-15 mar-15 
#    10     15     10 

4.通过 的组确定同方差性meses

leveneTest(fajerae ~ meses, data = datos, center = "median")
#Levene's Test for Homogeneity of Variance (center = "median")
#      Df F value  Pr(>F)  
#group  2  3.4584 0.04367 *
#      32                  
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

5.最后,Kuskall-Wallis 检验。

如果您要确定各组是否具有相同的中位数,为什么不先检查盒须图呢?查看您的数据

boxplot(fajerae ~ meses, data = datos)

在此处输入图像描述

这些组似乎有不同的位置,通过非参数测试确认。

kruskal.test(fajerae ~ meses, data = datos)
#
#   Kruskal-Wallis rank sum test
#
#data:  fajerae by meses
#Kruskal-Wallis chi-squared = 6.8633, df = 2, p-value = 0.03233
#

你问测试是否正确。是的,从某种意义上说,多年来无数用户对基本 R 函数进行了良好的编码和无数次的测试。这是否是预期的,是一个不同的问题,只有你才能回答。

dput格式的数据。

datos <-
structure(list(meses = c("ene-15", "ene-15", "ene-15", "ene-15", 
"ene-15", "ene-15", "ene-15", "ene-15", "ene-15", "ene-15", "feb-15", 
"feb-15", "feb-15", "feb-15", "feb-15", "feb-15", "feb-15", "feb-15", 
"feb-15", "feb-15", "feb-15", "feb-15", "feb-15", "feb-15", "feb-15", 
"mar-15", "mar-15", "mar-15", "mar-15", "mar-15", "mar-15", "mar-15", 
"mar-15", "mar-15", "mar-15"), fajerae = c(0L, 1L, 0L, 0L, 0L, 
0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 3L, 2L, 
2L, 0L, 0L, 1L, 1L, 0L, 3L, 3L, 1L, 4L, 2L, 5L, 0L, 1L)), 
class = "data.frame", row.names = c("1", "2", "3", "4", "5", 
"6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", 
"18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", 
"29", "30", "31", "32", "33", "34", "35"))

推荐阅读