【问题标题】:How to add compact letter display to ggboxplot()?如何在 ggboxplot() 中添加紧凑型字母显示?
【发布时间】:2021-11-24 03:24:59
【问题描述】:

我正在尝试在我创建的箱线图中添加紧凑型字母显示,有没有机会将cldList() 函数与ggboxplot() 结合起来?

这是我的示例数据

library(FSA)
library(multcompView)
library(rcompanion)
library(ggplot2)
library(ggpubr)
library(tidyr)

df_list <- list(
  `1.3.A` = 
    tibble::tribble(
      ~Person, ~Height, ~Weight,
      "Alex",    175,     75,
      "Gerard",    110,     85,
      "Clyde",    120,     79
    ),
  `2.2.A` = 
    tibble::tribble(
      ~Person, ~Height, ~Weight,
      "Missy",    162,     55,
      "Britany",    111,     56,
      "Sussie",    192,     85
    ), 
  `1.1.B` = 
    tibble::tribble(
      ~Person, ~Height, ~Weight,
      "Luke",    177,     66,
      "Alex",    169,     69,
      "Haley",    145,     54
    )
)


lapply(df_list, function(i) ggboxplot(i, x = "Person", y = c("Height", "Weight"), combine = TRUE))
lapply(df_list, function(k) dunnTest(Weight ~ as.factor(Person), method = "bh", data = k))
lapply(df_list, function(i) cldList(P.adj ~ Comparison, threshold = 0.05))

我正在尝试为每个 Person 添加重要字母,在我的原始数据中,我有 30 个组要比较,并且在箱线图中添加紧凑字母显示将使数据解释更加容易。

我在一个列表中也有多个数据框,想知道cldList() 是否可以包装在lapply() 函数中

希望有人能帮忙。

【问题讨论】:

  • 您应该将必要的library(...) 语句添加到您的代码中。我们不知道您在哪些软件包中找到了这些功能。
  • 感谢提醒,添加了必要的库。
  • 我现在可以运行它,但我不知道答案。也许这篇文章会有所帮助:stackoverflow.com/q/57737598/2554330?
  • 感谢您的帮助,您知道这行代码中的.group 是从哪里来的吗? geom_text(aes(label = gsub(" ", "", .group))我真的不知道它是从哪里来的,因为它也出现在这个例子中schmidtpaul.github.io/DSFAIR/compactletterdisplay.html
  • .group 列由multcomp::cld 添加到mod_means。它包含指定分组的字母,但与空格混合,因此gsub()用于删除所有空格。

标签: r function ggplot2 lapply


【解决方案1】:

我是example you already mentioned in a comment 的作者。其中一位评论者已经正确指出了.group 专栏的来源。但是,当指出您的代码与示例中的代码之间的一般差异时,我发现

  1. 数据

    1a。您的数据在每个因子水平 (=Person) 有 1 个观察值。

    1b。我的数据在每个因子水平(=组)有多个观察值。

  2. 均值比较

    2a。您使用FSA::Dunntest 拟合模型并立即比较每个因子水平的均值。

    2b。我使用lm() 确定模型,然后使用emmeans::emmeans() 比较每个因子水平的均值。

  3. 紧凑型字母展示

    3a。你使用rcompanion::cldList() 来获取这些字母。

    3b。我使用multcomp::cld() 来获取这些字母。

我认为第 2 点和第 3 点完全没问题 - 只是不同的功能导致了相同的目标。我在我的数据上尝试了你的方法,它奏效了:

dunnTest_out <- FSA::dunnTest(weight ~ as.factor(group), method = "bh", data = PlantGrowth)
rcompanion::cldList(P.adj ~ Comparison, data = dunnTest_out$res, threshold = 0.05)
#>   Group Letter MonoLetter
#> 1  ctrl     ab         ab
#> 2  trt1      a         a 
#> 3  trt2      b          b

但是,您的数据对我来说似乎不正确。如果您的“均值”实际上不是均值,而是单个值,则您不应该相互比较“均值”,甚至无法执行测试(其结果可以通过紧凑型字母显示显示)。

我将您的示例简化为其中一个数据集:

dat_1.1.B <- 
  tibble::tribble(
    ~Person, ~Height, ~Weight,
    "Luke",    177,     66,
    "Alex",    169,     69,
    "Haley",    145,    54
  )

dunnTest_out <- FSA::dunnTest(Weight ~ as.factor(Person), method = "bh", data = dat_1.1.B)
dunnTest_out
#> Dunn (1964) Kruskal-Wallis multiple comparison
#>   p-values adjusted with the Benjamini-Hochberg method.
#>     Comparison          Z   P.unadj     P.adj
#> 1 Alex - Haley  1.4142136 0.1572992 0.4718976
#> 2  Alex - Luke  0.7071068 0.4795001 0.4795001
#> 3 Haley - Luke -0.7071068 0.4795001 0.7192502

rcompanion::cldList(P.adj ~ Comparison, data = dunnTest_out$res, threshold = 0.05)
#> Error: No significant differences.

请注意,当我将 Weight 值之一更改为更大的数字但 p 值根本没有变化时,很明显有些东西无法正常工作。

dat_1.1.B <- 
  tibble::tribble(
    ~Person, ~Height, ~Weight,
    "Luke",    177,     66,
    "Alex",    169,     100000069,
    "Haley",    145,     54
  )

dunnTest_out <- FSA::dunnTest(Weight ~ as.factor(Person), method = "bh", data = dat_1.1.B)
dunnTest_out
#> Dunn (1964) Kruskal-Wallis multiple comparison
#>   p-values adjusted with the Benjamini-Hochberg method.
#>     Comparison          Z   P.unadj     P.adj
#> 1 Alex - Haley  1.4142136 0.1572992 0.4718976
#> 2  Alex - Luke  0.7071068 0.4795001 0.4795001
#> 3 Haley - Luke -0.7071068 0.4795001 0.7192502

rcompanion::cldList(P.adj ~ Comparison, data = dunnTest_out$res, threshold = 0.05)
#> Error: No significant differences.

所以是的,我认为是数据。请注意,错误“没有显着差异”对我来说也很奇怪,因为假设测试正确完成,没有显着差异只是意味着所有值都得到相同的字母。

tl;dr:数据就是问题所在。如果您的“均值”只是每组的单个值,则您无法通过测试比较均值。如果您拥有用于获取每组单个值的原始数据,则应改为将其输入模型 - 如在我的示例以及?FSA::Dunntest?rcompanion::cldList() 的示例中完成。

【讨论】:

  • 嗨@Paul,非常感谢您对此进行调查,实际上我可以使用cldList() 功能创建紧凑型字母显示列表,但是它只向某些组提供字母。顺便说一句,非常感谢您给出非常清晰的解释。我注意到你评论了我的另一个问题(在这里)[stackoverflow.com/questions/69482320/…,我希望你能再看一遍
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
相关资源
最近更新 更多