我正在尝试创建两个相互关联的随机变量,我相信最好的方法是从具有给定参数的二元正态分布中提取(对其他想法开放)。不相关的版本如下所示:
import numpy as np
sigma = np.random.uniform(.2, .3, 80)
theta = np.random.uniform( 0, .5, 80)
但是,对于 80 次抽奖中的每一次,我希望 sigma 值与 theta 值相关。有什么想法吗?
我正在尝试创建两个相互关联的随机变量,我相信最好的方法是从具有给定参数的二元正态分布中提取(对其他想法开放)。不相关的版本如下所示:
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. ]])
import multivariate_normal
从scipy
可以使用。假设我们创建随机变量x
和y
:
from scipy.stats import multivariate_normal
rv_mean = [0, 1] # mean of x and y
rv_cov = [[1.0,0.5], [0.5,2.0]] # covariance matrix of x and y
rv = multivariate_normal.rvs(rv_mean, rv_cov, size=10000)
你有x
fromrv[:,0]
和y
from rv[:,1]
。相关系数可以从
import numpy as np
np.corrcoef(rv.T)