在 sigmoid 曲线中的不同点处找到斜率

机器算法验证 r 曲线拟合 不可缺少的 结石 S形曲线
2022-04-06 02:20:57

这是我的数据。

x <- c(0.5,3.0,22.2,46.0,77.3,97.0,98.9,100.0)
plot(x, pch = 19)

在此处输入图像描述

我想通过这些点拟合一条曲线,然后计算不同点的斜率。谁能告诉我如何在 R 中做到这一点

编辑

以前我安装了一个给我一个“最大”坡度的 Gompertz。我想知道其他点的斜率是多少。

1个回答

你的问题非常广泛。有很多方法可以做到这一点,即使没有假设特定的功能。对于以下内容,我假设您有充分的理由使用 Gompertz 模型。

首先让我们拟合模型:

y <- c(0.5,3.0,22.2,46.0,77.3,97.0,98.9,100.0)
x <- seq_along(y)
plot(x, y)

fit <- nls(y ~ SSgompertz(x, Asym, b2, b3), data = data.frame(x, y))
curve(predict(fit, newdata = data.frame(x)), add = TRUE)

结果图说明数据和拟合

现在,为了获得所需的斜率,您需要计算拟合函数的一阶导数。那是简单的高中数学。事实上,它非常简单,即使 R 也能做到,尽管它不是计算机代数系统。

#assign coefficients into global environment
list2env(as.list(coef(fit)), .GlobalEnv)
#create function that returns the gradient
dGomp <- deriv((y ~ Asym*exp(-b2*b3^x)), "x", func = TRUE)

#the model slopes:
c(attr(dGomp(x), "gradient"))
##[1]  0.1010109  6.9594864 27.3791349 31.0194397 20.4539646 10.6588397  5.0141801  2.2561393