Существует возможность явного указания функции модели, а затем подгонки модели с использованием разумных начальных значений:
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
и * 1005.* из непринужденной посадки 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)]))