如何用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
相关产品推荐
相关产品推荐

