Matlab/octave 还是 R 更适合蒙特卡罗模拟?

机器算法验证 r matlab 蒙特卡洛
2022-01-19 15:51:42

我开始在 R 中做蒙特卡洛作为一种爱好,但最终一位金融分析师建议迁移到 Matlab。我是一位经验丰富的软件开发人员。但是蒙特卡洛初学者。我想用敏感性分析构建静态模型,然后是动态模型。需要好的库/算法来指导我。

对我来说,R 似乎有很好的库,我怀疑 mathlab 是没有经验的程序员的首选,因为它是简单的类似帕斯卡的语言。R语言是基于scheme的,这对初学者来说很难,但对我来说不是。如果 Matlab/ Octave 在数值/库方面没有优势,我会坚持使用 R。

4个回答

我两个都用。我经常在 Matlab 中对函数和算法进行原型设计,因为如前所述,用接近纯数学语言的东西来表达算法更容易。

R 确实有优秀的库。我还在学习它,但我开始将 Matlab 抛在脑后,因为一旦你了解了 R,在那里制作函数原型也相当容易。

但是,我发现如果您希望算法在生产环境中高效运行,最好转向 C++ 之类的编译语言。我有将 C++ 包装到 Matlab 和 R 中的经验(并且在这方面表现出色),但我对 R 的体验更好。 免责声明:作为一名研究生,我没有为我的 dll 使用最新版本的 Matlab,我几乎一直在使用 Matlab 7.1(大约 4 岁)。也许较新的版本工作得更好,但我可以想到两种情况,Matlab 后面的 C++ dll 导致 Windows XP 蓝屏,因为我不恰当地走出了数组边界 - 这是一个非常难以解决的问题调试如果您的计算机每次犯该错误时都重新启动...

最后,与 Matlab 社区相比,R 社区的发展速度和势头似乎要快得多。此外,由于它是免费的,您也无需使用 Godforsaken flexlm 许可证管理器。

注意:我现在几乎所有的开发都在 MCMC 算法中。我在 C++ 中使用 ggplot2 在 R 中进行可视化,完成了大约 90% 的生产。

平行评论更新:

我现在的大部分开发时间都花在了并行化 MCMC 例程上(这是我的博士论文)。我使用了 Matlab 的并行工具箱和 Star P 的解决方案(我猜它现在归微软所有?? ——天哪,另一个被吞噬了......)我发现并行工具箱是配置的噩梦——当我使用它时,它需要对每个客户端节点进行 root 访问。我认为他们现在已经修复了那个小“错误”,但仍然一团糟。我发现 *'p 解决方案很优雅,但通常很难分析。我没有使用Jacket,但我听说了一些好东西。我也没有使用也支持 GPU 计算的最新版本的并行工具箱。

我几乎没有使用 R 并行包的经验。

根据我的经验,并行化代码必须发生在 C++ 级别,您可以在其中对任务分解和内存/资源分配进行更精细的控制。我发现,如果您尝试在较高级别上并行化程序,您通常只会获得最小的加速,除非您的代码可以简单地分解(也称为虚拟并行)。也就是说,您甚至可以使用 OpenMP 在 C++ 级别使用单行代码获得合理的加速:

#pragma omp parallel for

更复杂的方案有一个学习曲线,但我真的很喜欢 gpgpu 的发展方向。在今年的 JSM 中,与我交谈过的少数人谈到 R 中的 GPU 开发,可以说它只是“深入探索”。但如前所述,我的经验很少——在不久的将来会改变。

老实说,我认为您在这里提出的任何关于 R 与 ... 的问题都会偏向于 R。请记住,R 是迄今为止最常用的标签

我做什么

我目前的工作实践是使用 R 进行原型设计,并在需要额外提高速度时使用 C。过去我必须非常快速地切换到 C 语言(再次针对我的特定应用程序),但 R多核库帮助延迟了这种切换。本质上,您使for循环与微不足道的更改并行运行。

我应该提一下,我的应用程序的计算量 非常大。

推荐

老实说,这真的取决于你想做什么。因此,我的回答基于您问题中的这一陈述。

我想用敏感性分析构建静态模型,然后是动态模型。需要好的库/算法来指导我

我想这个问题非常适合在 R 中进行原型设计并在需要时使用 C(或其他一些编译语言)。

话虽如此,通常蒙特卡洛/敏感性分析不涉及特别高级的统计例程 - 当然它可能需要其他高级功能。所以我认为(没有更多信息)你可以用任何语言进行分析,但是完全有偏见,我会推荐 R!

虽然我几乎只用过R,但我真的很佩服Matlab.
当你的程序有点慢时,你通常想知道瓶颈在哪里。Matlab 的分析器是实现这一目标的绝佳工具,因为它告诉您在每一行代码上花费了多少时间。

至少对我来说,使用Rprof是无比糟糕的。我不知道哪个电话是瓶颈。使用Rprof您不会获得有关在每行上花费多少时间的信息,而是在每个原始函数(或左右)上花费多少时间。但是,许多相同的原始函数被许多不同的函数调用。

虽然我推荐R(因为它很棒:免费、非常强大……)如果你知道你必须对你的代码进行很多分析,Matlab 会更好。公平地说,Matlab 中有多核和并行计算工具箱(虽然非常昂贵)。

如果您的模拟将涉及相对复杂的技术,那么 R 是可行的方法,因为您需要的例程很可能在 R 中可用,但不一定在 matlab 中。