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

R语言:如何为aov模型指定组内变化量的组间差异交互对比?

组内Δ变化的组间差异对比分析:代码验证与正确实现

问题描述

需要分析组内Δ变化(time=3 减去 time=1)的组间差异(group=1 减去 group=2),获取该差异的点估计、95%置信区间及p值,验证给出的两段emmeans代码是否均无法实现此目标。

示例数据集与模型代码

demo3 <- read.csv("https://stats.idre.ucla.edu/stat/data/demo3.csv")
## 将变量转换为因子
demo3 <- within(demo3, {
  group <- factor(group)
  time <- factor(time)
  id <- factor(id)
})

par(cex = .6)

demo3$time <- as.factor(time)

demo3.aov <- aov(pulse ~ group * time + Error(id), data = demo3)
summary(demo3.aov)

待验证代码分析

两段代码均无法直接实现目标,原因如下:

第一段代码

m2 <- emmeans(demo3.aov, "group", by = "time") 
pairs(m2)
  • 该代码按time分组计算group的边际均值,pairs(m2)会在每个时间点单独做group1 vs group2的对比,得到的是各时间点的组间差异,而非「组内时间变化后的组间差异」,不符合需求。

第二段代码

m22 <- emmeans(demo3.aov, c("group",   "time") )
pairs(m22)
  • 该代码获取group与time所有组合的边际均值,pairs(m22)会执行所有组合的两两对比(包括同组不同时间、同时不同组、不同组不同时间的对比),结果冗余且无法直接提取到目标对比项。

正确实现代码

需要自定义对比来直接计算「(group1的time3-time1变化) - (group2的time3-time1变化)」,以下是两种实现方式:

方式1:自定义对比系数

# 获取group与time组合的边际均值
emm <- emmeans(demo3.aov, ~ group * time)

# 自定义目标对比:(group1_time3 - group1_time1) - (group2_time3 - group2_time1)
# 系数对应emmeans输出顺序:group1_time1, group1_time3, group2_time1, group2_time3
contrast(emm, list(
  delta_group_diff = c(-1, 1, 1, -1)
), adjust = "none")

方式2:分步计算时间变化再对比

# 先计算每个group的time3 - time1的变化量
delta_emm <- emmeans(demo3.aov, ~ group, at = list(time = c(1, 3))) %>%
  contrast(method = "consecutive", by = "group")

# 再对比两个group的变化量差异
contrast(delta_emm, method = "pairwise", by = NULL)

以上两种方式均可输出目标差异的点估计、95%置信区间及p值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:30:49