multcomp::cld()函数decreasing参数无效果问题求助
解决multcomp::cld()中decreasing参数失效问题
问题背景
在使用multcomp::cld()生成紧凑字母显示(CLD)时,设置decreasing=TRUE或FALSE无法改变字母分配逻辑,无法将最高均值对应到字母"A"。测试环境为R 4.2.0、multcomp 1.4-20、emmeans 1.8.0,且在混合线性模型及多系统中均出现该问题。
可行解决方案
方案1:使用emmeans包自带的cld方法
emmeans包本身提供了cld()方法,该方法的decreasing参数可正常生效,能直接控制均值排序与字母分配:
model = lm(breaks~tension, data=warpbreaks) emg = emmeans::emmeans(model, pairwise~tension) # 让最高均值分配字母"A" emmeans::cld(emg[[1]], adjust="fdr", alpha=0.05, decreasing=TRUE, Letters=LETTERS)
执行后输出会将最高均值(tension=L,emmean=36.4)排在首位并分配字母"A",其余均值按降序排列并对应分组字母。
方案2:手动排序emmeans结果后再调用multcomp::cld
若坚持使用multcomp的cld函数,可先对emmeans结果按均值降序排序,再传入函数:
library(dplyr) model = lm(breaks~tension, data=warpbreaks) emg = emmeans::emmeans(model, pairwise~tension) # 按emmean降序排序 sorted_em <- emg[[1]] %>% arrange(desc(emmean)) # 调用multcomp的cld multcomp::cld(sorted_em, adjust="fdr", alpha=0.05, Letters=LETTERS)
此方法通过提前排序输入对象,让multcomp::cld按排序后的顺序分配字母,间接实现最高均值对应"A"的需求。
原因说明
当前版本的multcomp::cld()在处理emmeans对象时,decreasing参数未正确作用于均值排序逻辑,导致字母分配不受该参数影响。而emmeans自带的cld方法针对自身返回的对象做了适配,参数逻辑更符合预期。
内容的提问来源于stack exchange,提问作者Loki
相关产品推荐
相关产品推荐

