【问题标题】:Constraining coef output using fit model or nls function使用拟合模型或 nls 函数约束 coef 输出
【发布时间】:2019-06-06 01:46:44
【问题描述】:

我有关于微藻在光照增加下的光合作用活动的数据。 PAR:是不同的曝光量,(x,自变量) ETR:是光合活性(y,因变量)。

PAR ETR
1   0.409090909
46  18.81818182
126 51.54545455
234 93.6
404 173.1428571
656 246
816 272

我能够为样本绘制点并获得曲线。但我想使用这个公式将这些点拟合到特定的非线性模型: ETR= PAR/((aPAR^2)+(bPAR)+c) 我使用 Nls 函数作为使用 nls 函数的镶嵌包的一部分,如代码所示:

TABLE=read.table("sample 2.txt", header = TRUE)
TABLE
plotPoints(ETR~PAR, data= TABLE)
f<-fitModel(ETR ~ PAR/((a*PAR^2)+(b*PAR)+c),data = TABLE, start = list(a=0, b=0.004, c=1))
coef(f)
plotFun(f, add=TRUE)

我的结果:

> TABLE=read.table("sample 2.txt", header = TRUE)
> TABLE
  PAR         ETR
1   1   0.4090909
2  46  18.8181818
3 126  51.5454546
4 234  93.6000000
5 404 173.1428571
6 656 246.0000000
7 816 272.0000000
> plotPoints(ETR~PAR, data= TABLE)
> f<-fitModel(ETR ~ PAR/((a*PAR^2)+(b*PAR)+c),data = TABLE, start = list(a=0, b=0.0035, c=1))
> coef(f)
            a             b             c 
 2.921397e-06 -2.027561e-03  2.718527e+00 
> plotFun(f, add=TRUE)

问题是我不希望 coef a、b 和 c 有负值。这是因为我需要这些系数来获得不能为负的生物因子 ETRmax= 1/b+2ac、Ek= c/b+2ac、alfa= 1/c。我还需要使用高斯牛顿最小二乘法,而不是我可以指定下限和上限的其他算法。我曾尝试使用端口算法来指定 0 的下限,但问题是 b 为 0,我不希望 b 为 0,我希望我的所有变量都大于 0。我尝试了很多东西但我无法解决这个问题。我希望你能帮助我解决这个问题,谢谢。

【问题讨论】:

    标签: r plot nls coefficients mosaic


    【解决方案1】:

    使用lower = c(0, 0, 0), alg = "port" 指定下限:

    fitModel(ETR ~ PAR/((a*PAR^2)+(b*PAR)+c), data = TABLE, 
      start = list(a = 0, b = 0.0035, c = 1), lower = c(0, 0, 0), alg = "port")
    

    【讨论】:

    • 感谢您的回复。我已经尝试过了,并且 b 为 0,这是我不想要的。我希望所有的 coef 都大于 0
    • 它将把它推到下限。您可以使用小数字代替 0。
    • 谢谢,这行得通。我认为 R 在需要纠正负 coef 值时会选择可能的最小正值。但我想知道我是否可以告诉 R 我想要我的变量 a>0、b>0 和 c>0,而不将其限制在每个变量的某个值/下限。我只希望我的 coef 结果是积极的。
    • 这样的开放集没有最低要求。对于此类集合上的任何建议解决方案,您将能够找到另一个产生较小目标值的建议解决方案。例如,闭集 x >= 0 上 x^2 的最小值为 0,但开集 x > 0 上没有最小值。对于任何 x',x'/2 都会给出更小的目标。
    • 更新:当我得到负系数时,我所做的是从我的数据中删除一些数据点。我试图通过删除位于模型曲线“正常”形状之外的数据点来用我的数据模拟“模型”曲线。这样我得到了积极的coef。我知道它过度拟合并修改了我的数据,但我认为通过对我的系数施加限制,我也这样做了。
    猜你喜欢
    • 2016-11-07
    • 2017-12-25
    • 1970-01-01
    • 2021-11-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2018-03-29
    相关资源
    最近更新 更多