在选择最佳拟合实验数据的方程时,可能需要一些经验。当我们没有文献信息时该怎么办?
我们建立模型的方法通常是经验主义的。也就是说,我们观察过程,绘制数据并注意到它们遵循一定的模式。
例如,我们的客户可能观察到一种植物对某种毒性物质的反应是S形的。因此,我们需要一个S形函数来拟合我们的数据,但是,我们如何选择正确的方程呢?
我认为列出最常见的方程以及它们的主要特性和参数的意义可能会有用。因此,我还将给出相应的R函数。
非线性回归的一个问题是它以迭代方式工作:我们需要提供模型参数的初始猜测值,算法逐步调整这些值,直到(有希望)收敛到近似最小二乘解。根据我的经验,提供初始猜测可能会很麻烦。因此,使用包含R函数非常方便,这可以极大地简化拟合过程。
让我们加载必要的包。
library(nlme)
曲线形状
曲线可以根据其形状进行简单分类,这对于选择正确的曲线来研究过程非常有帮助。我们有:
多项式
- 线性方程
- 二次多项式
凹/凸曲线(无拐点)
- 指数方程
- 渐近方程
- 负指数方程
- 幂曲线方程
- 对数方程
- 矩形双曲线
Sigmoid 曲线
- 逻辑方程
- Gompertz 方程
- 对数-逻辑方程(Hill 方程)
- Weibull 类型 1
- Weibull 类型 2
具有最大值的曲线
- Brain-Cousens 方程
多项式
多项式是描述生物过程的最灵活的工具。它们简单,并且虽然是曲线状的,但它们在参数上是线性的,并且可以通过使用线性回归来拟合。一个缺点是它们不能描述渐近过程,而这在生物学中非常常见。此外,它们容易过度拟合,因为我们可能会试图添加项来改善拟合,而很少关心生物现实性。
视频
非线性模型原理与R语言多项式回归、局部平滑样条、 广义相加模型GAM分析
视频
逻辑回归Logistic模型原理和R语言分类预测冠心病风险实例
线性方程
显然,这不是一条曲线,尽管值得在这里提到。方程为:
![image.png](https://img-blog.csdnimg.cn/img_convert/8f245d17fd642be542ca6b0f38454930.png)
其中 b0 是当 X = 0 时 Y 的值,b1 是斜率,即 X 增加/减少一个单位时 Y 的增加/减少。当 b1>0 时,Y 随着 X 的增加而增加,否则随之减少。
二次方程
该方程为:
![image.png](https://img-blog.csdnimg.cn/img_convert/e4a950c47b1c4580374aa0dfe9c11ff7.png)
其中,当 X=0 时, b0 是 Y 的值,当 X=0 时, b1和 b2 各自没有明确的生物学意义。然而,考虑到一阶导数为:
![image.png](https://img-blog.csdnimg.cn/img_convert/f3f6f764fe77e4c2380abba4846b2f6e.png)
它测量了在 X 增加一个单位时 Y 的增加/减少。我们可以看到这种增加/减少不是恒定的,而是根据 X 的水平而变化。
在最大值/最小值处,响应为:
![image.png](https://img-blog.csdnimg.cn/img_convert/ced117f547088812b53ac280981e38fe.png)
R 中的多项式拟合
在 R 中,可以使用线性模型函数 ‘lm()’ 进行多项式拟合。虽然这不是高效的方法,但在某些情况下,我发现自己需要使用 ‘nls()’ 或 ‘drm()’ 函数进行多项式拟合。
![image.png](https://img-blog.csdnimg.cn/img_convert/e23c651921176578900c8258eaefcc9b.png)
其他可能的参数化形式包括:
![image.png](https://img-blog.csdnimg.cn/img_convert/7c247217135190b270ae337df98ef18d.png)
上述参数化形式是等价的,可以通过设置
![image.png](https://img-blog.csdnimg.cn/img_convert/72d3d6157dfae5f56d58216c6aceedda.png)
![image.png](https://img-blog.csdnimg.cn/img_convert/cdd97f66602b9fd2068123d9834f686a.png)
以及
![image.png](https://img-blog.csdnimg.cn/img_convert/b14c6a342c91c4ebcbb9b8af87c746dc.png)
参数的含义很明确:当 X=0 时, a 是 Y 的值,而 k 表示 X 增加一个单位对 Y 的相对增加/减少。如果我们计算指数函数的一阶导数:
随时关注您喜欢的主题
D( expression(a * exp(k * X)), "X")
![image.png](https://img-blog.csdnimg.cn/img_convert/fd7100c2240bec7b883dc175386e7821.png)
从上面我们可以得出结论:通过 X 绘制的切线的斜率为 k,也就是 (k, Y)。因此,Y 增加的量与其实际水平成比例。
moel <- drm(Cnc ~ ime fc = DRC.pDcay(),
daa =eradion)
sumay(mdel)
![image.png](https://img-blog.csdnimg.cn/img_convert/8a03de9959d47e52a463509a80795897.png)
plt(mdel, log="")
![image.png](https://img-blog.csdnimg.cn/img_convert/c412697c4f5f8aaeb201339dc3de6d87.png)
‘drc’ 包还包含 ‘EXD.2()’ 函数,它拟合了一个稍微不同参数化的指数衰减模型:
![image.png](https://img-blog.csdnimg.cn/img_convert/717342af8471723c5be013f599c76426.png)
其中,d与上述模型中的a相同,e=1/k。
![image.png](https://img-blog.csdnimg.cn/img_convert/7003345cc5b2f454e5e33c2c09a34f93.png)
我将同时展示EXD.2(蓝色曲线)和EXD.3(红色曲线)的示例。
curve(EX.fun(x, 0, 100, -1/0.05), col="blue", xlab = "X",
xlim = c(0, 100), ylim = c(0,100))
curve(EXD.fn(x, 20, 100, -1/0.05), col="red", add = T)
![image.png](https://img-blog.csdnimg.cn/img_convert/a313c1c1b2addb5e2c07eeefed56b270.png)
渐近回归模型
渐近回归模型描述了有限增长,其中当X趋于无穷大时,Y趋近于一个水平渐近线。
这个方程有多种不同的参数化形式,也被称为单分子生长、Mitscherlich定律或von Bertalanffy定律。
由于其生物学意义,最常见的参数化形式是:
![image.png](https://img-blog.csdnimg.cn/img_convert/8961e2d393c97289a678d9094b2027a3.png)
其中a是最大可达到的Y,b是x=0时Y的值为0,c与Y随X增加而相对速率成比例。事实上,我们可以看出它的一阶导数是:
D(exeion(a - (a - b) * exp (- c * X)), "X")
![image.png](https://img-blog.csdnimg.cn/img_convert/b69f46ba9a037d8cf8a60749971bbfb2.png)
即:
![image.png](https://img-blog.csdnimg.cn/img_convert/1f9db99cc8db411bfbc4316cc7b14d4b.png)
我们可以看到生长的相对速率并不是常数(如指数模型中),而是在Y=0时最大,并随着Y的增加而减小。
让我们模拟一个示例。
model <- rmY ~ X, fct = DC.seg())
plot(odl, log="", main = "渐近回归")
![image.png](https://img-blog.csdnimg.cn/img_convert/ed77bd831c04e07f55cecabbe0044f82.png)
负指数方程
如果我们在上述方程中加上限制条件b=0,我们得到以下方程,通常被称为“负指数方程”:
![image.png](https://img-blog.csdnimg.cn/img_convert/0d7b6121f09c9caa02bd84ccd5eb0975.png)
这个方程的形状与渐近回归类似,但当X=0时,Y=0(曲线通过原点)。它通常用于建模吸收的光合有效辐射(Y=PARa)与入射光合有效辐射(a=PARi)、叶面积指数(X=LAI)和消光系数(c=k)之间的关系。
幂函数曲线
幂函数曲线也被称为弗洛伊德方程或者等比方程,最常用的参数化形式如下:
![image.png](https://img-blog.csdnimg.cn/img_convert/cc1245ef0115a23db7efae6a93404467.png)
这个曲线与X的对数上的指数曲线等效,实际上可以表示为:
![image.png](https://img-blog.csdnimg.cn/img_convert/99a46bd6ffcb6f43378311e4b4834472.png)
对于X→∞,曲线并没有渐近线。斜率(一阶导数)为:
D(expessin(a * X^b), "X")
![image.png](https://img-blog.csdnimg.cn/img_convert/1a595f72e2135d182449eaa3766aa730.png)
我们可以看到两个参数与曲线的斜率有关,b决定了曲线的形状。当0<−b<1时,随着X的增加,Y也会增加,曲线呈现凸向上的形状。例如,这个模型可以用于根据采样面积来建模植物物种数量(Muller-Dumbois方法)。
moel <- dm(nuSces ~ Aea, fct = DCowrve(),
data = speAra)
summary(mdel)
![image.png](https://img-blog.csdnimg.cn/img_convert/96d3b7c44b0c05d02539944e3fff2d9f.png)
plot(oel, log="")
![image.png](https://img-blog.csdnimg.cn/img_convert/36d87a8e2ffb094bf244534ae9f64ec6.png)
如果b<0,曲线将呈现凹向上的形状,Y随着X的增加而减少。
curve
![image.png](https://img-blog.csdnimg.cn/img_convert/4ca759f1b1de06a6afa3e154b61c5f9d.png)
如果b>1且为负数,曲线将呈现凹向上的形状,Y随着X的增加而增加。
curve(powerC
![image.png](https://img-blog.csdnimg.cn/img_convert/4dd78790b48438e3632e3f1929864f3b.png)
对数方程
这确实是一个对数转化后的线性模型:
可以使用 ‘lm()’ 函数来拟合对数方程。
![image.png](https://img-blog.csdnimg.cn/img_convert/6abe9e9b50793f14e4f5097d1838fa2d.png)
# b 是正值
model <- lm(Y ~ log(X) )
summary(model)
![image.png](https://img-blog.csdnimg.cn/img_convert/0d8847ce7bad1969dd93d2d490f89120.png)
summary(model)
![image.png](https://img-blog.csdnimg.cn/img_convert/d9754fca8d7e4a63c1d0ec7015e42181.png)
plot(model,
![image.png](https://img-blog.csdnimg.cn/img_convert/8a4486faa8dc3b0cc0075a9aa8e97b6e.png)
# b 是负值
X <- c(1,2,4,5,7,12)
a <- 2; b <- -0.5
summary(model)
![image.png](https://img-blog.csdnimg.cn/img_convert/1de8de481448f25373b487c7657c33ce.png)
plot(model, log="",
![image.png](https://img-blog.csdnimg.cn/img_convert/26982c18cebd931ff968864901c73b53.png)
Michaelis-Menten方程
这是一个双曲线形状的方程,通常参数化为:
![image.png](https://img-blog.csdnimg.cn/img_convert/7aa11ac2742792441ab42707f0f68530.png)
事实上,很容易证明:
![image.png](https://img-blog.csdnimg.cn/img_convert/8c166988b4a4b8957da82edd462c0697.png)
斜率(一阶导数)为:
D(expression( (a*X) / (b + X) ), "X")
![image.png](https://img-blog.csdnimg.cn/img_convert/21eea539f7c27ed285c4a2243516c2f7.png)
res <- rnorm(8, 0, 0.1)
Y <- Ye + res
# nls拟合
mol <- nls(Y ~ SSien(X, a, b))
summary(model)
![image.png](https://img-blog.csdnimg.cn/img_convert/83deabf8770b198726ddf018c2e09a93.png)
# drm拟合
summary(model)
![image.png](https://img-blog.csdnimg.cn/img_convert/9274068ab185e3a90154f7db41154aae.png)
plot(model, log="", main = "Mic
![image.png](https://img-blog.csdnimg.cn/img_convert/a0cda9891f1ad79340ffbbd3fede1ec0.png)
“drc”包还包含自启动函数 “MM.3()”,其中当 X=0 时,允许 Y ≠ c ≠ 0。
产量损失/密度曲线
杂草与农作物竞争研究使用重新参数化的Michaelis-Menten模型。实际上,Michaelis-Menten的初始斜率可以被视为竞争的测量,即在首次添加杂草到系统中时产量(Y)的减少。因此,将Michaelis-Methen模型重新参数化以将i=a/b=α/β作为显式参数进行描述。重新参数化的方程为:
![image.png](https://img-blog.csdnimg.cn/img_convert/a5685cbc2144c42470fcfe5cbbd480b4.png)
该模型可用于描述杂草密度对产量损失的影响。因此需要使用无杂草的产量和以下方程来计算产量损失(百分比):
![image.png](https://img-blog.csdnimg.cn/img_convert/a6bd89f4ee26d296482c294cf5cba3ee.png)
其中,YW是观测到的产量,YWF是无杂草的产量。下面以日葵种植在增加密度的Sinapis arvensis杂草中的情况为例进行说明。
competition$YL <- (Ywf - competition$Yield) / Ywf * 100
# nls拟合
summary(model)
![image.png](https://img-blog.csdnimg.cn/img_convert/4e403251f3a7a44987c873f97cb61fa5.png)
# drm拟合
summary(model)
![image.png](https://img-blog.csdnimg.cn/img_convert/aaa69709a133939de63abbb520b22375.png)
plot(model, log="
![image.png](https://img-blog.csdnimg.cn/img_convert/c270bb31233969dd28eaa74ed1727015.png)
上述拟合约束了当杂草密度为0时,产量损失为0。
确实,从上述方程我们推导出:
![image.png](https://img-blog.csdnimg.cn/img_convert/453ec8c26cb8fe231323e4facb21f309.png)
和所示:
![image.png](https://img-blog.csdnimg.cn/img_convert/0a41dfb427e50e2b2330025eb000d692.png)
model <- dr
summary(model)
![image.png](https://img-blog.csdnimg.cn/img_convert/a8a61f81c0ec61c2673b89bd6a022c1a.png)
plot(model
![image.png](https://img-blog.csdnimg.cn/img_convert/64c07020491e6c38b2d3f0752d024bc7.png)
S 型曲线
S 型曲线具有 S 形状,可以是递增、递减、对称或非对称的。它们有许多参数化方法,有时可能让人困惑。因此,我们将展示一种常见的参数化方法,这在生物学方面非常有用。
逻辑曲线
逻辑曲线来源于累积逻辑分布函数;曲线在拐点处对称,并可以参数化为:
![image.png](https://img-blog.csdnimg.cn/img_convert/5b03ae393c5c56e69bf642c92362857e.png)
其中,d 是上渐近线,c 是下渐近线,e 是在 d 和 c 之间产生响应的 X 值,而 b 是拐点附近的斜率。参数 b 可以是正数或负数,因此 Y 可以随着 X 的增加而增加或减少。
逻辑函数非常有用,例如用于植物生长研究。
model <- dm(weightFree ~ DAE, fct =
sum
![image.png](https://img-blog.csdnimg.cn/img_convert/afd9278405344fc6e2f58d5f38c2729d.png)
plot(model, log="",
![image.png](https://img-blog.csdnimg.cn/img_convert/d6c3ab7f202b2d85c5251dff093d40eb.png)
Gompertz 曲线
Gompertz 曲线有许多参数化方法。我们倾向于使用与逻辑函数相似的参数化方法:
![image.png](https://img-blog.csdnimg.cn/img_convert/4a3af6484aecd99990bf9239d3374103.png)
其中参数的含义与逻辑函数中的参数相同。不同之处在于该曲线在拐点处不对称。
另一种不对称性
我们已经看到,相对于逻辑函数,Gompertz 函数在开始时呈现更长的延迟,但之后稳步上升。我们可以通过以下方式更改 Gompertz 函数来描述不同的模式:
![image.png](https://img-blog.csdnimg.cn/img_convert/915c3aea2d850c87443b9c1c8fd74628.png)
该函数的自启动函数尚不可用,至少在我所知道的范围内。此外,我也不知道这个函数的特定名称。
通过在图表中比较这三个逻辑函数,我们可以看到它们在偏斜和对称性方面的差异。
curve( E.fun(x, b, c, d, e), add = T, col = "blue" )
legen
![unnamed-chunk-18-1.png](https://img-blog.csdnimg.cn/img_convert/0fd53c782396c6b083220b6f3c9b167f.png)
基于对数的 S 型曲线
在生物学中,测量的数值通常是严格为正的(时间、重量、高度、计数)。因此,使用对非正数也定义的函数可能看起来不现实。因此,通常更倾向于使用独立变量 X 被限制为正的函数。所有上述描述的 S 型曲线都可以基于 X 的对数进行,这样我们可以得到更现实的模型。
对数-逻辑曲线
在许多应用中,S 型响应曲线在 x 的对数上是对称的,这需要一个对数-逻辑曲线(对数正态曲线实际上几乎等效,但很少使用)。例如,在生物测定中(但也在萌发测定中),对数-逻辑曲线定义如下:
![image.png](https://img-blog.csdnimg.cn/img_convert/179fcc01f39c25a344784c0b980f0836.png)
参数的含义与上述逻辑方程中的含义相同。很容易看出上述方程等价于:
![image.png](https://img-blog.csdnimg.cn/img_convert/77ad00dff39728eecd8628b1d9106a40.png)
另一种可能的参数化方法是所谓的 Hill 函数:
![image.png](https://img-blog.csdnimg.cn/img_convert/330ce369850e9473424ca2e8070470ed.png)
确实:
![image.png](https://img-blog.csdnimg.cn/img_convert/839db0bc2a18d48aa6018821d90678f9.png)
对数-逻辑函数用于作物生长、种子萌发和生物测定,它们可以具有与逻辑函数相同的约束条件。
我们展示了一个基于对数-逻辑拟合的示例,涉及到对一个除草剂处理的甘蓝菜生物测定中不断增加剂量的关系。
model fct = LL.4(), data = bra
summary(model)
![image.png](https://img-blog.csdnimg.cn/img_convert/1f35c94b2632612c768ace7538b55986.png)
plot(model, main = "对数-逻辑方程")
![image.png](https://img-blog.csdnimg.cn/img_convert/235af4c869e4757a2085294be21dd407.png)
Weibull 曲线(类型 1)
类型 1 Weibull 曲线与替代 Gompertz 曲线的对数-逻辑曲线相似。方程如下:
![image.png](https://img-blog.csdnimg.cn/img_convert/4ca0b29515994a361c293bd45dd8a9aa.png)
参数与上述其他 S 型曲线的含义相同。
Weibull 曲线(类型 2)
类型 2 Weibull 曲线与 Gompertz 曲线的对数-逻辑曲线相似。方程如下:
![image.png](https://img-blog.csdnimg.cn/img_convert/9b46ceb0981552392188741cccf8052a.png)
参数与上述其他 S 型曲线的含义相同。
我们将对这些 Weibull 曲线拟合数据集。
plot(model, main = "Weibulltions")
plo
![image.png](https://img-blog.csdnimg.cn/img_convert/57a7c71041b67399dc96f0efb5c54de2.png)
可下载资源
关于作者
Kaizong Ye是拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。
本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。
非常感谢您阅读本文,如需帮助请联系我们!