• R语言非线性方程数值分析生物降解、植物生长数据:多项式、渐近回归、米氏方程、逻辑曲线、Gompertz、Weibull曲线...


    全文链接:https://tecdat.cn/?p=33742

    在选择最佳拟合实验数据的方程时,可能需要一些经验。当我们没有文献信息时该怎么办?我们建立模型的方法通常是经验主义的。也就是说,我们观察过程,绘制数据并注意到它们遵循一定的模式点击文末“阅读原文”获取完整代码数据)。

    相关视频

    简介

    例如,我们的客户可能观察到一种植物对某种毒性物质的反应是S形的。因此,我们需要一个S形函数来拟合我们的数据,但是,我们如何选择正确的方程呢?

    我认为列出最常见的方程以及它们的主要特性和参数的意义可能会有用。因此,我还将给出相应的R函数。

    非线性回归的一个问题是它以迭代方式工作:我们需要提供模型参数的初始猜测值,算法逐步调整这些值,直到(有希望)收敛到近似最小二乘解。根据我的经验,提供初始猜测可能会很麻烦。因此,使用包含R函数非常方便,这可以极大地简化拟合过程。

    让我们加载必要的包。

    library(nlme)

    曲线形状

    曲线可以根据其形状进行简单分类,这对于选择正确的曲线来研究过程非常有帮助。我们有:

    • 多项式

    1. 线性方程

    2. 二次多项式

    凹/凸曲线(无拐点)

    1. 指数方程

    2. 渐近方程

    3. 负指数方程

    4. 幂曲线方程

    5. 对数方程

    6. 矩形双曲线

    Sigmoid 曲线

    1. 逻辑方程

    2. Gompertz 方程

    3. 对数-逻辑方程(Hill 方程)

    4. Weibull 类型 1

    5. Weibull 类型 2

    具有最大值的曲线

    1. Brain-Cousens 方程


    多项式

    多项式是描述生物过程的最灵活的工具。它们简单,并且虽然是曲线状的,但它们在参数上是线性的,并且可以通过使用线性回归来拟合。一个缺点是它们不能描述渐近过程,而这在生物学中非常常见。此外,它们容易过度拟合,因为我们可能会试图添加项来改善拟合,而很少关心生物现实性。


    线性方程

    显然,这不是一条曲线,尽管值得在这里提到。方程为:

    20f651d41f167bf36113dd5873b4d65f.png

    其中 b0 是当 X = 0 时 Y 的值,b1 是斜率,即 X 增加/减少一个单位时 Y 的增加/减少。当 b1>0 时,Y 随着 X 的增加而增加,否则随之减少。

    二次方程

    该方程为:

    da83e39ecc61319fb60b8027709da480.png

    其中,当 X=0 时, b0 是 Y 的值,当 X=0 时, b1和 b2 各自没有明确的生物学意义。然而,考虑到一阶导数为:

    97bea8011a43782657ed885d8542d4da.png

    它测量了在 X 增加一个单位时 Y 的增加/减少。我们可以看到这种增加/减少不是恒定的,而是根据 X 的水平而变化。

    在最大值/最小值处,响应为:

    1916cafe89e59d9ffdc6de841407ac7f.png

    R 中的多项式拟合

    在 R 中,可以使用线性模型函数 'lm()' 进行多项式拟合。虽然这不是高效的方法,但在某些情况下,我发现自己需要使用 'nls()' 或 'drm()' 函数进行多项式拟合。


    凹/凸曲线

    让我们进入非线性领域。凹/凸曲线描述了非线性关系,通常带有渐近线和无拐点。我们将列出以下最常用的曲线类型。


    指数方程

    指数方程描述了递增/递减的趋势,具有恒定的相对速率。最常见的参数化形式是:

    92c274a42e3bc09397a707e5647011c1.png

    其他可能的参数化形式包括:

    9d9641148787eb03fe2880b4f963798e.png

    上述参数化形式是等价的,可以通过设置

    0b226c4e171f0dd369a98eb582e7c8f7.png

    a2affd16d032b359576c756f7889acb5.png

    以及

    eed1b86dc8a3b4be2f15812efe003928.png

    参数的含义很明确:当 X=0 时, a 是 Y 的值,而 k 表示 X 增加一个单位对 Y 的相对增加/减少。如果我们计算指数函数的一阶导数:

    D( expression(a * exp(k * X)), "X")

    7f0f2a018596bfd8877aea7e797b3b56.png

    从上面我们可以得出结论:通过 X 绘制的切线的斜率为 k,也就是 (k, Y)。因此,Y 增加的量与其实际水平成比例。

    1. moel <- drm(Cnc ~ ime fc = DRC.pDcay(),
    2. daa =eradtion)
    3. sumay(mdel)

    eeda9b8cdd7afc40a13949aedce59b68.png

    plt(mdel, log="")

    69beb4bfad8382f967abf8b48a4fb8c8.png

    'drc' 包还包含 'EXD.2()' 函数,它拟合了一个稍微不同参数化的指数衰减模型:

    90db7c719559c6f392e8c76ff731beca.png

    其中,d与上述模型中的a相同,e=1/k。

    3c091280123d0a294dd85d11c21a6955.png

    我将同时展示EXD.2(蓝色曲线)和EXD.3(红色曲线)的示例。

    1. R
    2. curve(EXD.fun(x, 0, 100, -1/0.05), col="blue", xlab = "X",
    3. ylab = "Y", main = "指数衰减",
    4. xlim = c(0, 100), ylim = c(0,100))
    5. curve(EXD.fun(x, 20, 100, -1/0.05), col="red", add = T)

    6b1d5d33453c8992001fbe1bf3671b1d.png


    点击标题查阅往期内容

    4c6a1463c6ba937a8f93c245b54f2841.jpeg

    R语言nlme、nlmer、lme4用(非)线性混合模型non-linear mixed model分析藻类数据实例

    outside_default.png

    左右滑动查看更多

    outside_default.png

    01

    88d9ab42d73a2e261aab613a2e5f8bf0.png

    02

    9d0040c8e04e3cf6cbdb330fc259e784.png

    03

    56919837f9be547776d868aae681bd7a.png

    04

    b5ed472cafcfff64f2424f2d8a360efa.png

    渐近回归模型

    渐近回归模型描述了有限增长,其中当X趋于无穷大时,Y趋近于一个水平渐近线。这个方程有多种不同的参数化形式,也被称为单分子生长、Mitscherlich定律或von Bertalanffy定律。

    由于其生物学意义,最常见的参数化形式是:

    c77ba0b08411d0682958066bd1969b95.png

    其中a是最大可达到的Y,b是x=0时Y的值为0,c与Y随X增加而相对速率成比例。事实上,我们可以看出它的一阶导数是:

    1. R
    2. D(exesion(a - (a - b) * exp (- c * X)), "X")

    641148c3336a1d57ae15314ba7858857.png

    即:

    cc2114663e4e42272382e1cb67d2d0e6.png

    我们可以看到生长的相对速率并不是常数(如指数模型中),而是在Y=0时最大,并随着Y的增加而减小。

    让我们模拟一个示例。

    1. R
    2. model <- rmY ~ X, fct = DC.syReg())
    3. plot(odl, log="", main = "渐近回归")

    85547bba1884a3a0361c66da8b5306f3.png

    负指数方程

    如果我们在上述方程中加上限制条件b=0,我们得到以下方程,通常被称为“负指数方程”:

    dddc004a67169d56d77623f75e2443a2.png

    这个方程的形状与渐近回归类似,但当X=0时,Y=0(曲线通过原点)。它通常用于建模吸收的光合有效辐射(Y=PARa)与入射光合有效辐射(a=PARi)、叶面积指数(X=LAI)和消光系数(c=k)之间的关系。


    幂函数曲线

    幂函数曲线也被称为弗洛伊德方程或者等比方程,最常用的参数化形式如下:

    4ab2223b4241f0551f72e0129d80fdce.png

    这个曲线与X的对数上的指数曲线等效,实际上可以表示为:

    ca81c07b2026c69ada29beacd155a006.png

    对于X→∞,曲线并没有渐近线。斜率(一阶导数)为:

    D(expression(a * X^b), "X")

    e73f75afb3ed0ae3e5f0852bf5358e6e.png

    我们可以看到两个参数与曲线的斜率有关,b决定了曲线的形状。当0<−b<1时,随着X的增加,Y也会增加,曲线呈现凸向上的形状。例如,这个模型可以用于根据采样面积来建模植物物种数量(Muller-Dumbois方法)。

    1. moel <- drm(nuSces ~ Aea, fct = DCowCurve(),
    2. data = spieAra)
    3. summary(mdel)

    1512e86636f07b48d84219e3aae3289a.png

    plot(oel, log="")

    05c83b2872fc4a2a7f60a0f431fd1f27.png

    如果b<0,曲线将呈现凹向上的形状,Y随着X的增加而减少。

    curve

    f2f6c281c5385849e1df543c75dac4b2.png

    如果b>1且为负数,曲线将呈现凹向上的形状,Y随着X的增加而增加。

    curve(powerC

    c2b7baad0205eae8fe383f0450d5307b.png

    对数方程

    这确实是一个对数转化后的线性模型:

    1d80b1898f91c05dc616e9afb40b7bc9.png

    可以使用 'lm()' 函数来拟合对数方程。

    1. # b 是正值
    2. model <- lm(Y ~ log(X) )
    3. summary(model)

    17f8efcd6cae796cb11f6815e4a3d53b.png

    summary(model)

    bd32a96ffe3f6029cfc1d5b1f48d57f6.png

    plot(model,

    1d3ca20617801bbfa336e9a8377905cc.png

    1. # b 是负值
    2. X <- c(1,2,4,5,7,12)
    3. a <- 2; b <- -0.5
    4. summary(model)

    8a50e44a8a80eec04d13b4523cb11024.png

    plot(model, log="",

    4b15b2027e3d909923e8e38aba3d53f7.png

    Michaelis-Menten方程

    这是一个双曲线形状的方程,通常参数化为:

    0379852a9fc9c20e8cb73cf33b5857b9.png

    这条曲线朝上凸起,随着X′ 的增加而增加,直到达到一个平台水平。参数a′ 表示高位渐近线(对于X→∞),而b′ 是使得响应等于a/2的X值。事实上,很容易证明:

    19d9e413e93ee2c4d69fd23993a28912.png

    由此可得,b=x50=50。

    斜率(一阶导数)为:

    D(expression( (a*X) / (b + X) ), "X")

    1715314778eb9e256bf4ad206c913d37.png

    从这里可以看出,初始斜率(在X=0时)为 i=a/b。

    1. {r}
    2. res <- rnorm(8, 0, 0.1)
    3. Y <- Ye + res
    4. # nls拟合
    5. mol <- nls(Y ~ SSien(X, a, b))
    6. summary(model)

    11147a90c8e682015b00ea690b06bb31.png

    1. {r}
    2. # drm拟合
    3. summary(model)

    360eceae83a450b2832eee7d37bb25af.png

    1. {r}
    2. plot(model, log="", main = "Mic

    c149293dd17bfaadd42649b4caaef0b4.png

    "drc"包还包含自启动函数 "MM.3()",其中当 X=0 时,允许 Y ≠ c ≠ 0。


    产量损失/密度曲线

    杂草与农作物竞争研究使用重新参数化的Michaelis-Menten模型。实际上,Michaelis-Menten的初始斜率可以被视为竞争的测量,即在首次添加杂草到系统中时产量(Y)的减少。因此,将Michaelis-Methen模型重新参数化以将i=a/b=α/β作为显式参数进行描述。重新参数化的方程为:

    44f0b805d9b64889fc33c7a2c4a89964.png

    该模型可用于描述杂草密度对产量损失的影响。因此需要使用无杂草的产量和以下方程来计算产量损失(百分比):

    9267a8f0a2002ff24669b87fb763e61e.png

    其中,YW是观测到的产量,YWF是无杂草的产量。下面以日葵种植在增加密度的Sinapis arvensis杂草中的情况为例进行说明。

    1. {r}
    2. competition$YL <- (Ywf - competition$Yield) / Ywf * 100
    3. # nls拟合
    4. summary(model)

    c4bcb2d759ed2523ddf898967eb02284.png

    1. {r}
    2. # drm拟合
    3. summary(model)

    f1124179ad89685a4ce8c826c60d1059.png

    1. {r}
    2. plot(model, log="

    15986613a2d491d877a6fc6929845d90.png

    上述拟合约束了当杂草密度为0时,产量损失为0。

    确实,从上述方程我们推导出:

    2dfdc9d9be711eb960c09c9c0ed229ba.png

    和所示:

    66e8842337b3b0e5ca778d01c3a57148.png

    1. model <- dr
    2. summary(model)

    ba9f6f0574fabdee72dc8cac1ee636da.png

    plot(model

    936ad857626a239f2b1de73eadcfb503.png

    S 型曲线

    S 型曲线具有 S 形状,可以是递增、递减、对称或非对称的。它们有许多参数化方法,有时可能让人困惑。因此,我们将展示一种常见的参数化方法,这在生物学方面非常有用。


    逻辑曲线

    逻辑曲线来源于累积逻辑分布函数;曲线在拐点处对称,并可以参数化为:

    2e558e7f235458d6fea13f8f0941b45d.png

    其中,d 是上渐近线,c 是下渐近线,e 是在 d 和 c 之间产生响应的 X 值,而 b 是拐点附近的斜率。参数 b 可以是正数或负数,因此 Y 可以随着 X 的增加而增加或减少。

    逻辑函数非常有用,例如用于植物生长研究。

    1. model <- dm(weightFree ~ DAE, fct =
    2. sum

    58675f1956b9c7d34d5331d73de1f0ca.png

    plot(model, log="",

    fce47f3e1692e2db71bbf754cc2ddfe8.png

    Gompertz 曲线

    Gompertz 曲线有许多参数化方法。我们倾向于使用与逻辑函数相似的参数化方法:

    b1accc9f027da16500d8d48bb90232da.png

    其中参数的含义与逻辑函数中的参数相同。不同之处在于该曲线在拐点处不对称。

    另一种不对称性

    我们已经看到,相对于逻辑函数,Gompertz 函数在开始时呈现更长的延迟,但之后稳步上升。我们可以通过以下方式更改 Gompertz 函数来描述不同的模式:

    8767c8bf9454d32989d44b2b0b21e1fc.png

    该函数的自启动函数尚不可用,至少在我所知道的范围内。此外,我也不知道这个函数的特定名称。

    通过在图表中比较这三个逻辑函数,我们可以看到它们在偏斜和对称性方面的差异。

    1. curve( E.fun(x, b, c, d, e), add = T, col = "blue" )
    2. legen

    bc0d49c0eb12a4a782b55cd9057131c8.png

    基于对数的 S 型曲线

    在生物学中,测量的数值通常是严格为正的(时间、重量、高度、计数)。因此,使用对非正数也定义的函数可能看起来不现实。因此,通常更倾向于使用独立变量 X 被限制为正的函数。所有上述描述的 S 型曲线都可以基于 X 的对数进行,这样我们可以得到更现实的模型。


    对数-逻辑曲线

    在许多应用中,S 型响应曲线在 x 的对数上是对称的,这需要一个对数-逻辑曲线(对数正态曲线实际上几乎等效,但很少使用)。例如,在生物测定中(但也在萌发测定中),对数-逻辑曲线定义如下:

    6702d582877f4b133786a80ec34b4d38.png

    参数的含义与上述逻辑方程中的含义相同。很容易看出上述方程等价于:

    855fa80bdd32b45004965b608a26ab80.png

    另一种可能的参数化方法是所谓的 Hill 函数:

    a098b8800616e71ac661b861184134d1.png

    确实:

    e154850590094b55a9f53966a7877521.png

    对数-逻辑函数用于作物生长、种子萌发和生物测定,它们可以具有与逻辑函数相同的约束条件。

    我们展示了一个基于对数-逻辑拟合的示例,涉及到对一个除草剂处理的甘蓝菜生物测定中不断增加剂量的关系。

    1. dm(FW~ Dose,fct = L.4(),data =brssica)
    2. summary(model)

    35bb2a7282559f43fa621e89ed298bb0.png

    plot(model, main = "对数-逻辑方程")

    c93a76961c8f5d64bedf0baa10594cab.png

    Weibull 曲线(类型 1)

    类型 1 Weibull 曲线与替代 Gompertz 曲线的对数-逻辑曲线相似。方程如下:

    5d8adfb7a7acf14195b7f62a50ee4abc.png

    参数与上述其他 S 型曲线的含义相同。

    Weibull 曲线(类型 2)

    类型 2 Weibull 曲线与 Gompertz 曲线的对数-逻辑曲线相似。方程如下:

    c764a2469a2da1aefe519d7902a4ec27.png

    参数与上述其他 S 型曲线的含义相同。

    我们将对这些 Weibull 曲线拟合数据集。

    1. plot(model, main = "Weibull functions")
    2. plo

    f2df286d83f33f19df730c9896548869.png


    e385d5175c1338c3f73116826c06eb3f.png

    点击文末“阅读原文”

    获取全文完整代码数据资料。

    本文选自《R语言非线性方程数值分析生物降解、植物生长数据:多项式、渐近回归、米氏方程、逻辑曲线、Gompertz、Weibull曲线》。

    a3a0462272d1dc8b8e2e897f83a959a9.jpeg

    9f4cbc8ba829e7bc11d8e935ea93db99.png

    点击标题查阅往期内容

    R语言混合线性模型、多层次模型、回归模型分析学生平均成绩GPA和可视化

    R语言线性混合效应模型(固定效应&随机效应)和交互可视化3案例

    R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析教育留级调查数据

    R语言 线性混合效应模型实战案例

    R语言混合效应逻辑回归(mixed effects logistic)模型分析肺癌数据

    R语言如何用潜类别混合效应模型(LCMM)分析抑郁症状

    R语言基于copula的贝叶斯分层混合模型的诊断准确性研究

    R语言建立和可视化混合效应模型mixed effect model

    R语言LME4混合效应模型研究教师的受欢迎程度

    R语言 线性混合效应模型实战案例

    R语言用Rshiny探索lme4广义线性混合模型(GLMM)和线性混合模型(LMM)

    R语言基于copula的贝叶斯分层混合模型的诊断准确性研究

    R语言如何解决线性混合模型中畸形拟合(Singular fit)的问题

    基于R语言的lmer混合线性回归模型

    R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型

    R语言分层线性模型案例

    R语言用WinBUGS 软件对学术能力测验(SAT)建立分层模型

    使用SAS,Stata,HLM,R,SPSS和Mplus的分层线性模型HLM

    R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型

    SPSS中的多层(等级)线性模型Multilevel linear models研究整容手术数据

    用SPSS估计HLM多层(层次)线性模型模型

    eab1775ad27a6f1f395e09fee46d7239.png

    53b856a251f2edf767a87364ccd2807b.jpeg

    f6e1be937308b11fe37ba2ebce6b6915.png

  • 相关阅读:
    map和set
    Ylearn因果推断入门实践——Kaggle银行客户流失
    Golang不同平台编译的思考
    工作之余happy一下(统计考试科目的成绩)
    CoreData教程之将核心数据coredata实体拆分到不同的store,实现一个实体与 CloudKit 公共数据库和私有数据库同步
    DevExpress DxUpload实现大文件上传
    nexus配置管理docker镜像
    黑马Java第六讲—基本练习
    java架构知识-设计模式与实践(学习笔记)
    【算法自由之路】算法复杂度、对数器、基本排序、异或与位运算技巧
  • 原文地址:https://blog.csdn.net/tecdat/article/details/133154784