【问题标题】:convergence error codes in nlminb -- where stored?nlminb 中的收敛错误代码——存储在哪里?
【发布时间】:2025-08-28 18:35:01
【问题描述】:

我正在构建一个 Monte Carlo 模拟来进行功率估计,我需要运行 10,000 次迭代,每次迭代都涉及将一堆混合线性和逻辑模型拟合到我生成的数据中。一旦在一个蓝色的月亮我收到这样的错误:

nlminb 问题,收敛错误码 = 1 ;消息 = 迭代限制 没有收敛就达到了

我从谷歌上收集到这个错误很常见,并且可能是我的数据的一个函数(因为它不会在大多数通过模拟程序的运行中发生)。但是,这很痛苦,因为它使我的模拟崩溃并且我可能会损失几天的运行时间。我想通过添加一些错误处理来使程序更健壮,但我不知道 "convergence error code" 存储在哪里,如果在任何地方。

检查 lme、lmeObject 和 nlminb 的手册页并没有真正的帮助。有什么想法吗?

【问题讨论】:

标签: r


【解决方案1】:

这听起来更像是警告而不是错误。 nlminb 返回的列表的“收敛”元素将为 0 表示成功收敛。我会问你是否想增加控制列表中的“iter.max”元素。此信息位于帮助页面上。

【讨论】:

  • 感谢您的回复。不过,我不确定这是否是我所需要的——在 10,000 次复杂数据的模拟中,我可能会遇到一些集合,这样我的模型就不会收敛,这就是为什么我要构建异常-处理而不是仅仅试图防止收敛问题本身。据我了解,错误和警告之间的区别在于错误将停止程序,而警告只会设置一个警告标志(除非您设置一个选项来停止所有警告 - 我没有)。是对的吗?我的程序不仅设置了警告标志,而且还停止了。
  • 但是......这是导致错误的调用之后所做的事情。正如您所说,警告不会停止执行。在抛出错误后使用 traceback() 并找出根本原因。是否有其他程序调用nlminb
  • 谢谢,我会试试的。我希望能够更可靠地触发错误-您是否碰巧知道数据集的哪些属性导致它们无法收敛?昨天我花了一些时间专门尝试生成异常数据,以便我可以进一步询问错误,但异常地失败了。
  • 如果你想强制它不能收敛,你也可以使用控制参数。这是来自帮助页面的代码,我已经操纵它失败了:x <- rnbinom(100, mu = 10, size = 10); hdev <- function(par) { -sum(dnbinom(x, mu = par[1], size = par[2], log = TRUE)) } ;nlminb(c(9, 12), hdev, control=list(iter.max=1))
  • @user1195893 您的问题得到解答了吗?如果不是,请说明,否则接受。
最近更新 更多