【问题标题】:Multiple dunn tests on subsets of data对数据子集的多次邓恩测试
【发布时间】:2019-11-16 19:37:17
【问题描述】:

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

          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:

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 测试输出是一个列表,所以我认为这就是这种方法不起作用的原因:

dunn_results<-df %>%
        group_by(var1, var2) %>%
        summarise(p.value=dunn.test(d, grp)$p.value)

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

Error: column 'p.value' is of unsupportetd type NULL

【问题讨论】:

    标签: r iteration


    【解决方案1】:

    邓恩测试结构

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

    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
    

    不过,这应该可行:

    dunn_results <- df %>%
      group_by(var1, var2) %>%
      summarise(p.value = dunn.test(d, grp)$P)
    

    更新:额外的错误处理

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

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

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

    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))
    

    【讨论】:

    • 谢谢!当我尝试两种解决方案时,我得到一个错误,第一个解决方案给了我这个:Error: Column 'p.value' must be length 1 (a summary vlaue, not 105 第二个选项,我同意更好,因为完整的测试摘要信息更多,我得到了同样的错误。
    • @watermineporcupine 你说得对。我应该用你的分组进行测试。邓恩测试会产生错误,所以我们需要捕获它们。希望这也适用于您的完整数据集。相应地更新了帖子。
    • 谢谢!但我似乎仍然遇到同样的错误,这是否可能与dunn.test 输出多重比较表(以列表的形式)而不是 p 值向量这一事实有关?
    猜你喜欢
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 2012-06-02
    • 2020-09-13
    相关资源
    最近更新 更多