如何在Gamlss模型中实现处理组的事后成对对比?
解决gamlss模型中分类变量的事后成对对比问题
为什么你的尝试会出错
gamlss的contrasts参数要求传入命名列表,键是因子变量名,值是对应的对比矩阵/对比函数结果:
- 传入
"Trx"或"pairwise"这类字符串,R无法识别为有效的对比设置,因此报错或忽略参数。 - 传入向量也不符合参数要求,所以会触发
non-list contrasts argument ignored警告。
推荐解决方案:用emmeans包做事后成对对比
不需要修改模型的contrasts参数,直接在拟合好的模型上用专门的事后对比工具更高效,步骤如下:
- 安装并加载emmeans包:
install.packages("emmeans") library(emmeans)
- 拟合你的原模型(无需调整contrasts参数):
propfertmodel <- gamlss(propfert~Trx, data = only_eggs, family = BEINF)
- 生成Trx各水平的边际均值,并进行成对对比:
# 获取Trx各水平的边际均值 trx_means <- emmeans(propfertmodel, ~ Trx) # 执行成对对比,用Tukey法调整多重比较的p值 trx_pairwise <- pairs(trx_means, adjust = "tukey") # 查看对比结果 summary(trx_pairwise)
如果你一定要用gamlss的contrasts参数
如果需要在模型拟合阶段指定对比(而非事后对比),需传入命名列表。比如设置以"C"为参考组的处理对比:
# 确保Trx是因子类型 only_eggs$Trx <- factor(only_eggs$Trx) # 传入对比列表 propfertmodel <- gamlss(propfert~Trx, data = only_eggs, family = BEINF, contrasts = list(Trx = contr.treatment(levels(only_eggs$Trx), ref = "C")))
但这种方式仅设置模型的参考对比,无法直接得到所有两两组的差异,因此还是推荐用emmeans做事后成对对比。
内容的提问来源于stack exchange,提问作者Jenn
相关产品推荐
相关产品推荐

