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

R中重复测量三因素ANOVA(不等样本量)报错解决咨询

重复测量三因素ANOVA修正方案及替代方案

错误根源

你误将sex、exercises这两个组间因素放到了anova_test()的within参数中——只有time是重复测量的组内因素。每个受试者(id)的性别和锻炼类型是固定的,不存在重复观测,这种参数指定错误导致模型无法识别有效分析样本,进而触发0 (non-NA) cases报错。

修正后的rstatix代码

明确因素类型后调整代码:

library(tidyverse)
library(ggpubr)
library(rstatix)
library(readxl)

setwd("你的文件路径")
weightloss <- read_xlsx("test.xlsx")

# 转长格式+转换因子类型
weightloss <- weightloss %>%
  gather(key = "time", value = "score", t1, t2, t3) %>%
  convert_as_factor(id, sex, exercises, time)

# 正确指定组间/组内因素
res.aov <- anova_test(
  data = weightloss, 
  dv = score, 
  wid = id,
  between = c(sex, exercises),  # 组间变量:性别、锻炼类型
  within = time                 # 组内重复测量变量:时间点
)

# 输出ANOVA结果
get_anova_table(res.aov)

样本量不等时的更优方案:混合效应模型

由于各组样本量不均衡,重复测量ANOVA的方差齐性等假设易不满足,推荐用线性混合模型(LMM)分析,结果更稳健。使用lme4+lmerTest包实现:

# 安装依赖包(首次运行需执行)
install.packages(c("lme4", "lmerTest"))
library(lme4)
library(lmerTest)

# 构建混合模型:id作为随机效应,纳入所有交互项
model <- lmer(score ~ sex * exercises * time + (1 + time | id), data = weightloss)

# 输出各因素及交互项的显著性检验
anova(model)

关键说明

  • (1 + time | id):为每个受试者设置随机截距和随时间变化的随机斜率,更贴合重复测量数据的个体差异
  • 若模型收敛失败,可简化随机效应结构为(1 | id),仅保留随机截距

额外检查点

如果修正后仍报错,先检查score列是否存在大量缺失值,可通过weightloss <- weightloss %>% filter(!is.na(score))过滤无效样本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:55:54