R:具有已知参数的自启动功能SSasymp?

时间:2018-09-26 04:12:30

标签: r nls

我想拟合一个渐近模型如下:

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

可以使用nls()函数将模型拟合到R中:

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拟合该模型?

1 个答案:

答案 0 :(得分:0)

一种可能性是明确指定模型函数,然后使用合理的起始值拟合模型:

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中的lrcnls(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)]))