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

如何在ggplot中绘制二项式GAM平滑曲线?解决变量未找到报错

解决ggplot中添加二项式GAM平滑曲线的报错问题

报错原因

y1未找到的错误源于:你在ggplot主aes中直接定义了y = y1/(y1+y2)(比例值),但使用binomial族的GAM需要原始的成功计数(y1)和失败计数(y2)作为响应变量,stat_smooth计算时无法从主aes的设置中获取到原始计数变量。

解决方案

调整代码结构,将散点的比例计算与GAM模型的变量需求分开处理:

  • 主ggplot的aes仅指定x变量
  • 在geom_point中单独定义散点的y轴位置为比例值
  • 在geom_smooth的formula中直接用cbind(y1, y2)作为二项式响应变量,确保GAM能访问到原始计数数据

修正后的代码如下:

set.seed(42)
df <- data.frame(y1 = sample.int(100),
                 y2 = sample.int(100),
                 x  = runif(100, 0, 100))

ggplot(data = df, aes(x = x)) +
  geom_point(aes(y = y1/(y1+y2)), shape = 1) +  # 单独设置散点的y轴比例
  geom_smooth(method = "gam",
              method.args = list(family = binomial),
              formula = cbind(y1, y2) ~ s(x))  # 基于原始计数拟合二项式GAM

关键说明

  • 采用binomial族的GAM时,响应变量必须是二元0/1向量或成功数+失败数的cbind组合,不能直接使用比例值作为响应
  • 修正后代码中,散点绘制与GAM拟合共享同一数据集,变量访问逻辑清晰,不会出现找不到变量的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:20:47