我想一次拟合多条曲线,并根据它们的 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)
我想添加两个因素(例如,“factorA”和“factorB”)与每个 asym、slope 和 x0 项的交互,我们可以使用lm()
or的方式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,其中参数与数据集中的变量相互作用以产生形状略有不同的曲线?