在Python中从双变量正态分布采样

2024-03-28 17:51:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建两个相互关联的随机变量,我相信最好的方法是从给定参数的二元正态分布中提取(开放给其他想法)。不相关的版本如下:

import numpy as np
sigma = np.random.uniform(.2, .3, 80)
theta = np.random.uniform( 0, .5, 80)

但是,对于80个绘图中的每一个,我希望sigma值与theta值相关。有什么想法吗?


Tags: 方法import版本numpy绘图参数asnp
2条回答

可以使用scipy中的import multivariate_normal。假设我们创建随机变量xy

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)

你有来自rv[:,0]x和来自rv[:,1]y。相关系数可以从

import numpy as np
np.corrcoef(rv.T)

使用内置: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.        ]])
  1. 如图所示,如果你不得不调整非单位方差,事情会变得更加棘手)
  2. 更多参考:http://www.riskglossary.com/link/correlation.htm
  3. 要使协方差矩阵具有现实意义,协方差矩阵必须是对称的,并且还必须是正定的正半定的(它必须是可逆的)。特定的反相关结构可能是不可能的。

相关问题 更多 >