【问题标题】:`nls` fitting error: always reach maximum number of iterations regardless starting values`nls` 拟合错误:无论起始值,总是达到最大迭代次数
【发布时间】:2017-03-06 22:25:37
【问题描述】:

将此参数化用于增长曲线逻辑模型

我创建了一些点: K =0.7 ; y0=0.01; r =0.3

df = data.frame(x= seq(1, 50, by = 5))
df$y = 0.7/(1+((0.7-0.01)/0.01)*exp(-0.3*df$x))

如果使用模型启动器创建数据,有人可以告诉我如何出现拟合错误吗?

fo = df$y ~ K/(1+((K-y0)/y0)*exp(-r*df$x))

model<-nls(fo,
           start = list(K=0.7, y0=0.01, r=0.3),
           df, 
           nls.control(maxiter = 1000))
Error in nls(fo, start = list(K = 0.7, y0 = 0.01, r = 0.3), df, nls.control(maxiter = 1000)) : 
  number of iterations exceeded maximum of 1000

【问题讨论】:

    标签: r regression nls non-linear-regression


    【解决方案1】:

    请勿对人工“零残差”数据使用“nls”。,如 ?nls 中所述。

    set.seed(0)
    x <- seq(1, 50, by = 5)
    y <- 0.7 / (1 + ((0.7 - 0.01) / 0.01) * exp(-0.3 * x))
    y <- y + rnorm(length(x), sd = 0.05)  ## add Gaussian error!!
    dat <- data.frame(x = x, y = y); rm(x, y)
    with(dat, plot(x, y))
    
    fit <- nls(y ~ K / (1 + ((K - y0) / y0) * exp(-r * x)), data = dat,
               start = list(K = 0.7, y0 = 0.01, r = 0.3))
    
    #Nonlinear regression model
    #  model: y ~ K/(1 + ((K - y0)/y0) * exp(-r * x))
    #   data: dat
    #      K      y0       r 
    #0.70013 0.01841 0.27950 
    # residual sum-of-squares: 0.02851
    # 
    #Number of iterations to convergence: 12 
    #Achieved convergence tolerance: 4.145e-06
    

    另外,请避免在模型公式中使用$,否则以后使用predict时会遇到麻烦。

    【讨论】:

    • 哦..太简单了..我不知道它会有 0-residual。谢谢!
    • @Zehnyuan Li,我面临 50 次迭代的问题。我有点迷失了方向,无法将您的逻辑应用于我的逻辑。我只是想使用最小二乘法将数据拟合到给定的非线性模型。 Y 来自实验数据。 X 值的一个参数也来自这样一个集合。并且有常数。我提供了 2 个初始值来适应它。只是想确保模拟拟合其他 2 个变量。然而这个错误被抛出。
    猜你喜欢
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 2015-05-07
    相关资源
    最近更新 更多