拟合和比较 R 中的多个 sigmoid 曲线

Posted

技术标签:

【中文标题】拟合和比较 R 中的多个 sigmoid 曲线【英文标题】:Fit and compare multiple sigmoid curves in R 【发布时间】:2017-06-20 07:07:13 【问题描述】:

我想一次拟合多条曲线,并根据它们的 3 个估计参数——渐近线、斜率和 x0 对它们进行统计比较。 这是要建模的数据的理想化图像:

大多数可搜索页面都会找到适合单个曲线的方法,如下所示: http://kyrcha.info/2012/07/08/tutorials-fitting-a-sigmoid-function-in-r/ 和这里 http://rstudio-pubs-static.s3.amazonaws.com/7812_5327615eb0044cf29420b955ddaa6173.html

就我而言,我想(统计地)测试改变变量级别对 sigmoid 的三个参数的影响。也就是说,当我拟合这个模型时:

model <- nls(y ~ asym / (1 + exp( -slope * (x – x0) ) ), start = c(…), data = my_data)

我想添加两个因子(例如,“因子A”和“因子B”)与每个不对称、斜率和 x0 项的交互,我们可以使用 @987654326 的方式@ 或 glm(),如下所示:

model_int <- nls(y ~ asym*factorA / (1 + exp( -(slope*factorA) * (x – (x0*factorA) ) ), start = c(…), data = my_data)

这样,我可以查看这三个参数在不同级别的因子 A(以及可能的多个其他因子,如您从图像中看到的)在统计上是否存在差异。例如,我们可以看到“条件”对曲线的渐近线有影响。

我之前使用 虚拟编码 对每个交互变量的每个级别进行了此操作,但这不是直接测试这些变量的方法,并且随着模型的发展而变得相当冗长。它看起来像这样:

model_dummy <- nls(y ~ (asym+ asym.L1 * is.L1 + asym.l2*is.L2) / 
(1 + exp( -slope * (x – (x0 + x0.L1 * is.L1 + x0.L2 * is.L2) ) ) ), 
start = c(…), data = my_data)

正如您可能猜到的那样,这种方法在整洁和缺乏可解释性方面有明显的缺点。

有谁知道如何拟合一组 sigmoid,其中参数与数据集中的变量相互作用以产生形状略有不同的曲线?

【问题讨论】:

你找到解决办法了吗? 【参考方案1】:

好吧,我不确定这是否是您要查找的内容,但 nls 函数中的此示例可能对您有所帮助:

> head(muscle)
   Strip Conc Length
3    S01    1   15.8
4    S01    2   20.8
5    S01    3   22.6
6    S01    4   23.8
9    S02    1   20.6
10   S02    2   26.8
# get some initial values
musc.1 <- nls(Length ~ cbind(1, exp(-Conc/th)), muscle,
              start = list(th = 1), algorithm = "plinear")
summary(musc.1)

# and now with factor Strip
b <- coef(musc.1)
musc.2 <- nls(Length ~ a[Strip] + b[Strip]*exp(-Conc/th), muscle,
              start = list(a = rep(b[2], 21), b = rep(b[3], 21), th = b[1]))
summary(musc.2)

所以在你的情况下,它会是这样的:

fit <- nls(y ~ asym[Factor]/ (1 + exp(-slope[Factor]*(x –x0[Factor]))), start = c(…), data = my_data)

希望对你有帮助

【讨论】:

以上是关于拟合和比较 R 中的多个 sigmoid 曲线的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 将 sigmoid 函数(“S”形曲线)拟合到数据中

将密度曲线拟合到R中的直方图

机器学习-sigmoid函数

r语言多个gam拟合图怎么放在 一个坐标里

R语言绘制生存曲线95%区间

scikits.learn 曲线拟合参数的聚类方法