Mik*_*and 11 python numpy scipy
我正在努力在Python中实现一个基本的蒙特卡罗模拟器,用于我正在尝试的一些项目管理风险建模(基本上是Crystal Ball/@Risk,但是在Python中).
我有一组n
随机变量(所有scipy.stats
实例).我知道我可以用来从这些变量中rv.rvs(size=k)
产生k
独立的观察结果n
.
我想通过指定n x n
正半正定相关矩阵来引入变量之间的相关性.
scipy有一个干净的方法吗?
我试过的
这个答案和这个答案似乎表明"copulas"将是一个答案,但我没有看到他们的scipy任何参考.
这个链接似乎实现了我正在寻找的东西,但我不确定scipy是否已经实现了这个功能.我也喜欢它适用于非正常变量.
似乎Iman,Conover论文是标准方法.
Jos*_*sef 11
如果您只想通过高斯Copula(*)进行相关,那么可以通过numpy和scipy在几个步骤中进行计算.
创建具有所需协方差的多变量随机变量numpy.random.multivariate_normal
,并创建(n_by k_variables)数组
适用scipy.stats.norm.cdf
于将常规变换为均匀随机变量,为每个列/变量获得均匀的边际分布
适用dist.ppf
于将均匀边距转换为所需的分布,其中dist
可以是其中一个分布scipy.stats
(*)高斯copula只是一种选择,当我们对尾部行为感兴趣时它并不是最好的,但它最容易使用,例如http://archive.wired.com/techbiz/it/magazine/17 -03/wp_quant?当前页=所有
两个参考
https://stats.stackexchange.com/questions/37424/how-to-simulate-from-a-gaussian-copula
http://www.mathworks.com/products/demos/statistics/copulademo.html
(我可能刚才在python中做过这个,但是现在没有任何脚本或函数.)
归档时间: |
|
查看次数: |
6781 次 |
最近记录: |