Wilcoxon 对重度关联数据的秩检验

Posted

技术标签:

【中文标题】Wilcoxon 对重度关联数据的秩检验【英文标题】:Wilcoxon signed rank test for heavily tied data 【发布时间】:2021-05-08 19:34:26 【问题描述】:

我在对高度相关的数据进行 Wilcoxon 检验分析时遇到了问题。我已经尽我所能在下面概述了我的问题,我是如何尝试解决它的,以及我遇到的问题。如果有人能给我任何建议,我将不胜感激。

我的问题 我正在处理一个数据集,我需要在用于分组分配的度量上比较三个组。当我运行单向方差分析时,既不满足(1) 残差正态性假设,也不满足(2) 残差方差同质性假设。

因此,我使用 Wilcoxon 检验在 r 中使用以下代码进行成对比较(一个比较示例,默认为两侧备择假设):

测量〜组,数据= myreduceddataset,na.rm=TRUE,paired=FALSE,exact=TRUE,conf.int=TRUE

但是,(screenshot of example here) 我的分析输出看起来很奇怪,并且每次比较都放弃了错误(下面复制了一个示例):

警告信息: 1:在 wilcox.test.default(x = c(2, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, : 无法计算带关系的精确 p 值 2:在 wilcox.test.default(x = c(2, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, : 无法计算带关系的准确置信区间

检查数据然后我检查了数据并查看了数据在 R 中的排名以试图找出错误。似乎,虽然自始至终都有一些并列的排名,但主要问题是第 1 组中 0 值的数量here is some example raw and ranked data by group

我找到的解决方案,以及由此引发的问题通过阅读,似乎解决方案可能是使用 R 中“Coin”包中的测试。

我试了一下,here is an example of my output。但是,我仍然不完全清楚这是否正确,并且我在下面概述了一些我仍然存在的问题。

    我不确定渐近检验或精确检验是否更适合此数据集(输出似乎相同) 我假设我应该使用 coin::wilcox_test() 而不是 coin::wilcoxsign_test(),因为我正在比较来自独立组的样本。这是正确的吗? 如果我理解正确,“Z”值就是效果大小。如何推导出 W 统计量?或者我可以只报告效果大小吗? 我不确定如何更正此输出以进行多重比较

如果有帮助,我会非常乐意提供更多详细信息。非常感谢。

更新:此处的模拟数据(相同的组均值和 SD):

structure(list(measure = c(9, 15, 6, 7, 8, 7, 12, 5, 14, 9, 7, 
13, 8, 14, 11, 16, 9, 7, 3, 8, 3, 21, 4, 3, 11, 13, 5, 7, 8, 
15, 5, 15, 3, 9, 5, 2, 8, 6, 1, 1, 7, 6, 9, 5, 6, 2, 6, 10, 6, 
6, 8, 6, 9, 8, 6, 2, 6, 2, 9, 5, 6, 4, 10, 7, 9, 8, 6, 4, 6, 
14, 1, 12, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0), group = structure(c(3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("1", "2", "3"
), class = "factor")), row.names = c(NA, -122L), class = "data.frame")

【问题讨论】:

“警告” 不是错误。请不要发布代码/数据/错误的图像:它不能被复制或搜索 (SEO),它会破坏屏幕阅读器,并且它可能不适合某些移动设备。参考:meta.***.com/a/285557(和xkcd.com/2116)。请直接包含代码、控制台输出或数据(例如,data.frame(...) 或来自dput(head(x)) 的输出)。 欢迎来到 SO,Zcjth84!这个问题可能不适合 ***。 (1) 没有代码,没有数据;它似乎更具概念性,在这种情况下Cross Validated 更适合讨论。您可能会在here(一些用户遍历这两个站点)获得评论/答案,但这并不能保证。 (2) 即使它停留在 SO 上,那么(再次)当这个站点是关于编程的时,这里几乎没有什么可做的。请就提问问题进行一些讨论好吧:***.com/q/5963269、minimal reproducible example 和 ***.com/tags/r/info。 感谢您的建议 - 我现在也将其添加到 Cross Validated 并将在未来发布问题。 【参考方案1】:

您需要的是 Kruskal-Wallis-Test。 ANOVA的非参数挂件。

编辑:

library(dplyr)
library((ggpubr)
# group as factor
df$group <- as.factor(df$group)
# check for levels
levels(df$group)
# summarise with dplyr
group_by(df, group) %>%
  summarise(
    count = n(),
    mean = mean(measure, na.rm = TRUE),
    sd = sd(measure, na.rm = TRUE),
    median = median(measure, na.rm = TRUE),
    IQR = IQR(measure, na.rm = TRUE)
  )
# Box Plot measure by group and color by group
library("ggpubr")
ggboxplot(df, x = "group", y = "measure", 
          color = "group", palette = c("#00AFBB", "#E7B800", "#FC4E07"),
          order = c("1", "2", "3"),
          ylab = "measure", xlab = "group")

# Mean Plot measure by group and color by group)
ggline(df, x = "group", y = "measure", 
       add = c("mean_se", "jitter"), 
       order = c("1", "2", "3"),
       ylab = "measure", xlab = "group")
# kruskal test
kruskal.test(measure ~ group, data = df)

## output   Kruskal-Wallis rank sum test

## data:  measure by group
## Kruskal-Wallis chi-squared = 92.593, df = 2, p-value < 2.2e-16

### interpretation: There is a significant difference in the group means of group 1,2,3



# pairwise comparisons between group levels
pairwise.wilcox.test(df$measure, df$group,
                     p.adjust.method = "bonferroni")

## output:  Pairwise comparisons using Wilcoxon rank sum test with continuity correction 

#data:  df$measure and df$group 

#   1       2    
#   2 4.2e-16 -    
#   3 6.9e-16 0.013

# interpretation: The difference is significant between each group

【讨论】:

非常感谢 Tarjae 的回答。我进行了 Wilcoxon 检验,因为我的组中的数据分布非常不同(第 1 组由于所有的 0 而呈正偏态,其他组相当正常)。在这种情况下,你还会推荐 Kruskall Wallis 吗? 非参数意味着分布并不重要。你正在测试等级。与那个关系也不是主要重要的。给我看看你的数据,我可以给你举个例子。我认为 Kruskal-Wallis 是您所需要的。 您好,再次感谢您的帮助。我模拟了一些类似的数据并将其添加到我的问题中。让我知道其他格式是否更有帮助。

以上是关于Wilcoxon 对重度关联数据的秩检验的主要内容,如果未能解决你的问题,请参考以下文章

数据分析-非参数秩方法

数据分析-非参数秩方法

数据分析-非参数秩方法

我的SAS菜鸟之路5

R语言编写自定义函数使用Wilcoxon符号秩检验(Wilcoxon signed rank)实现多分组非参数成对检验(pairwise)并使用p.adjust函数调整概率值

python威氏符号秩次检验(Wilcoxon Signed-Rank Test)