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

如何按application绘制不同颜色的逻辑回归曲线及对应方程

解决方法

1. 显示数据点

你当前的ggplot代码仅定义了数据和映射规则,缺少几何图层来渲染数据点。只需在代码后追加geom_point()即可显示原始数据点,还可通过alpha参数调整点的透明度,避免点重叠时影响可读性:

ggplot(data = data, aes(x = Discount, y = Hit, color = as.factor(application))) +
  geom_point(alpha = 0.7)

2. 添加分类别逻辑回归曲线

要针对每个application类别绘制独立的逻辑回归曲线,使用geom_smooth()方法,指定method="glm"并传入二项分布族参数,ggplot会自动按color(即application)分组拟合模型:

ggplot(data = data, aes(x = Discount, y = Hit, color = as.factor(application))) +
  geom_point(alpha = 0.7) +
  geom_smooth(method = "glm", method.args = list(family = "binomial"), se = FALSE)
  • se=FALSE:关闭置信区间显示,若需要保留可删除该参数。
  • 上述代码会为每个类别拟合独立的斜率和截距,完全符合“不同类别不同曲线”的需求。

3. 添加回归方程

逻辑回归的方程形式为log(p/(1-p)) = b₀ + b₁*Discount,需为每个application类别单独拟合模型并提取参数,再将方程添加到图中:

完整代码(包含所有步骤)

# 读取数据(若使用本地文件,替换为read.csv("DiscountData.csv", header=T, stringsAsFactors = TRUE))
data <- read.table(text = "Discount Hit application
0.45   1       prize
0.37   1       prize
0.18   0       prize
0.30   0       prize
0.22   1       prize
0.21   1       prize
0.65   1       yellow
0.31   1       yellow
0.22   0       yellow
0.16   0       yellow
0.30   1       yellow
0.20   1       lime
0.12   1       lime
0.23   0       lime
0.31   0       lime
0.18   1       lime
0.19   1       lime
0.23   1       food
0.19   1       food
0.10   0       food
0.32   0       food
0.20   1       food
0.56   1       food", header = TRUE, stringsAsFactors = TRUE)

# 加载所需包
library(ggplot2)
library(dplyr)

# 为每个application类别拟合逻辑回归并提取方程
model_eqs <- data %>%
  group_by(application) %>%
  do(
    equation = {
      coefs <- round(coef(glm(Hit ~ Discount, data = ., family = binomial)), 2)
      paste0("log(p/(1-p)) = ", coefs[1], " + ", coefs[2], "*Discount")
    }
  ) %>%
  unnest(equation) %>%
  select(application, equation)

# 绘制图形并添加方程
ggplot(data, aes(x = Discount, y = Hit, color = application)) +
  geom_point(alpha = 0.7) +
  geom_smooth(method = "glm", method.args = list(family = "binomial"), se = FALSE) +
  geom_text(
    data = model_eqs,
    aes(x = 0.5, y = 0.2, label = equation),
    color = "black", size = 3, inherit.aes = FALSE
  ) +
  theme_minimal() +
  labs(x = "Discount", y = "Hit", color = "Application Category")

额外说明

  • 若你需要拟合共享斜率、仅截距不同的逻辑回归(对应你原代码中的fit模型),可将geom_smooth的formula参数设为y ~ x + group,但此设置下曲线是平行的,可能不符合“不同类别不同曲线”的需求。
  • 调整geom_text中的x和y值可改变方程的显示位置,避免遮挡曲线或数据点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:03:18