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
相关产品推荐
相关产品推荐

