You need to enable JavaScript to run this app. 二项GLM绘图出现多条预测线的原因与单线条调整方法
优惠活动
大模型
产品
解决方案
定价
更多

二项GLM绘图出现多条预测线的原因与单线条调整方法

多条杂乱线条的产生原因

图中出现的交叉乱线是连线逻辑错误导致的,和已拟合的logistic模型本身没有关系:

  • 你当前的绘图代码仅实现了原始0/1分类值的散点绘制,本身不会自动生成模型拟合线
  • 出现乱线通常是尝试补加线条时,直接按照数据集的原始行顺序连接样本点,没有按照x轴(雏鸟体重)的数值大小排序:因为数据的原始记录顺序和体重大小没有对应关系,连线会在图中来回折返、交叉,最终形成多根交错的杂乱线条,完全不是模型的拟合趋势
  • 直接连接未排序的预测值也会产生同样的问题:哪怕是用模型算出来的预测值,如果没有按x轴顺序排列,连点成线后依然会出现杂乱的交叉效果
单条平滑拟合线的实现方案

核心逻辑是先按x轴取值范围生成规整的连续预测序列,再基于模型算出对应预测值,最后按顺序连线,具体步骤和代码如下:

  • 第一步:绘制原始样本散点,可对纵向的0/1分类值加轻微抖动,避免同取值的点完全重叠,同时将y轴范围设置在0-1的概率区间,适配后续的拟合线展示
  • 第二步:按照雏鸟体重的实际取值范围,生成一组从小到大连续均匀排列的体重值作为预测的自变量序列
  • 第三步:调用已拟合的logistic模型,将预测序列对应的线性预测结果转换为实际的繁殖终末概率值
  • 第四步:将按顺序排列的预测值用线条连接,即可得到单条平滑的S型logistic拟合线

对应的可运行代码:

# 绘制原始散点(加轻微纵向抖动减少点重叠)
plot(jitter(cranesData$Terminal_Effect, amount = 0.03) ~ cranesData$chick_mass,
     xlab = "Chick Mass (kg)",
     ylab = "Probability of Terminal Reproduction",
     pch = 19,
     ylim = c(-0.05, 1.05))

# 生成按体重值升序排列的预测用x序列
x_pred <- seq(
  from = min(cranesData$chick_mass),
  to = max(cranesData$chick_mass),
  length.out = 100
)

# 计算对应x序列的终端效应概率预测值
y_pred <- predict(
  object = m10,
  newdata = data.frame(chick_mass = x_pred),
  type = "response"
)

# 绘制单条平滑拟合线
lines(x_pred, y_pred, col = "#c0392b", lwd = 2)

关键注意事项:

  • 禁止直接使用lines(cranesData$Terminal_Effect ~ cranesData$chick_mass)这类写法连线,该写法会严格按照数据行的原始顺序连点,是产生交叉乱线的最常见诱因
  • 预测时必须指定type = "response",否则默认输出的是logit尺度的线性预测值,不是可用于绘图的实际概率值
  • 传入predict函数的newdata必须包含和模型自变量完全同名的列名,否则会触发参数不匹配的报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.13 02:27:04