使用拟合模型或 nls 函数约束 coef 输出
Constraining coef output using fit model or nls function
我有关于微藻在增强光照下的光合作用 activity 的数据。
PAR:是不同的光照,(x,自变量)
ETR:是光合作用activity(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 函数的 mosaic 包的一部分,如代码所示:
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 不能为负。我还需要使用高斯-牛顿最小二乘法,而不是我可以指定下限和上限的其他算法。我曾尝试使用端口算法来指定 0 的下限,但问题是 b 为 0,我不希望 b 为 0,我希望我所有的变量都大于 0。我尝试了很多东西但我无法解决这个问题。希望您能帮我解决这个问题,谢谢。
使用 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")
我有关于微藻在增强光照下的光合作用 activity 的数据。 PAR:是不同的光照,(x,自变量) ETR:是光合作用activity(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 函数的 mosaic 包的一部分,如代码所示:
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 不能为负。我还需要使用高斯-牛顿最小二乘法,而不是我可以指定下限和上限的其他算法。我曾尝试使用端口算法来指定 0 的下限,但问题是 b 为 0,我不希望 b 为 0,我希望我所有的变量都大于 0。我尝试了很多东西但我无法解决这个问题。希望您能帮我解决这个问题,谢谢。
使用 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")