Emmeans输出与转成data.frame后结果差异问题求助
关于emmeans()结果转data.frame后置信区间差异的分析思路
核心原因:对象处理错误
执行mm <- emmeans(model, pairwise ~ prov_season*year | group, ...)后,mm是一个复合结果对象,包含两个核心部分:
mm$emmeans:存储估计边际均值(emmean)、标准误(SE)、置信区间(CI)mm$contrasts:存储分组间的两两对比结果
直接调用as.data.frame(mm)时,R会默认处理整个复合对象,而非单独提取emmeans部分,这导致输出的置信区间并非原变换尺度下的结果,而是错误应用了复合对象的默认处理逻辑。
验证与解决方法
正确提取emmeans部分转换
不要直接转换整个mm,针对mm$emmeans单独转换:as.data.frame(mm$emmeans)此操作得到的结果会和
print(mm$emmeans)完全一致,包括emmean、SE和CI的数值。数值精度差异说明
你看到的emmean和SE的微小差异(比如0.0112 vs 0.011232)只是R的打印精度设置导致的显示差异,实际存储的数值完全相同,并非计算层面的差异。响应尺度转换说明
注意print(mm$emmeans)末尾的提示:结果是在asin(sqrt(mu))变换后的尺度上给出的。如果需要转换回原响应尺度(r_index,范围0-1),可以使用regrid()函数:# 转换回原响应尺度 mm_original <- regrid(mm$emmeans) as.data.frame(mm_original)此时得到的置信区间会符合原变量0-1的范围,不会出现负数。
内容的提问来源于stack exchange,提问作者smok
相关产品推荐
相关产品推荐

