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

在R中为含分箱变量的散点图添加回归拟合线(多数据集)

实现分箱散点+跨数据集三阶拟合线的方案

关键修正:回归模型的正确写法

原代码里的log_rank_ratio^2在lm()中会被解析为交互项,而非数学意义上的平方,必须用I()包裹才能正确表示多项式项:

fit1 <- lm(quit ~ favorite + log_rank_ratio + I(log_rank_ratio^2) + I(log_rank_ratio^3), data = data_1)

方法一:直接用geom_smooth快速添加拟合线

在现有散点图代码中加入geom_smooth,指定基于data_1的三阶模型,同时限定x轴范围:

lost <- ggplot(data = data_2, 
               aes(x = log_rank_ratio, y = quit, color = as.factor(favorite))) +
  geom_point(size = 2) +
  # 基于data_1的三阶拟合线,如需置信区间可将se设为TRUE
  geom_smooth(data = data_1,
              method = "lm",
              formula = y ~ favorite + x + I(x^2) + I(x^3),
              se = FALSE,
              linewidth = 1) +
  theme_bw() + 
  xlab("Log Rank Ratio") +
  ylab("Observed Likelihood of Quitting Mid-Match") +
  geom_vline(xintercept = 0, linetype = "dashed", alpha = .7) +
  xlim(-1, 1) # 限定x轴范围为-1到1

方法二:生成预测数据绘制拟合线(更灵活)

先基于data_1的模型生成预测序列,再用geom_line绘制,适合需要自定义拟合线细节的场景:

# 生成x范围-1到1的预测数据集,按favorite分组
new_data <- expand.grid(
  log_rank_ratio = seq(-1, 1, length.out = 100),
  favorite = unique(data_1$favorite)
)

# 用模型预测y值
new_data$pred_quit <- predict(fit1, newdata = new_data)

# 绘制图形
lost <- ggplot() +
  # 分箱数据集的散点
  geom_point(data = data_2,
             aes(x = log_rank_ratio, y = quit, color = as.factor(favorite)),
             size = 2) +
  # 基于预测数据的拟合线
  geom_line(data = new_data,
            aes(x = log_rank_ratio, y = pred_quit, color = as.factor(favorite)),
            linewidth = 1) +
  theme_bw() + 
  xlab("Log Rank Ratio") +
  ylab("Observed Likelihood of Quitting Mid-Match") +
  geom_vline(xintercept = 0, linetype = "dashed", alpha = .7) +
  xlim(-1, 1)

注意事项

  • 必须用I()包裹多项式项,否则lm()会错误解析为交互项,导致模型偏差。
  • 两种方法都能实现需求,方法二更适合调整拟合线的点数、样式,方法一更简洁高效。
  • xlim(-1,1)确保图形严格限定在需求的x范围之内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:43:20