如何在nls系数上设置界限?

时间:2015-11-06 19:12:07

标签: r constraints nls

有没有办法限制NLS系数在R中可以采用的值范围?我知道我的数据应该存在的曲线形状;然而,NLS未能通过产生<1的功率系数来产生这样的曲线。 1。

本质上,我试图为一组幼树干(树苗)数据产生茎高度与地上生物量的关系。树木的高度受到场地寒冷天气的阻碍,因此它们接近高度的限制......但是随着年龄的增长,周长和生物量继续增长。

问题是我只有一定范围的树高度的数据,并且缺少茎的值&lt;高1.3米。我到目前为止的代码是:

#Plot the raw data
plot(AC$Height.m, AC$ag.biomass, xlim=c(0,2.5), ylim=c(0,40))

#Generate a NLS fit and plot curve on the raw data to show misfit
bg.nls = nls(ag.biomass ~ B0*Height.m^B1, data=AC, start=list(B0=8,B1=2))
curve(coef(bg.nls)[1]*x^coef(bg.nls)[2], col="red", add=TRUE)

#Provide example of appropriate growth curve given biological understanding
curve(6*x^1.7, col="blue", add=TRUE)

产生以下情节。红线显示错配NLS(主要是由于B1为<1),蓝线表示生物学上合适的拟合。

enter image description here

据我所知,这种生成模型的方法存在许多统计问题 - 但我并不关心它们。相反,我只是对将B1值限制为大于1的值的技术问题感兴趣。有没有办法这样做?

1 个答案:

答案 0 :(得分:7)

您可以使用upper的{​​{1}}和lower参数设置系数拟合的约束。约束只适用于nls算法,因此您还需要指定它。简单的例子:

没有约束:

port

有约束:

nls(mpg ~ wt^a + disp^b, data=mtcars, start=list(a=3.5, b=0.1), algorithm="port")

Nonlinear regression model
model: mpg ~ wt^a + disp^b
data: mtcars
a      b 
0.4441 0.5025 
residual sum-of-squares: 3612