【问题标题】:nls - Convergence failure: singular convergence (7)nls - 收敛失败:奇异收敛 (7)
【发布时间】:2014-03-06 15:49:51
【问题描述】:

以下nls 代码针对fm2(对于Data2)抛出以下错误Convergence failure: singular convergence (7)。但是类似数据集的相同代码可以正常工作(fm1 用于 Data1)。

适用于此数据集

Data1 <-
structure(list(D = c(0L, 0L, 0L, 0L, 5L, 5L, 5L, 5L,
10L, 10L, 10L, 10L, 15L, 15L, 15L, 15L, 20L, 20L, 20L, 20L),
    Y = c(11.6, 9.3, 10.7, 9.2, 7.8, 8, 8.6, 7.9, 7.7,
    7.6, 7.5, 7.5, 7.2, 7.3, 7, 6.5, 6.3, 5.7, 5.6, 6)), .Names = c("D",
"Y"), class = "data.frame", row.names = c(NA, 20L))

fm1  <-
  nls(
      formula=Y~w*(1-(i*D/(100*(1+i*D/A))))
    , data=Data1
    , start=list(w=13, i=3, A=80)
    , algorithm="port"
    )

不适用于此数据集

Data2 <-
structure(list(D = c(0L, 0L, 0L, 0L, 5L, 5L, 5L, 5L,
10L, 10L, 10L, 10L, 15L, 15L, 15L, 15L, 20L, 20L, 20L, 20L),
    Y = c(10.8, 10.7, 8.4, 8.5, 8, 8, 8, 7.9, 7.9, 7.2,
    7.8, 7.2, 6.6, 6.5, 6.5, 6.4, 2.2, 4.5, 4.2, 6.2)), .Names = c("D",
"Y"), class = "data.frame", row.names = 21:40)

fm2  <-
  nls(
      formula=Y~w*(1-(i*D/(100*(1+i*D/A))))
    , data=Data2
    , start=list(w=13, i=3, A=80)
    , algorithm="port"
    )

【问题讨论】:

    标签: r statistics nls


    【解决方案1】:

    我认为您的参数化存在问题。我们可以通过让 B 为 i/A、.lin1 = w 和 .lin2 = i*w 来利用线性度,在这种情况下 .lin1 和 .lin2 线性输入并使用 alg=plinear 只有非线性参数需要一个起始值:

    > fo <- Y ~ cbind(1, -D/(100*(1+B*D)))
    > nls(fo, Data, start = list(B = 3/80), alg = "plinear")
    Nonlinear regression model
      model: Y ~ cbind(1, -D/(100 * (1 + B * D)))
       data: Data
           B    .lin1    .lin2 
    -0.02217  9.26808 13.61471 
     residual sum-of-squares: 15.76
    
    Number of iterations to convergence: 9 
    Achieved convergence tolerance: 4.236e-06
    

    从结果 w = .lin1; i*w = .lin2(所以 i = .lin2 / .lin1)和 B = i/A(所以 A = i/B)。

    修订改进了配方。

    【讨论】:

    • 所以你认为模型没有被识别或者我编程不正确。相同的模型适用于其他数据集。
    • 问题在于参数化,也可以使用 plinear 来利用线性。另请注意,我已进一步改进了配方。
    • 请查看我编辑的问题并帮助我。谢谢
    • 所提供的答案已经对您的两个数据集收敛。
    • summary(nls(...)) 。阅读用于转换参数的 delta 方法,或尝试使用已知解决方案作为起始值运行具有原始参数的模型,并在其上使用 summary
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2012-02-11
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    相关资源
    最近更新 更多