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

如何用ggplot2在纵向数据上添加两因素ANOVA组间显著性结果?

多时间点性别与肿瘤负荷的组间差异分析问题解决

问题背景

需要探究时间、性别对肿瘤负荷的潜在影响,计划在已绘制的折线图每个时间点上方添加男女组间的显著性标记,但运行anova_test代码时出现ID被标记为NA的报错。

原始实验数据

ID  Sex Tumor.Burden    Time.Point
Cage3   female  1270800 1
Cage3   female  1237600 2
Cage3   female  1288760 3
Cage3   female  775220  4
Cage4   female  1768400 1
Cage4   female  1630200 2
Cage4   female  1606900 3
Cage4   female  1134220 4
Cage5   male    1441500 1
Cage5   male    3000750 2
Cage5   male    5930500 3
Cage5   male    6944225 4
Cage6   male    2063640 1
Cage6   male    7067600 2
Cage6   male    10460400 3
Cage6   male    18764800 4

已使用的折线图代码

ggplot(Data, aes(x = Time.Point, y = Tumor.Burden, color = Sex)) + 
  geom_line() + 
  theme_minimal()  +
  labs(title = "Weekly Follow-up of Tumor-Bearing Mice", x = "Time points (weeks)", y="Log(Tumor Burden)") +
  theme(plot.title = element_text(size = 10, hjust = 0.5))

报错代码及问题

运行以下代码时,ID变量被标记为NA并报错:

Data %>%
  group_by(Time.Point) %>%
   anova_test(dv = Tumor.Burden, wid = ID, within = Sex)

问题原因

你误用了重复测量ANOVA的参数设置:

  1. 性别是组间变量(每个小鼠ID只对应一种性别),不能设为within(组内变量);
  2. 按时间点分组后,每个分组内的ID分属不同性别,不符合重复测量ANOVA“同一对象重复测量”的设计要求,导致ID被识别为无效值(NA)。

解决方案

要实现每个时间点男女组间的差异检验,应该用独立样本t检验(每个时间点的男女样本是独立个体),步骤如下:

1. 计算每个时间点的组间差异及显著性

library(rstatix)
library(dplyr)

# 按时间点分组做t检验,校正多比较的p值
stat_results <- Data %>%
  group_by(Time.Point) %>%
  t_test(Tumor.Burden ~ Sex, var.equal = TRUE) %>%  # 若方差不齐,改为var.equal=FALSE
  adjust_pvalue(method = "bonferroni") %>%
  add_significance("p.adj")

2. 将显著性标记添加到折线图

使用ggsignif包在图上标注显著性:

library(ggsignif)

ggplot(Data, aes(x = Time.Point, y = Tumor.Burden, color = Sex)) + 
  geom_line(aes(group = ID)) +  # 新增group=ID,确保每个小鼠的折线独立显示
  theme_minimal() +
  labs(title = "Weekly Follow-up of Tumor-Bearing Mice", 
       x = "Time points (weeks)", 
       y = "Tumor Burden") +  # 注意:原代码y轴标注为Log,但数据未取对数,若需要对数轴可添加scale_y_log10()
  theme(plot.title = element_text(size = 10, hjust = 0.5)) +
  geom_signif(
    data = stat_results,
    aes(xmin = Time.Point - 0.2, xmax = Time.Point + 0.2, 
        annotations = p.adj.signif, 
        y_position = max(Data$Tumor.Burden)*1.1),
    manual = TRUE
  )

补充:整体两因素混合ANOVA分析

如果需要分析时间、性别及其交互作用的整体效应,可使用混合ANOVA(时间为组内变量,性别为组间变量):

mixed_anova <- Data %>%
  anova_test(dv = Tumor.Burden, wid = ID, between = Sex, within = Time.Point)

该分析能得到主效应和交互效应的结果,若交互效应显著,还可进一步做简单效应分析来探究不同时间点的性别差异。


内容的提问来源于stack exchange,提问作者Allen Schweickart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:30:43