在emmeans中实现自定义交互对比及组间比较的技术问题
问题:自定义组内对比后进行组间比较的报错解决
需求背景
数据集包含组间因子group,组内因子location和scenario,需要先对location做自定义对比(A vs B+C的均值,权重c(1, -1/2, -1/2)),再在不同group间比较该对比的结果。当前已能获取单个scenario下各组的对比值,但使用contrast()的interaction参数时触发报错:
Error in contrast.emmGrid(object, interaction[[i]], by = vars[-pos], name = nm, : 'method' must be a list, function, or the basename of an '.emmc' function
错误原因
interaction = TRUE参数的作用是生成因子间的交互对比,但它要求method参数是预定义的对比方法(如"pairwise"),而非自定义的对比向量。直接传入自定义对比向量会触发参数类型不匹配的错误。
解决方案
可以通过两种方式实现需求:分步完成location自定义对比和group间比较,或通过嵌套对比语法一次性完成。
方法一:分步实现
- 先获取包含
group和location的边际均值,限定目标scenario
test_effects <- emmeans(test_aov, specs = ~ location * group, by = "scenario", at = list(scenario = "alpha"))
- 对
location应用自定义对比,每个group会得到一个对比值
loc_contrast <- contrast(test_effects, method = list("A vs B+C" = location_a_vs_all), by = "group")
- 对上述结果的
group维度做两两比较,得到组间的对比差异
group_compare <- contrast(loc_contrast, method = "pairwise", adjust = "none") # 查看最终结果 group_compare
方法二:一次性嵌套对比
利用contrast()的嵌套语法,直接在一个步骤中完成location对比和group间的比较:
test_effects <- emmeans(test_aov, specs = ~ location * group, at = list(scenario = "alpha")) # 先定义location的自定义对比,再对group做两两比较 final_contrast <- contrast(test_effects, list(location_contrast = location_a_vs_all), interaction = c("pairwise", "location_contrast"))
结果说明
两种方法最终都会输出每个group对的A vs B+C对比值差异,以及对应的统计量(均值、标准误、p值等)。
内容的提问来源于stack exchange,提问作者Ramiro Reyes
相关产品推荐
相关产品推荐

