【发布时间】:2011-04-15 00:19:05
【问题描述】:
我正在尝试使用 R 来估计具有手动规范的多项 logit 模型。我发现了一些软件包可以让您估计 MNL 模型 here 或 here。
我发现了一些关于“滚动”你自己的 MLE 函数here 的其他著作。然而,根据我的研究,所有这些函数和包都依赖于内部的optim 函数。
在我的基准测试中,optim 是瓶颈。使用具有约 16000 个观察值和 7 个参数的模拟数据集,R 在我的机器上大约需要 90 秒。 Biogeme 中的等效模型大约需要 10 秒。一位在Ox 中编写自己的代码的同事报告说,同一模型大约需要 4 秒。
有没有人有编写自己的 MLE 函数的经验,或者可以向我指出一些超出默认 optim 函数(没有双关语)的优化方向?
如果有人想要 R 代码重新创建模型,请告诉我 - 我很乐意提供。我没有提供它,因为它与优化optim 函数和保留空间的问题没有直接关系......
编辑:感谢大家的想法。基于下面无数的 cmets,对于更复杂的模型,我们能够在与 Biogeme 相同的范围内获得 R,而对于我们运行的几个更小/更简单的模型,R 实际上更快。我认为这个问题的长期解决方案将涉及编写一个独立的最大化函数,该函数依赖于 fortran 或 C 库,但我当然愿意接受其他方法。
【问题讨论】:
-
魔鬼在细节中。您可能会弄乱
optim参数(请参阅文档中有关control的部分)。您可以将默认参数与您的同事代码或 Biogeme 使用的默认参数进行比较。它们是否不同,如果是,那为什么? -
@Marek - Biogeme 依赖于用 C 编写的自定义最大化例程,这与 Ox 的故事类似。这对我来说是一个新领域,但我开始了解使用的不同方法。
-
据我了解,nlm() 和 R 中可能的其他优化例程已经用 C 语言编写。我宁愿建议你直接寻找对内部函数的访问,这样你就可以摆脱开销而不是重新发明轮子
标签: optimization r