【发布时间】:2015-02-27 22:26:34
【问题描述】:
我正在用 Python 实现一个基本的 Monte Carlo 模拟器,用于我正在尝试做的一些项目管理风险建模(基本上是 Crystal Ball / @Risk,但在 Python 中)。
我有一组n 随机变量(所有scipy.stats 实例)。我知道我可以使用rv.rvs(size=k) 从每个n 变量中生成k 独立 观察结果。
我想通过指定一个n x n 半正定相关矩阵来引入变量之间的相关性。
在 scipy 中有没有干净的方法来做到这一点?
我的尝试
This answer 和 this answer 似乎表明“copulas”将是一个答案,但我在 scipy 中没有看到对它们的任何引用。
This link 似乎实现了我正在寻找的东西,但我不确定 scipy 是否已经实现了这个功能。我也希望它适用于非正态变量。
看来Iman, Conover paper是标准方法。
【问题讨论】:
-
这是您要找的吗? stackoverflow.com/a/16025584/190597
-
适用于正态变量...我还有其他分布。
-
看来推荐的方法(Iman-Conover)使用多元法线来做我正在寻找的东西,所以我认为您的评论可能是最终解决方案的很大一部分(这可能是我必须手工构建的东西)。
-
您是否有机会分享您为生成具有相关性的随机变量而开发的 Python 代码?
-
您的问题不完整,因为未指定边缘。根据 Sklar 定理,分布函数完全由其边际分布及其 copula 指定。各种 copula 会产生相关性:虽然 Gaussian copula 是一个特定的选择,但还有很多其他选择。