显示 Kruskal-Wallis 测试等级
Posted
技术标签:
【中文标题】显示 Kruskal-Wallis 测试等级【英文标题】:Show Kruskal-Wallis test ranks 【发布时间】:2015-05-03 00:41:52 【问题描述】:我对多重处理数据进行了 kruskal wallis 检验,比较了五种不同的方法。
朋友给我看了spss中的计算,结果包括了每种方法的平均排名。
在 R 中,将kruskal.test
应用于我的数据集时,我只得到chi2
和df value
和p-value
。这些值等于 spss 中的值,但我没有得到任何排名。
如何打印计算的等级? 我的代码如下所示:
comparison <- kruskal.test(all,V3,p.adj="bon",group=FALSE, main="over")
如果我打印比较,我会得到以下信息:
Kruskal-Wallis rank sum test
data: all
Kruskal-Wallis chi-squared = 131.4412, df = 4, p-value < 2.2e-16
但我想从 spss 获得类似这样的额外输出:
Type H Middle Rank
1,00 57 121.11
2,00 57 148.32
3,00 57 217.49
4,00 57 53.75
5,00 57 174.33
total 285
如何在 r 中完成这项工作?
【问题讨论】:
您可能对 Dunn 检验感兴趣,它是 Kruskal-Wallis 检验的事后检验。 R 中的dunn.test
。我不确定如何从kruskal.test
对象中获得中位数排名。对不起。
【参考方案1】:
不幸的是,您需要自己计算的表格。幸运的是我为你做了一个函数:
#create some random data
ozone <- airquality$Ozone
names(ozone) <- airquality$Month
spssOutput <- function(vector)
# This function takes your data as one long
# vector and ranks it. After that it computes
# the mean rank of each group. The groupes
# need to be given as names to the vector.
# the function returns a data frame with
# the results in SPSS style.
ma <- matrix(, ncol=3, nrow= 0)
r <- rank(vector, na.last = NA)
to <- 0
for(n in unique(names(r)))
# compute the rank mean for group n
g <- r[names(r) == n]
gt <- length(g)
rm <- sum(g)/gt
to <- to + gt
ma <- rbind(ma, c(n, gt, rm))
colnames(ma) <- c("Type","H","Middle Rank")
ma <- rbind(ma, c("total", to, ""))
as.data.frame(ma)
# calculate everything
out <- spssOutput(ozone)
print(out, row.names= FALSE)
kruskal.test(Ozone ~ Month, data = airquality)
这将为您提供以下输出:
Type H Middle Rank
5 26 36.6923076923077
6 9 48.7222222222222
7 26 77.9038461538462
8 26 75.2307692307692
9 29 48.6896551724138
total 116
Kruskal-Wallis rank sum test
data: Ozone by Month
Kruskal-Wallis chi-squared = 29.2666, df = 4, p-value = 6.901e-06
您尚未共享您的数据,因此您必须自己弄清楚这将如何适用于您的数据集。
【讨论】:
【参考方案2】:我有一个任务,我必须这样做。制作一个数据框,其中一列是您要排名的组合值,一列是每个值所属的类别,最后一列是每个值的排名。 rank() 函数是实际排名所需的函数。代码如下所示:
low <- c(0.56, 0.57, 0.58, 0.62, 0.64, 0.65, 0.67, 0.68, 0.74, 0.78, 0.85, 0.86)
medium <- c(0.70, 0.74, 0.75, 0.76, 0.78, 0.79, 0.80, 0.82, 0.83, 0.86)
high <- c(0.65, 0.73, 0.74, 0.76, 0.81,0.82, 0.85, 0.86, 0.88, 0.90)
data.value <- c(low, medium, high)
data.category <- c(rep("low", length(low)), rep("medium", length(medium)), rep("high", length(high)) )
data.rank <- rank(data.value)
data <- data.frame(data.value, data.category, data.rank)
data
data.value data.category data.rank
1 0.56 low 1.0
2 0.57 low 2.0
3 0.58 low 3.0
4 0.62 low 4.0
5 0.64 low 5.0
6 0.65 low 6.5
7 0.67 low 8.0
8 0.68 low 9.0
9 0.74 low 13.0
10 0.78 low 18.5
11 0.85 low 26.5
12 0.86 low 29.0
13 0.70 medium 10.0
14 0.74 medium 13.0
15 0.75 medium 15.0
16 0.76 medium 16.5
17 0.78 medium 18.5
18 0.79 medium 20.0
19 0.80 medium 21.0
20 0.82 medium 23.5
21 0.83 medium 25.0
22 0.86 medium 29.0
23 0.65 high 6.5
24 0.73 high 11.0
25 0.74 high 13.0
26 0.76 high 16.5
27 0.81 high 22.0
28 0.82 high 23.5
29 0.85 high 26.5
30 0.86 high 29.0
31 0.88 high 31.0
32 0.90 high 32.0
这将为您提供一个如下所示的表格。
【讨论】:
以上是关于显示 Kruskal-Wallis 测试等级的主要内容,如果未能解决你的问题,请参考以下文章
在进行 Kruskal-Wallis 之后,我应该进行哪些事后测试?
如何处理 Matlab 中 Kruskal-Wallis 测试中的缺失值?
R - stat_compare_means 从 Kruskal-Wallis 测试返回不同的值