在 R 中使用 nls 时解决 minFactor 错误

标签 r nls non-linear-regression

我在几个不同的数据集上运行 R 中的 nls 模型,使用自启动的 Weibull 增长曲线函数,例如

MOD <- nls(Response ~ SSweibull(Time, Asym, Drop, lrc, pwr), data = DATA)

有了这样的数据,它按预期工作:

GOOD.DATA <- data.frame("Time" = c(1:150), "Response" = c(31.2, 20.0, 44.3, 35.2, 
31.4, 27.5, 24.1, 25.9, 23.3, 21.2, 21.3, 19.8, 18.4, 17.3, 16.3, 16.3,
16.6, 15.9, 15.9, 15.8, 15.1, 15.6, 15.1, 14.5, 14.2, 14.2, 13.7, 14.1,
13.7, 13.4, 13.0, 12.6, 12.3, 12.0, 11.7, 11.4, 11.1, 11.0, 10.8, 10.6,
10.4, 10.1, 11.6, 12.0, 11.9, 11.7, 11.5, 11.2, 11.5, 11.3, 11.1, 10.9,
10.9, 11.4, 11.2, 11.1, 10.9, 10.9, 10.7, 10.7, 10.5, 10.4, 10.4, 10.3,
10.1, 10.0, 9.9, 9.7, 9.6, 9.7, 9.6, 9.5, 9.5, 9.4, 9.3, 9.2, 9.1, 9.0,
8.9, 9.0, 8.9, 8.8, 8.8, 8.7, 8.6, 8.5, 8.4, 8.3, 8.3, 8.2, 8.1, 8.0,
8.0, 8.0, 7.9, 7.9, 7.8, 7.7, 7.6, 7.6, 7.6, 7.6, 7.5, 7.5, 7.5, 7.5,
7.4, 7.4, 7.3, 7.2, 7.2, 7.1, 7.1, 7.0, 7.0, 6.9, 6.9, 6.8, 6.8, 6.7,
6.7, 6.6, 6.6, 6.5, 6.5, 6.4, 6.4, 6.4, 6.3, 6.3, 6.2, 6.2, 6.2, 6.1 
6.1, 6.1, 6.0, 6.0, 5.9, 5.9, 5.9, 5.9, 5.8, 5.8, 5.8, 5.8, 5.8, 5.8,
5.8, 5.7))

但是有了这个数据集:

BAD.DATA <- data.frame("Time" = c(1:150), "Response" = c(89.8, 67.0, 
51.4, 41.2, 39.4, 38.5, 34.3, 30.9, 29.9, 34.8, 32.5, 30.1, 28.5, 27.0,
26.2, 24.7, 23.8, 23.6, 22.6, 22.0, 21.3, 20.7, 20.1, 19.6, 19.0, 18.4,
17.9, 17.5, 17.1, 23.1, 22.4, 21.9, 23.8, 23.2, 22.6, 22.0, 21.6, 21.1,
20.6, 20.1, 19.7, 19.3, 19.0, 19.2, 18.8, 18.5, 18.3, 19.5, 19.1, 18.7,
18.5, 18.3, 18.0, 17.7, 17.5, 17.3, 17.0, 16.7, 16.7, 16.9, 16.6, 16.4,
16.1, 15.9, 15.8, 15.6, 15.4, 15.2, 15.0, 14.8, 14.7, 14.5, 14.4, 14.2,
14.0, 13.9, 13.7, 13.6, 15.4, 15.2, 15.1, 15.0, 14.9, 14.7, 14.6, 14.5,
14.4, 14.3, 14.4, 14.2, 14.1, 14.0, 13.8, 13.7, 13.6, 13.5, 13.4, 13.2,
13.3, 13.2, 13.1, 13.0, 12.9, 12.8, 12.7, 12.6, 12.5, 12.5, 12.4, 12.3,
12.2, 12.1, 12.1, 11.9, 12.8, 12.7, 12.6, 12.5, 12.4, 14.2, 14.1, 14.0,
14.1, 14.0, 13.9, 13.8, 13.7, 13.7, 13.6, 13.5, 13.4, 13.3, 13.3, 13.2,
13.1, 13.0, 12.9, 12.9, 12.8, 12.7, 12.6, 12.9, 12.8, 12.7, 12.6, 12.5,
12.5, 12.4, 12.3, 12.2))

我得到了错误;

Error in nls(y ~ cbind(1, -exp(-exp(lrc) * x^pwr)), data = xy, algorithm = "plinear",
  : step factor 0.000488281 reduced below 'minFactor' of 0.000976562

通过包含 control 参数,我可以更改 GOOD.DATAminFactor:

MOD <- nls(Response ~ SSweibull(Time, Asym, Drop, lrc, pwr), data = GOOD.DATA, 
control = nls.control(minFactor = 1/4096))

但无论如何模型都在正常运行。对于 BAD.DATA 和其他几个数据集,包括 control 没有效果,我只是收到相同的错误消息。


问题

  1. 如何更改 BAD.DATAminFactor

  2. 导致错误的原因是什么? (即触发错误的数据集是什么?)

  3. 更改 minFactor 是否会解决此错误,或者这是 R 的模糊错误消息之一,它实际上表示不同的问题?

最佳答案

似乎 control 选项在您的情况下不起作用,因为代码在自启动时在 getInitial 中断,也就是说,在使用您提供的 之前控制参数。一种方法是尝试指定一些启动参数,而不是天真的自启动。对于 nls,通常情况下使用初始参数会成败,虽然对于特定的 Weibull 情况不完全确定,但应该是相同的。

要查看您没有到达实际的 control,您可以尝试使用 nls.control(printEval = T) 并查看没有打印。

关于在 R 中使用 nls 时解决 minFactor 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53443377/

相关文章:

machine-learning - 识别分类中最弱的特征

machine-learning - 如何针对噪声(分散)数据选择回归算法?

r - 均值和中值与汇总

r - 在 R 中创建直方图时,正确的参数有什么作用?

r - 在 R 中绘制 nls 模型的导数

r - 如何从 R 中的 nls 模型中检索原始数据?

python - 使用 Scikit 神经网络 MLPRegressor 进行多输入单输出回归

r - 我希望我的 y 轴进行 exp 缩放(而不是对数缩放)

r - 如何在 Shiny 中加载图像

java - 如何避免 java 项目上不需要的日志消息?