首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据子集上的多重dunn检验

数据子集上的多重dunn检验
EN

Stack Overflow用户
提问于 2019-11-17 03:37:17
回答 1查看 248关注 0票数 1

我想在我的数据上总共运行4个Dunn测试,在它的四个子集上,虚拟数据,其中grp是我用于dunn测试的分组:

代码语言:javascript
复制
          d      var1  var2 grp
-1.26431512      a      c   A
 1.28852253      b      d   A
-0.06951728      a      c   A
 0.21254560      b      c   Z
-0.20723889      b      d   Z
 0.02315806      b      d   Z

目前,我正在过滤每个变量,然后运行dunn.test:

代码语言:javascript
复制
a_c<-filter(df, var1 %in% "a", var2 %in% "c")
a_c_results<-dunn.test(df$d, g=df$grp, method="bh")

以此类推,对于这四个组合,a_c, a_d, b_c, b_d

我试过这段代码,因为它在我之前运行的Kruskal-Wallis测试上工作得很好,但是由于Dunn测试的输出是一个列表,所以我假设这就是为什么这种方法不起作用:

代码语言:javascript
复制
dunn_results<-df %>%
        group_by(var1, var2) %>%
        summarise(p.value=dunn.test(d, grp)$p.value)

我从上面的代码中得到了以下错误:

代码语言:javascript
复制
Error: column 'p.value' is of unsupportetd type NULL
EN

回答 1

Stack Overflow用户

发布于 2019-11-17 10:34:33

Dunn测试结构

你已经很接近了。问题不在于dunn.test返回一个列表--您处理得很正确。问题是该列表没有名为p.value.的成员

代码语言:javascript
复制
library(tidyverse)
library(dunn.test)

rslt <- dunn.test(df$d, df$grp)
str(rslt)
#> List of 5
#>  $ chi2       : num 0.0476
#>  $ Z          : num -0.218
#>  $ P          : num 0.414
#>  $ P.adjusted : num 0.414
#>  $ comparisons: chr "A - Z"
rslt$p.value
#> NULL

不过,这应该是可行的:

代码语言:javascript
复制
dunn_results <- df %>%
  group_by(var1, var2) %>%
  summarise(p.value = dunn.test(d, grp)$P)

更新:额外的错误处理

这还没有结束,因为dunn.test()可能会返回错误。在样本集中,有两个错误:

  1. “在x中观察太少。”对于第4行中的b-c组合。对于第1、3行中的a-c组合,
  2. “参数的长度为零”。

因此,我们需要将运行Dunn测试并提取P值向量的函数放入一个错误捕获函数中。对于Dunn测试作为摘要的p.value经历的任何错误,这将静默地返回NA。

代码语言:javascript
复制
dunn_test_wrapper <- function(x, y) {
  tryCatch(dunn.test(x, y)$P, error = function(cond) NA)
}

dunn_results<-df %>%
  group_by(var1, var2) %>%
  summarise(p.value = dunn_test_wrapper(d, grp))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58894484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档