【问题标题】:Setting upper bound on nls fits for logistic growth curve在 nls 上设置上限适合逻辑增长曲线
【发布时间】:2020-03-02 10:29:31
【问题描述】:

我正在拟合逻辑增长曲线,但 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

【问题讨论】:

    标签: r curve nls


    【解决方案1】:

    有几个问题:

    • xy的长度不同
    • 你拼错了“算法”
    • 您的括号放错了位置。

    这里是正确的代码,但是你需要修复xy的长度:

    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))
    

    【讨论】:

    • 我想这就是我在记事本中编写代码所得到的......谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    相关资源
    最近更新 更多