You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ggplot2中stat_pvalue_manual执行t检验报错:观测值不足

解决ggpubr绘制统计检验p值时的观测值不足问题

核心排查方向

出现这类报错的本质是ggpubr的t_test()+add_xy_position()组合在处理分组数据时,部分子组的样本量不满足检验要求,或者参数匹配错误,以下是针对性解决步骤:


1. 先排查分组数据的样本量

单独运行t.test()没问题,但分组后可能存在某个子组里的PB/PE组样本量不足(比如某组只有1个观测或全为NA),直接导致检验失败。

# 检查每个分组子组内的有效样本量
data %>%
  group_by(你的分组列) %>%  # 替换为你实际的分组列名,比如Category
  summarise(
    PB有效样本 = sum(AMOSTRA == "PB" & !is.na(SUJ_PRE)),
    PE有效样本 = sum(AMOSTRA == "PE" & !is.na(SUJ_PRE))
  )

如果输出里有某组样本量<2,直接过滤掉这些子组:

filtered_data <- data %>%
  group_by(你的分组列) %>%
  filter(PB有效样本 >= 2, PE有效样本 >= 2) %>%
  ungroup()

2. 匹配t_test()和add_xy_position()的参数

ggpubr的t_test()参数逻辑和基础包t.test()略有差异,需明确指定与绘图一致的变量:

# 重新计算检验结果,同步基础包的exact=F设置,加上na.rm避免NA干扰
stat_test <- filtered_data %>%
  group_by(你的分组列) %>%
  t_test(SUJ_PRE ~ AMOSTRA, exact = F, na.rm = TRUE) %>%
  # 关键:x对应ggplot的x轴变量,facet.by对应你的分组列(如果用分面)
  add_xy_position(x = "AMOSTRA", facet.by = "你的分组列") %>%
  filter(!is.na(p))  # 过滤无效的检验结果行

3. 完整绘图示例

假设你的分组列是Category,绘图代码如下:

ggplot(filtered_data, aes(x = AMOSTRA, y = SUJ_PRE)) +
  geom_boxplot(aes(fill = AMOSTRA)) +
  facet_wrap(~Category)  # 对应分组列的分面
  stat_pvalue_manual(stat_test, label = "p.signif", tip.length = 0.01) +
  labs(x = "分组", y = "SUJ_PRE值", title = "PB与PE组SUJ_PRE的统计比较")

内容的提问来源于stack exchange,提问作者Larissa Cury

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:15:48