Установка верхней границы для NLS подходит для кривой логистического роста - PullRequest
0 голосов
/ 06 ноября 2019

Я подгоняю кривые логистического роста, но 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

1 Ответ

1 голос
/ 06 ноября 2019

Есть несколько проблем:

  • длины x и y различны
  • вы ошиблись "алгоритмом"
  • ваши скобки не на месте.

Вот правильный код, но вам нужно исправить длины 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))
...