设置 nls 的上限适合逻辑增长曲线
Setting upper bound on nls fits for logistic growth curve
我正在拟合逻辑增长曲线,但 nls 高估了我的参数。我有蜗牛的数据,它们增长到某种渐近大小 (K),并且它们的生长模式具有逻辑形状。一些渐近线的大小被高估了,所以我想为模型设置一个上限,这样它就不会让该参数超过蜗牛长到的最大长度。
逻辑方程:y~K*y0*exp(mumax * x)/(K+y0*(exp(mumax * x)-1)
数据:
x<-c(4,6,8,10,12,14,16,18,20,22)
y<-c(0.7, 0.9, 1.3, 1.9, 2.3, 2.8, 3.35, 3.4, 3.4)
有效但估计 K 为 3.9 的模型:
y0_start<-0.4
mumax_start<-0.2
K_start<-3.3
m<-nls(y~K*y0*exp(mumax*x)/(K+y0*(exp(mumax*x)-1)),
start=list(y0=y0_start,mumax=mumax_start, K=K_start))
不适用于约束的模型:
m<-nls(y~K*y0*exp(mumax*x)/(K+y0*(exp(mumax*x)-1)),
start=list(y0=y0_start,mumax=mumax_start, K=K_start,
algorithim="port", lower=list(y0=0, mumax=0, K=0),
upper=list(y0=0.4,mumax=0.4, K=3.45)))
错误:
Error in qr.default(.swts * gr) :
NA/NaN/Inf in foreign function call (arg 1)
In addition: Warning message:
In storage.mode(temp) <- "double" : NAs introduced by coercion
有几个问题:
x
和y
的长度不同
- 你拼错了"algorithm"
- 你的括号放错了。
这是正确的代码,但您需要修正 x
和 y
的长度:
m <- nls(y~K*y0*exp(mumax*x)/(K+y0*(exp(mumax*x)-1)),
start=list(y0=y0_start, mumax=mumax_start, K=K_start),
algorithm="port", lower=list(y0=0, mumax=0, K=0),
upper=list(y0=0.5, mumax=0.4, K=3.45))
我正在拟合逻辑增长曲线,但 nls 高估了我的参数。我有蜗牛的数据,它们增长到某种渐近大小 (K),并且它们的生长模式具有逻辑形状。一些渐近线的大小被高估了,所以我想为模型设置一个上限,这样它就不会让该参数超过蜗牛长到的最大长度。
逻辑方程:y~K*y0*exp(mumax * x)/(K+y0*(exp(mumax * x)-1)
数据:
x<-c(4,6,8,10,12,14,16,18,20,22)
y<-c(0.7, 0.9, 1.3, 1.9, 2.3, 2.8, 3.35, 3.4, 3.4)
有效但估计 K 为 3.9 的模型:
y0_start<-0.4
mumax_start<-0.2
K_start<-3.3
m<-nls(y~K*y0*exp(mumax*x)/(K+y0*(exp(mumax*x)-1)),
start=list(y0=y0_start,mumax=mumax_start, K=K_start))
不适用于约束的模型:
m<-nls(y~K*y0*exp(mumax*x)/(K+y0*(exp(mumax*x)-1)),
start=list(y0=y0_start,mumax=mumax_start, K=K_start,
algorithim="port", lower=list(y0=0, mumax=0, K=0),
upper=list(y0=0.4,mumax=0.4, K=3.45)))
错误:
Error in qr.default(.swts * gr) :
NA/NaN/Inf in foreign function call (arg 1)
In addition: Warning message:
In storage.mode(temp) <- "double" : NAs introduced by coercion
有几个问题:
x
和y
的长度不同- 你拼错了"algorithm"
- 你的括号放错了。
这是正确的代码,但您需要修正 x
和 y
的长度:
m <- nls(y~K*y0*exp(mumax*x)/(K+y0*(exp(mumax*x)-1)),
start=list(y0=y0_start, mumax=mumax_start, K=K_start),
algorithm="port", lower=list(y0=0, mumax=0, K=0),
upper=list(y0=0.5, mumax=0.4, K=3.45))