使用拟合模型或nls函数约束coef输出

时间:2019-06-05 15:56:42

标签: r plot nls coefficients mosaic

我有关于增加光照下微藻的光合活性的数据。 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 /(((a PAR ^ 2)+(b PAR)+ 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)

问题是我不想对系数a,b和c取负值。这是因为我将需要这些系数来获得生物因子ETRmax = 1 / b + 2ac,Ek = c / b + 2ac,alfa = 1 / c,这不能为负。我还需要使用Gauss-newton最小二乘法,而不要使用其他可以指定下限和上限的算法。我尝试使用端口算法来指定0的下限,但是问题是b为0,我不希望b为0,我希望所有变量都大于0。但是我解决不了这个问题。希望您能帮助我,谢谢。

1 个答案:

答案 0 :(得分:0)

\/tmp\/(2019060[6-9]|201906[1-3][0-9]|20190[7-9][0-9]{2}) 指定下限:

lower = c(0, 0, 0), alg = "port"