You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用R语言通过三点(含中点(2,5))拟合特定逻辑斯蒂曲线

嘿,这个问题其实挺直观的——既然你已经明确了(2,5)是中点,我们可以从标准对称逻辑斯蒂曲线的结构出发,直接推导出所有参数,再用R来实现曲线的绘制和验证。

1. 确定逻辑斯蒂曲线的参数形式

我们采用对称型的逻辑斯蒂模型,公式如下:
y = L / (1 + exp(-k*(x - x0)))
其中:

  • x0 是曲线的中点x值,题目里已经给出是2;
  • x=x0时,y = L/2(这是逻辑斯蒂曲线的特性:中点处的y值是渐近最大值L的一半)。已知此时y=5,所以直接可得L = 10
  • 剩下的参数k可以用另外两个已知点(比如(1,4))代入求解。
2. 推导参数k

把(1,4)、x0=2L=10代入公式计算:

4 = 10 / (1 + exp(-k*(1-2)))
→ 4 = 10 / (1 + exp(k))
→ 1 + exp(k) = 10/4 = 2.5
→ exp(k) = 1.5
→ k = ln(1.5) ≈ 0.4055

我们可以用(3,6)验证一下:代入x=3,得到y=10/(1+exp(-0.4055*(3-2)))=10/(1+1/1.5)=6,完全匹配!

3. 用R实现曲线与可视化

既然参数都确定了,我们可以直接定义函数并绘图:

# 定义逻辑斯蒂函数
logistic_curve <- function(x) {
  L <- 10
  k <- log(1.5)
  x0 <- 2
  L / (1 + exp(-k*(x - x0)))
}

# 生成连续的x序列用于绘图
x_vals <- seq(0, 4, by = 0.1)
y_vals <- logistic_curve(x_vals)

# 绘制曲线并标注已知点
plot(x_vals, y_vals, type = "l", lwd = 2, col = "#2c3e50",
     xlab = "x", ylab = "y", main = "拟合的特定逻辑斯蒂曲线")
points(c(1, 2, 3), c(4, 5, 6), pch = 16, col = "#e74c3c", cex = 1.2)
legend("topleft", legend = c("拟合曲线", "已知点"),
       col = c("#2c3e50", "#e74c3c"), lty = c(1, NA), pch = c(NA, 16), lwd = 2)
4. 用非线性拟合函数验证(可选)

如果你想用R的非线性最小二乘法工具nls来拟合验证(即使参数是确定的),也可以这么做:

# 准备数据框
data_points <- data.frame(x = c(1, 2, 3), y = c(4, 5, 6))

# 拟合模型,初始值用我们推导的参数
fit_model <- nls(y ~ L/(1 + exp(-k*(x - x0))), data = data_points,
                 start = list(L = 10, k = 0.4, x0 = 2))

# 查看拟合结果
summary(fit_model)

运行后你会发现,拟合出的参数和我们手动推导的完全一致——毕竟三个点刚好能唯一确定这条对称逻辑斯蒂曲线的所有参数。

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

火山引擎 最新活动