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

如何用ggplot2绘制含GLM回归线的散点图(二项式模型)

解决方法

首先,你的代码存在两个核心问题:一是y美学映射不能直接用cbind(Success, Failure),二是stat_smooth无法直接传入预拟合的GLM模型。下面分两种数据场景给出具体解决方案:


场景1:数据为聚合形式(每组温度+农药对应成功/失败计数)

你的GLM模型使用的是聚合后的计数数据,此时应该先计算每组的孵化成功率比例,再进行绘图:

步骤1:计算观测成功率

mydata$PropSuccess <- mydata$Success / (mydata$Success + mydata$Failure)

步骤2:用预拟合模型生成预测值(推荐)

如果要严格使用你已经构建的mymodel生成回归线,先创建预测网格并计算预测值及置信区间:

# 生成覆盖所有温度范围和农药处理的预测网格
new_data <- expand.grid(
  Temperature = seq(min(mydata$Temperature), max(mydata$Temperature), length.out = 100),
  Pesticide = unique(mydata$Pesticide)
)

# 从预拟合模型获取预测结果(包含置信区间)
preds <- predict(mymodel, newdata = new_data, type = "response", se.fit = TRUE)
new_data$PredSuccess <- preds$fit
new_data$LowerCI <- preds$fit - 1.96 * preds$se.fit
new_data$UpperCI <- preds$fit + 1.96 * preds$se.fit

步骤3:绘制散点+回归线

library(ggplot2)

ggplot() +
  theme_light() +
  scale_color_manual(values = c("#009E73","#F0E442","#FF9999")) +
  scale_fill_manual(values = c("#009E73","#F0E442","#FF9999")) +
  labs(x = "Temperature (°C)", y = "Hatching success") +
  # 绘制原始观测比例散点
  geom_point(data = mydata, aes(x = Temperature, y = PropSuccess, color = Pesticide), size = 2) +
  # 绘制模型预测回归线
  geom_line(data = new_data, aes(x = Temperature, y = PredSuccess, color = Pesticide)) +
  # 绘制置信区间(可选)
  geom_ribbon(data = new_data, aes(x = Temperature, ymin = LowerCI, ymax = UpperCI, fill = Pesticide), alpha = 0.2)

场景2:数据为单枚卵的0/1响应(每行对应一枚卵)

如果你的原始数据是单枚卵的孵化结果(0=失败,1=成功),可以用抖动散点避免重叠,同时直接让ggplot2拟合GLM模型:

library(ggplot2)

ggplot(mydata, aes(x = Temperature, y = Success, color = Pesticide, group = Pesticide)) +
  theme_light() +
  scale_color_manual(values = c("#009E73","#F0E442","#FF9999")) +
  labs(x = "Temperature (°C)", y = "Hatching success") +
  # 抖动散点解决重叠问题
  geom_jitter(width = 0.2, height = 0.05, alpha = 0.5) +
  # 拟合带交互项的二项式GLM并绘制回归线
  stat_smooth(method = "glm", 
              method.args = list(family = binomial(link = "logit")),
              formula = y ~ x * group,  # 包含温度与农药的交互项
              se = TRUE)

关于单枚卵0/1数据绘图的合理性

这种方式能直观展示原始个体数据,但会存在严重的重叠问题(大部分点集中在y=0和y=1),不利于观察整体趋势。更推荐用聚合后的成功率比例绘图,若需展示原始数据,可在同一图中同时呈现聚合点和抖动散点,或单独分开展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:49:51