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

R中交互效应后多水平简单效应比较的Cohen's d计算方案求助

可行实现方案

方案1:修正emmeans包eff_size调用(最推荐,适配ANOVA分析框架)

此前报错原因是emmeans设置pairwise参数后返回的是包含边际均值、对比结果的列表,直接传入整个列表会触发报错,仅需提取对比部分传入即可:

# 已拟合lm模型的前提下计算简单效应对比
emm <- emmeans::emmeans(model, pairwise ~ cond1|cond2)
# 提取对比结果计算Cohen's d,使用ANOVA模型残差标准差做标准化,符合社科领域报告规范
eff_size_res <- emmeans::eff_size(emm$contrasts, sigma = sigma(model), edf = df.residual(model))
# 输出结果包含效应量值、上下置信区间、自由度
print(eff_size_res)

若需切换分层逻辑,仅需修改emmeans的公式即可,例如改为pairwise ~ cond2|cond1即可计算cond1不同水平下cond2的组间效应量。

方案2:基于rstatix包分组计算(适配tidyverse工作流)

rstatix::cohens_d支持结合dplyr::group_by实现多分组分层计算,输出为结构化表格,可直接用于后续结果整理:

library(dplyr)
library(rstatix)
# 按cond2分层,每层内计算cond1两水平的Cohen's d,var.equal=TRUE与ANOVA方差齐性假设保持一致
d_res <- df1 %>% 
  group_by(cond2) %>% 
  cohens_d(dv ~ cond1, var.equal = TRUE)
print(d_res)

切换分层逻辑仅需修改group_by的传入变量即可。

方案3:自定义简易函数适配任意场景

可封装通用函数实现一键输出,适合批量分析场景:

calc_simple_eff_d <- function(model, comp_factor, strat_factor) {
  form <- as.formula(paste0("pairwise ~ ", comp_factor, "|", strat_factor))
  emm <- emmeans::emmeans(model, form)
  return(as.data.frame(emmeans::eff_size(emm$contrasts, sigma = sigma(model), edf = df.residual(model))))
}
# 调用示例:计算cond2分层下cond1的简单效应Cohen's d
result <- calc_simple_eff_d(model, "cond1", "cond2")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:39:02