我正在尝试创建两个相互关联的随机变量,我认为最好的方法是从具有给定参数(对其他想法开放)的双变量正态分布中提取。不相关的版本如下所示:
import numpy as np
sigma = np.random.uniform(.2, .3, 80)
theta = np.random.uniform( 0, .5, 80)
但是,对于 80 次抽奖中的每一次抽奖,我都希望 sigma 值与 theta 值相关。有什么想法吗?
最佳答案
使用内置:http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.multivariate_normal.html
>>> import numpy as np
>>> mymeans = [13,5]
>>> # stdevs = sqrt(5),sqrt(2)
>>> # corr = .3 / (sqrt(5)*sqrt(2) = .134
>>> mycov = [[5,.3], [.3,2]]
>>> np.cov(np.random.multivariate_normal(mymeans,mycov,500000).T)
array([[ 4.99449936, 0.30506976],
[ 0.30506976, 2.00213264]])
>>> np.corrcoef(np.random.multivariate_normal(mymeans,mycov,500000).T)
array([[ 1. , 0.09629313],
[ 0.09629313, 1. ]])
- 如图所示,如果您必须针对非单位方差进行调整,事情会变得有点棘手)
- 更多引用:http://www.riskglossary.com/link/correlation.htm
- 要在现实世界中有意义,协方差矩阵必须对称并且还必须是正定或半正定(它必须是可逆)。特定的反相关结构可能是不可能的。
关于python - 从python中的双变量正态采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8674832/