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

如何用R语言curve()函数绘制参数a、b变化的logistic曲线

问题解决

报错原因

你遇到的报错来自两个核心问题:

  • 公式书写错误:
    1. 标准logistic公式应为 y = exp(a + b*x) / (1 + exp(a + b*x)),你漏写了分母的括号,逻辑变成了exp(.)/1 + exp(.),完全不符合公式定义
    2. R语言不支持隐式乘法,bx必须写为b*x
  • 表达式内的a、b变量未提前赋值,R无法识别变量来源

基础R curve() 实现方案

图1:固定b,展示不同a的曲线变化

# 固定b值,设定要测试的a的取值序列
b_fixed <- 1
a_list <- c(-4, -2, 0, 2, 4)
color_list <- c("red", "orange", "green", "blue", "purple")

# 先画第一条曲线
curve(expr = exp(a_list[1] + b_fixed * x) / (1 + exp(a_list[1] + b_fixed * x)), 
      from = -10, to = 10, n = 101, 
      col = color_list[1], lwd = 2,
      xlab = "x", ylab = "y", main = "Logistic曲线随a的变化(固定b=1)")

# 循环添加剩余a值对应的曲线
for (i in 2:length(a_list)) {
  curve(expr = exp(a_list[i] + b_fixed * x) / (1 + exp(a_list[i] + b_fixed * x)), 
        from = -10, to = 10, n = 101, 
        col = color_list[i], lwd = 2, add = TRUE)
}

# 添加图例
legend("topleft", legend = paste0("a=", a_list), col = color_list, lwd = 2)

图2:固定a,展示不同b的曲线变化

# 固定a值,设定要测试的b的取值序列
a_fixed <- 0
b_list <- c(-2, -1, 0, 1, 2)
color_list <- c("red", "orange", "green", "blue", "purple")

# 先画第一条曲线
curve(expr = exp(a_fixed + b_list[1] * x) / (1 + exp(a_fixed + b_list[1] * x)), 
      from = -10, to = 10, n = 101, 
      col = color_list[1], lwd = 2,
      xlab = "x", ylab = "y", main = "Logistic曲线随b的变化(固定a=0)")

# 循环添加剩余b值对应的曲线
for (i in 2:length(b_list)) {
  curve(expr = exp(a_fixed + b_list[i] * x) / (1 + exp(a_fixed + b_list[i] * x)), 
        from = -10, to = 10, n = 101, 
        col = color_list[i], lwd = 2, add = TRUE)
}

# 添加图例
legend("topleft", legend = paste0("b=", b_list), col = color_list, lwd = 2)

ggplot2 geom_function() 实现方案(更美观,图例自动生成)

图1:不同a值的曲线对比

library(ggplot2)

b_fixed <- 1
a_list <- c(-4, -2, 0, 2, 4)

ggplot(data.frame(x = c(-10, 10)), aes(x = x)) +
  lapply(1:length(a_list), function(i) {
    geom_function(fun = function(x) {exp(a_list[i] + b_fixed*x)/(1 + exp(a_list[i] + b_fixed*x))},
                  aes(color = as.factor(a_list[i])), linewidth = 1)
  }) +
  labs(color = "a取值", x = "x", y = "y", title = "Logistic曲线随a的变化(固定b=1)") +
  theme_minimal()

图2:不同b值的曲线对比

library(ggplot2)

a_fixed <- 0
b_list <- c(-2, -1, 0, 1, 2)

ggplot(data.frame(x = c(-10, 10)), aes(x = x)) +
  lapply(1:length(b_list), function(i) {
    geom_function(fun = function(x) {exp(a_fixed + b_list[i]*x)/(1 + exp(a_fixed + b_list[i]*x))},
                  aes(color = as.factor(b_list[i])), linewidth = 1)
  }) +
  labs(color = "b取值", x = "x", y = "y", title = "Logistic曲线随b的变化(固定a=0)") +
  theme_minimal()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:42:02