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

