You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ggeffects::ggemmeans()重设因子水平后预测表输出错配问题咨询

结论

这是ggeffects早期版本的已知bug,和你调整因子水平顺序的操作没有关系,不属于使用不当导致的错误。

错位逻辑拆解

先做个简单验证:你直接对场景b拟合的模型跑原生的emmeans():

lm(cty ~ manufacturer, data = my_mpg_manuf_as_fac_b) %>%
  emmeans(~manufacturer)

返回的结果里,每个厂商对应的预测值、置信区间都是完全准确的,不存在标签和数值错位的问题——也就是说从数据整理、因子重排到模型拟合的全流程,你的操作都没有错误。

错位的根源在当时版本的ggemmeans()内部实现:

  • 函数在生成结果表的x类别列时,会正确读取你调整后的因子水平顺序,生成对应顺序的行标签
  • 但在把预测值、置信区间和行标签做匹配时,没有按照类别名称做一一映射,而是直接按照模型内部存储的初始因子顺序(也就是第一次转成因子时的默认字母升序)把数值硬填入对应行
  • 最终就出现了你复现的典型现象:x列的标签顺序完全符合你重排后的结果,但是每一行的数值还是旧顺序下的对应值——比如原a场景里audi对应的17.61,到b场景第一行标签换成volkswagen时,还是保留了17.61的数值,完全和实际预测值不匹配。
解决方法
  • 长期方案:直接把ggeffects升级到0.16.0及以上版本,该错位问题已经在这个版本后被正式修复
  • 临时规避:如果暂时没法升级版本,可以在调用ggemmeans()时手动指定需要计算的因子水平列表,强制函数按照你指定的顺序做取值匹配:
pred_b_correct <- lm(cty ~ manufacturer, data = my_mpg_manuf_as_fac_b) %>%
  ggemmeans(
    terms = "manufacturer",
    add.args = list(levels = levels(my_mpg_manuf_as_fac_b$manufacturer))
  )

内容的提问来源于stack exchange,提问作者Emman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 15:15:09