R: самозапускающаяся функция SSasymp с известным параметром?

Я хочу использовать следующую асимптотическую модель:

y (x) = Asym + (R0 - Asym) * exp (-exp (lrc) * x)

Модель может быть адаптирована в R с помощью функции nls ():

y <- c(22.180,21.941,21.786,21.724,20.964,19.128,18.371,17.508,16.931)
x <- c(1,3,5,9,18,36,72,144,288)

nls(y ~ SSasymp(x, Asym, R0, lrc))

Однако, если я знаю значение R0 (например, R0 = 25), то как я могу подогнать эту модель с функцией самозапуска SSasymp?


r nls
person Lin    schedule 26.09.2018    source источник


Ответы (1)


Существует возможность явно указать функцию модели, а затем подогнать модель, используя разумные начальные значения:

f <- function(x, Asym, lrc, R0 = 25)
    Asym + (R0 - Asym) * exp(-exp(lrc) * x)
nls(
    y ~ f(x, Asym, lrc),
    data = data.frame(x, y),
    start = list(Asym = 15, lrc = -3))
#Nonlinear regression model
#  model: y ~ f(x, Asym, lrc)
#   data: data.frame(x, y)
#  Asym    lrc
#17.965 -2.526
# residual sum-of-squares: 12.32
#
#Number of iterations to convergence: 16
#Achieved convergence tolerance: 5.565e-06

Один из способов выбрать разумные начальные значения - использовать оценки для Asym и lrc из неограниченного соответствия nls(y ~ SSasymp(x, Asym, R0, lrc)).

Так например:

# Unconstrained fit
fit <- nls(y ~ SSasymp(x, Asym, R0, lrc))
coef(fit)
#Asym        R0       lrc
#17.057226 22.361817 -3.877708

# Constrained fit with R0 = 25 and starting values from fit
nls(
    y ~ f(x, Asym, lrc),
    data = data.frame(x, y),
    start = as.list(coef(fit)[c(1, 3)]))
person Maurits Evers    schedule 26.09.2018
comment
Спасибо, @Maurits! Это решение. Но это может быть не очень эффективно, когда мне нужно подогнать много групп данных. - person Lin; 27.09.2018
comment
@Lin Но это может быть не очень эффективно, когда у меня есть много групп данных, которые нужно подогнать. Напротив. Это можно легко автоматизировать: начните с подгонки без ограничений, затем используйте соответствующие оценки коэффициентов в качестве начальных значений для подгонки с ограничениями. Оберните его функцией. Сделанный. - person Maurits Evers; 27.09.2018