我什么时候不应该对MLE使用R的nlm函数?


25

我遇到了一些指南,建议我使用R的nlm进行最大似然估计。但是,它们中的任何一个(包括R的文档)都没有给出何时使用或不使用该功能的大量理论指导。

据我所知,nlm只是沿牛顿方法进行梯度下降。是否有合理的时间使用这种方法的原则?有哪些替代方法?另外,对数组的大小是否有限制,等等。可以传递给nlm吗?

Answers:


39

有许多通用的优化程序的在基础R据我所知的:optimnlminbnlmconstrOptim(它处理线性不等式约束,和呼叫optim引擎盖下)。在选择使用哪种方法时,您可能需要考虑以下几点。

  • optim可以使用许多不同的算法,包括共轭梯度法,牛顿法,准牛顿法,内尔德米德法和模拟退火法。最后两个不需要梯度信息,因此如果没有可用的梯度或无法进行计算(可能会更慢并且分别需要更多的参数微调),则很有用。它还有一个选项可以在解决方案中返回计算出的Hessian,如果您需要标准误差以及解决方案本身,则需要使用该选项。

  • nlminb使用准牛顿算法填充与中的"L-BFGS-B"方法相同的位置optim。以我的经验,它似乎比optim它更健壮,因为它可能optim会在无法收敛的边际情况下返回解决方案,尽管这可能取决于问题。如果提供显式的梯度函数,它具有很好的功能,可以在解决方案中对其值进行数值检查。如果这些值与从数值微分获得的值不匹配,nlminb将给出警告;这有助于确保您在指定渐变时没有犯错(易于处理复杂的可能性)。

  • nlm仅使用牛顿算法。在需要更少的迭代次数以达到收敛的意义上,这可以比其他算法更快,但是有其自身的缺点。它对可能性的形状更敏感,因此,如果它不是强二次函数,则可能会变慢,或者可能会收敛到错误的解。牛顿算法还使用Hessian,并且计算在实践中可能足够慢,因此它不能抵消任何理论上的加速。


17

何时使用和不使用任何特定的最大化方法在很大程度上取决于您拥有的数据类型。nlm如果可能性表面不是特别“粗糙”并且在各处都是可区分的,则将很好地工作。nlminb提供了一种将参数值约束到特定边界框的方法。optim,它可能是最常用的优化器,它提供了一些不同的优化例程;例如BFGS,L-BFGS-B和模拟退火(通过SANN选项),如果您遇到优化难题,后者可能会很方便。CRAN上还有许多优化器。rgenoud,例如,提供了用于优化的遗传算法。DEoptim使用不同的遗传优化程序。遗传算法收敛速度较慢,但​​即使可能性不连续,通常也可以保证收敛(及时)。我不知道DEoptim,但是rgenoud已设置为snow用于并行处理,这有所帮助。

因此,一个可能不太令人满意的答案是,nlm如果对您的数据有效,则应使用或任何其他优化程序。如果您的行为习惯良好,则optim或提供的任何例程nlm都会给您相同的结果。有些可能比其他的要快,这取决于数据集的大小等可能无关紧要。关于这些例程可以处理的参数数量,我不知道,尽管可能很多。当然,您拥有的参数越多,您遇到融合问题的可能性就越大。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.