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

使用ggeffects绘图时出现原始数据丢失报错,求助解决方法

问题原因

你在ggpredict()返回的对象上执行mutate()添加x_1列,破坏了ggeffects对象自带的属性和原始数据关联信息,导致plot(add.data = TRUE)无法定位原始数据,触发"Raw data not available."错误,进而引发逻辑判断时的缺失值报错。另外手动调整x_1的操作完全多余,ggeffects会自动处理分类变量的展示。

解决方案

方案1:直接使用原始预测结果绘图

无需修改ggpredict()的输出,直接调用plot函数即可:

library(dplyr)
library(readr)
library(ggplot2)
library(ggeffects)

# 加载数据集
ds <- structure(list(Especie = c("C_externa_1", "C_externa_1", "C_externa_1", 
"C_externa_1", "C_externa_1", "C_externa_1", "C_externa_1", "C_externa_1", 
"C_externa_1", "C_externa_1", "C_externa_1", "C_externa_1", "C_externa_1", 
"C_externa_1", "C_externa_1", "C_externa_1", "C_externa_1", "C_externa_1", 
"C_externa_1", "C_externa_1", "C_externa_1", "C_externa_1", "C_externa_1", 
"C_externa_1", "C_externa_1", "C_externa_1", "C_externa_1", "C_externa_1", 
"C_externa_1", "C_externa_1", "C_externa_1", "C_externa_1", "C_externa_1", 
"C_externa_1", "C_externa_1", "C_externa_1", "C_externa_1", "C_externa_1", 
"C_externa_1", "C_externa_1", "C_externa_1", "C_externa_1", "C_externa_1", 
"C_externa_1", "C_externa_1", "C_externa_1", "C_cubana_2", "C_cubana_2", "C_cubana_2", 
"C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", 
"C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", 
"C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", 
"C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", 
"C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", 
"C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", 
"C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", 
"C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", 
"C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", 
"C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", "C_cubana_2", 
"C_cubana_2"), 
Tentou_predar = c(3L, 25L, 20L, 36L, 12L, 0L, 1L, 10L, 
0L, 14L, 2L, 0L, 0L, 0L, 0L, 32L, 0L, 0L, 25L, 0L, 2L, 2L, 35L, 
0L, 0L, 0L, 22L, 0L, 2L, 9L, 54L, 57L, 26L, 17L, 18L, 34L, 2L, 
0L, 20L, 25L, 6L, 65L, 36L, 6L, 62L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 
1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 1L)), class = "data.frame", row.names = c(NA, 
-105L))

# 拟合模型
m_Pred <- glm(Tentou_predar ~ Especie, data = ds, family = "poisson")

# 获取预测结果并直接绘图
df_gg <- ggpredict(m_Pred, terms = "Especie [all]")
plot(df_gg, add.data = TRUE)

方案2:用ggplot2手动自定义绘图(如需调整点位置避免重叠)

如果想避免原始数据点重叠,用ggplot2手动组合数据和预测结果,灵活性更高:

# 获取预测结果
df_gg <- ggpredict(m_Pred, terms = "Especie [all]")

# 手动绘图
ggplot() +
  # 添加原始数据点,用jitter分散重叠点
  geom_jitter(data = ds, aes(x = Especie, y = Tentou_predar), width = 0.2, alpha = 0.6) +
  # 添加预测值点
  geom_point(data = df_gg, aes(x = group, y = predicted), color = "red", size = 3) +
  # 添加置信区间
  geom_errorbar(data = df_gg, aes(x = group, ymin = conf.low, ymax = conf.high), 
                width = 0.2, color = "red") +
  theme_minimal()
核心注意点
  • ggpredict()返回的是ggeffects专属结构的对象,包含和原始模型、数据关联的属性,不要随意修改其列或结构,否则会破坏plot函数的内部逻辑。
  • 自定义绘图需求建议直接用ggplot2实现,避免依赖ggeffects的plot函数的自动处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:05:22