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

R语言绘制逻辑回归预测概率折线显示异常问题咨询

问题复现

模拟数据生成

n = 1e3
x = rnorm(n)
linear_process = 1 + 5*x
y = rbinom(n = n, size = 1, prob = plogis(linear_process))
plot(x,y)

原始x-y散点图

模型拟合

m = glm(y~x, family = binomial(link = 'logit'))
y_hat = predict(m, type = 'response')

不同绘图方式的效果差异

  • 用散点叠加预测值,效果符合预期:
plot(x,y)
points(x,y_hat, col = 'blue')

叠加预测点效果图

  • 直接用折线连接预测值,出现异常错乱图形:
plot(x,y)
lines(x,y_hat, col = 'blue')

异常折线效果图

问题原因

predict()函数的使用完全正确,异常来自lines()函数的绘图逻辑:
lines()属于R基础绘图函数,不会自动对输入的x坐标做排序,只会严格按照向量的原始存储顺序,依次连接相邻的两个(x,y)坐标点。
你代码中的x是rnorm()生成的随机数,本身是无规律乱序的,对应的预测值y_hat也和原始乱序x一一对应。直接调用lines()时,连线会在不同x位置的预测点之间来回跳转,最终形成错乱的锯齿状图形。而points()只负责在对应坐标位置画点,不存在连点逻辑,因此散点叠加的效果完全正常。

修复方案

方案1:对原始坐标排序后连线

适合快速修正,直接基于现有预测值绘图:

plot(x, y)
# 获取x从小到大排序的索引
ord <- order(x)
# 按排序后的坐标连线
lines(x[ord], y_hat[ord], col = 'blue', lwd = 2)

方案2:生成有序网格点预测后绘图(更推荐)

生成覆盖x取值范围的等间距有序x序列做预测,画出的拟合曲线更平滑规整,更适合展示模型拟合效果:

plot(x, y)
# 生成100个等间距分布的x点
x_new <- seq(min(x), max(x), length.out = 100)
# 对新x值做预测
y_hat_new <- predict(m, newdata = data.frame(x = x_new), type = 'response')
lines(x_new, y_hat_new, col = 'blue', lwd = 2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:12:25