我正在使用emmeans对对照组进行自定义比较。trt.vs.ctrl
如果我只对比较一个因素感兴趣,那么该方法对我来说非常有效,但是当我将比较设置为更复杂时(即控制组由 2+ 变量的特定组合描述)失败(或失败) )。
下面的示例代码。假设使用pigs
数据,我想将所有饮食与低百分比的鱼类饮食进行比较。请注意在nd
数据框中,“鱼”只有 9% 与之关联。但是,当我运行 时emmeans
,该函数不会对嵌套进行处理,虽然控制是正确的,但处理组还包括鱼和百分比的各种值。这意味着p 值调整是错误的。
所以我能想到的两种方法:
- 在这种情况下,我该如何
emmeans
拾取嵌套,或者 - 如何
dunnettx
手动进行调整(=我可以使用调整“无”,然后取出我真正想要的测试,并自己调整 p 值?)。
library(emmeans)
library(dplyr)
pigs.lm <- lm(log(conc) ~ source + factor(percent), data = pigs)
nd <- expand.grid(source = levels(pigs$source), percent = unique(pigs$percent)) %>%
filter(percent == 9 | source != "fish")
emmeans(pigs.lm, trt.vs.ctrl ~ source + percent,
data = nd, covnest = TRUE, cov.reduce = FALSE)
感谢你的帮助。
使用建议include
非常有效。在这里发布我的代码,以防其他人将来遇到同样的问题。
library(emmeans)
library(dplyr)
library(tidyr)
pigs.lm <- lm(log(conc) ~ source + factor(percent), data = pigs)
nd <- expand.grid(source = levels(pigs$source), percent = unique(pigs$percent)) %>%
filter(percent == 9 | source != "fish")
ems <- emmeans(pigs.lm, trt.vs.ctrl ~ source + percent,
data = nd, covnest = TRUE, cov.reduce = FALSE)
# to identify which levels to exclude - in this case,
# I only want the low-percent fish to remain as the ref level
aux <- as.data.frame(ems[[1]]) %>%
mutate(ID = 1:n()) %>%
filter(!grepl("fish", source) | ID == 1)
emmeans(pigs.lm, trt.vs.ctrl ~ source + percent,
data = nd, covnest = TRUE, cov.reduce = FALSE, include = aux$ID)