【问题标题】:R: self-starting function SSasymp with known parameter?R:具有已知参数的自启动功能SSasymp?
【发布时间】:2018-09-26 12:38:30
【问题描述】:

我想拟合如下渐近模型:

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 拟合?

【问题讨论】:

    标签: r nls


    【解决方案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
    

    选择合理的起始值的一种方法是使用来自无约束拟合nls(y ~ SSasymp(x, Asym, R0, lrc))Asymlrc 的估计值。

    例如:

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

    【讨论】:

    • 谢谢@Maurits!这是一个解决方案。但是当我要拟合多组数据时,它可能效率不高。
    • @Lin “但是当我要拟合很多组数据时,它可能效率不高。” 相反。这可以很好地自动化:从无约束拟合开始,然后使用相关系数估计作为约束拟合的起始值。将其包装在一个函数中。完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    相关资源
    最近更新 更多