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

为何get_datagrid+get_predicted生成的ggplot与predictions方法结果不同?

问题描述

我用以下代码加载数据并拟合回归模型:

library(tidyverse)
library(marginaleffects)
data(efc, package = "ggeffects")
efc <- efc %>% na.omit()
efc <- datawizard::to_factor(efc, c("c161sex", "c172code"))

mod <- lm(barthtot ~ c172code + c12hour*c161sex, efc)
pred <- predictions(mod, newdata = datagrid(c172code = unique, c12hour=unique,
  c161sex = unique))

通过这段代码生成目标图形:

ggplot(pred, aes(c12hour, barthtot, colour = c161sex )) + facet_wrap(~c172code )+
  geom_line(position = position_dodge(0.2)) +
  ggtitle("Predicted values of barthtot") 

之后尝试用easystats包的get_datagrid()和get_predicted()复现图形:

library(easystats)
vizdata <- get_datagrid(efc, by = c("c12hour", "c161sex","c172code"))
vizdata$Predicted <- get_predicted(mod, vizdata)

ggplot(efc, aes(x = c12hour , y = barthtot, color =c161sex ))  +
  geom_line(data = vizdata, aes(y = Predicted), linewidth = 1)  +facet_wrap(~c172code )

得到的图形和第一种方法生成的不一致,请问原因是什么?

问题原因及修正方法

核心差异点

  1. 连续变量的取值逻辑不同
    marginaleffects的datagrid(c12hour=unique)会保留c12hour的所有原始唯一值;而get_datagrid()默认对连续变量(如c12hour)进行等距抽样(默认生成10个分位值),这直接导致两组预测数据的x轴点数量、取值完全不同,图形自然无法匹配。
  2. 绘图数据集引用错误
    你在ggplot()中以原始数据efc作为主数据集,但实际只需要用预测数据集vizdata绘图,原始数据的引入会干扰图形逻辑(虽不是核心问题,但会导致冗余)。

修正后的代码

要完全复现原图形,需调整get_datagrid()的参数,让它保留c12hour的所有唯一值,同时修正绘图的数据集引用:

library(easystats)
# 指定变量取原始唯一值,和marginaleffects的datagrid逻辑对齐
vizdata <- get_datagrid(efc, 
                        variables = list(c12hour = ~unique(),
                                        c161sex = ~unique(),
                                        c172code = ~unique()))
vizdata$Predicted <- get_predicted(mod, vizdata)

# 仅用预测数据集绘图,保留原图形的偏移效果
ggplot(vizdata, aes(x = c12hour, y = Predicted, colour = c161sex)) +
  facet_wrap(~c172code) +
  geom_line(position = position_dodge(0.2)) +
  ggtitle("Predicted values of barthtot")

补充说明

get_datagrid()针对连续变量的默认行为是生成等距分位数,这是为了让预测曲线更平滑;而marginaleffects的datagrid(xxx=unique)是严格保留原始数据的所有离散取值,这是两者的核心设计差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:02:03