【问题标题】:R nlsLM / nls fitting quality with low datapoint numberR nlsLM / nls 拟合质量低数据点数
【发布时间】:2016-02-02 20:08:05
【问题描述】:

虽然我使用 minpack.lm 中的 nlsLM 有一段时间并取得了很好的效果,但我现在在提供的数据点较少的拟合质量方面遇到了意想不到的麻烦。

在示例中,您会看到一个具有 750 个数据点的拟合,另一个具有大约 50 个数据点。

这是一个单指数拟合 B(1-exp(-x*tm))+C,其中 CB 是预定义的,tm 是时间。

样本数据:

mxf <- structure(list(tm = c(0.604, 0.705, 0.805, 0.905, 1.005, 1.105, 
1.205, 1.305, 1.405, 1.505, 1.605, 1.705, 1.805, 1.905, 2.005, 
2.104, 2.204, 2.304, 2.405, 2.505, 2.605, 2.705, 2.805, 2.905, 
3.005, 3.105, 3.205, 3.305, 3.405, 3.505, 3.605, 3.705, 3.805, 
3.905, 4.005, 4.105, 4.205, 4.305, 4.405, 4.505, 4.605, 4.705, 
4.804, 4.904, 5.004), mxxp1m = c(15.2, 24.5, 30.1, 35.3, 38.6, 
40.9, 42.7, 46.3, 47.1, 47.8, 48, 48.6, 51.1, 51.7, 52.6, 52.3, 
52.2, 51.8, 54.4, 54, 52.7, 51.7, 54.4, 52.5, 53.5, 52.8, 54, 
53.5, 52.5, 53.4, 52, 52.9, 52.7, 52.4, 53.7, 52.3, 53.1, 52.2, 
52.8, 53.1, 52.9, 53, 53.3, 51, 52.5)), .Names = c("tm", "mxxp1n"
), class = "data.frame", row.names = c("1", "2", "3", "4", "5", 
"6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", 
"17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", 
"28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", 
"39", "40", "41", "42", "43", "44", "45"))

这是我在两个示例中使用的代码:

    mxf = data.frame(mxf,b,c)
    ## c = 0.2 (y starting point)
    ## d = 0.6 (y - span from start to end)

    fit = nlsLM(mxxp1m ~ b-(b*exp(-x*tm))+c, data = mxf, start = list(x=0.5))

我已经考虑过加权值,或更改 maxiter 选项,但没有得到足够好的结果。

【问题讨论】:

  • 嗨,欢迎来到 SO。如果您能提供一个最小的、可重现的示例 (see here),那将非常有帮助。这可以通过dput(head(tm)) 或提供一些虚假数据来完成,此外还可以向我们展示参数设置的内容(即b &lt;- 5 或其他内容)。
  • @Laterow:我更新了代码部分,并上传了一个 .csv 数据表,其中包含未规范化但与上述示例相同的数据集:we.tl/ihv1jPLH1r
  • 谢谢,我把数据放在开头的帖子里,让其他用户可以直接访问。虽然bc 仍然不见了,但我明白了它的要点。由于我个人没有使用nlsLM 的经验,而且我也无法通过?nlsLM 找到任何东西,所以我无法真正帮助您。让我们希望其他人做出回应。

标签: r nls


【解决方案1】:

终于自己找到了解决办法:

问题在于 nls 拟合算法无法处理 x-start 值(此处为时间范围)> 0。如果数据点从 t = 0.6 开始,则拟合无法正常工作。如果它被设置为 t = t-t[1] 它工作得很好。

因此,始终修改您的 t 向量以从 t = 0 开始,而不是像 t = 0.603 这样的东西。

【讨论】:

    猜你喜欢
    • 2015-03-09
    • 2016-02-02
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2016-11-23
    • 2018-02-10
    相关资源
    最近更新 更多