【问题标题】:not enough 'x' or 'y' observations in ggplot2 for t-tests or wilcoxon testggplot2 中没有足够的 \'x\' 或 \'y\' 观察结果用于 t 检验或 wilcoxon 检验
【发布时间】:2022-11-01 22:30:02
【问题描述】:

我可以在没有警告的情况下对数据运行 t 检验或 Wilcoxon 检验,但是当我尝试使用 ggpubr 的函数 stat_pvalue_manual()ggplot2 中绘图时出现错误

  • t 检验工作正常:
### runing a t-test (no problem):

t.test(data$SUJ_PRE ~ AMOSTRA, data = data, exact = F)

  • 但我收到stat_pvalue_manual 中的错误:
### trying to plot it: 

data %>%
  ggplot(., aes(x = AMOSTRA, y = SUJ_PRE)) +
  stat_boxplot(geom = "errorbar",
               width = 0.15) +
  geom_boxplot(aes(fill = AMOSTRA), outlier.colour = "#9370DB", outlier.shape = 19,
               outlier.size= 2, notch = T) +
  scale_fill_manual(values = c("PB" = "#E6E6FA", "PE" = "#CCCCFF"), 
                    label = c("PB" = "PB", "PE" = "PE"),
                    name = "Amostra:") +
  stat_summary(fun = mean, geom = "point", shape = 20, size= 5, color= "#9370DB") + 
  stat_pvalue_manual(data %>%
                       t_test(SUJ_PRE ~ AMOSTRA) %>%
                       add_xy_position(),
                     label = "t = {round(statistic, 2)}, p = {p}") 

Error in `mutate()`:
! Problem while computing `data = map(.data$data, .f, ...)`.
Caused by error in `t.test.default()`:
! not enough 'x' observations
  • 使用 SUJ_PRE 我收到了 'x' 的错误,但我也收到了带有另一个变量的 'y' 消息。对此有什么想法吗?我似乎有一些similar 的问题,但我无法解决我的问题。提前致谢。

  • 数据:

> dput(data)
structure(list(ID = c("COPA_M1B", "COPA_M1C", "COPA_M2B", "COPA_M2C", 
"COPA_M3C", "COPA_M3A", "COPA_M3B", "COPA_H1A", "COPA_H1B", "COPA_H2A", 
"COPA_H2B", "COPA_H2C", "COPA_H3A", "COPA_H3B", "NI_M1B", "NI_M1C", 
"NI_M2A", "NI_M2B", "NI_M3C", "NI_M3A", "NI_M3B", "NI_H1A", "NI_H1B", 
"NI_H1C", "NI_H2B", "NI_H2C", "NI_H3A", "NI_H3C", "CACEM_M1A", 
"CACEM_M1B", "CACEM_M1C", "CACEM_M2B", "CACEM_M3B", "CACEM_H1B", 
"CACEM_H1C", "CACEM_H2A", "CACEM_H2C", "OEIRAS_M1B", "OEIRAS_M1C", 
"OEIRAS_M2B", "OEIRAS_M3B", "OEIRAS_M3C", "OEIRAS_H1B"), SUJ_PRE = c(25, 
40, 56, 49, 47, 38, 58, 38, 42, 71, 43, 46, 74, 43, 45, 35, 70, 
33, 45, 53, 50, 59, 62, 41, 35, 43, 40, 21, 23, 33, 35, 21, 36, 
15, 31, 19, 31, 20, 22, 20, 19, 21, 25), AMOSTRA = structure(c(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, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("PB", "PE"
), class = "factor")), class = c("grouped_df", "tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -43L), groups = structure(list(
    ID = c("CACEM_H1B", "CACEM_H1C", "CACEM_H2A", "CACEM_H2C", 
    "CACEM_M1A", "CACEM_M1B", "CACEM_M1C", "CACEM_M2B", "CACEM_M3B", 
    "COPA_H1A", "COPA_H1B", "COPA_H2A", "COPA_H2B", "COPA_H2C", 
    "COPA_H3A", "COPA_H3B", "COPA_M1B", "COPA_M1C", "COPA_M2B", 
    "COPA_M2C", "COPA_M3A", "COPA_M3B", "COPA_M3C", "NI_H1A", 
    "NI_H1B", "NI_H1C", "NI_H2B", "NI_H2C", "NI_H3A", "NI_H3C", 
    "NI_M1B", "NI_M1C", "NI_M2A", "NI_M2B", "NI_M3A", "NI_M3B", 
    "NI_M3C", "OEIRAS_H1B", "OEIRAS_M1B", "OEIRAS_M1C", "OEIRAS_M2B", 
    "OEIRAS_M3B", "OEIRAS_M3C"), .rows = structure(list(34L, 
        35L, 36L, 37L, 29L, 30L, 31L, 32L, 33L, 8L, 9L, 10L, 
        11L, 12L, 13L, 14L, 1L, 2L, 3L, 4L, 6L, 7L, 5L, 22L, 
        23L, 24L, 25L, 26L, 27L, 28L, 15L, 16L, 17L, 18L, 20L, 
        21L, 19L, 43L, 38L, 39L, 40L, 41L, 42L), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), row.names = c(NA, -43L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE))

【问题讨论】:

  • 我认为这是一个最小的可重现示例:rstatix::t_test(SUJ_PRE ~ AMOSTRA, data = data)

标签: r ggplot2 t-test


【解决方案1】:

您的数据框按 ID 分组,rstatisx::t_test 将遵循数据框中的分组。这意味着某些组只有一个成员,这当然会导致错误。

解决方案是在stat_pvalue_manual 中使用您的数据框时简单地ungroup

data %>%
  ggplot(aes(x = AMOSTRA, y = SUJ_PRE)) +
  stat_boxplot(geom = "errorbar",
               width = 0.15) +
  geom_boxplot(aes(fill = AMOSTRA), outlier.colour = "#9370DB", 
               outlier.shape = 19,
               outlier.size= 2, notch = T) +
  scale_fill_manual(values = c("PB" = "#E6E6FA", "PE" = "#CCCCFF"), 
                    label = c("PB" = "PB", "PE" = "PE"),
                    name = "Amostra:") +
  stat_summary(fun = mean, geom = "point", shape = 20, size= 5, 
               color = "#9370DB") + 
  stat_pvalue_manual(data %>% ungroup() %>%
                       t_test(SUJ_PRE ~ AMOSTRA) %>%
                       add_xy_position(),
                     label = "t = {round(statistic, 2)}, p = {p}") 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 2020-10-18
    相关资源
    最近更新 更多