我试图创建两个相互关联的随机变量,我认为最好的方法是从给定参数的二元正态分布中提取(开放给其他想法)。不相关的版本看起来像这样:
import numpy as np sigma = np.random.uniform(.2, .3, 80) theta = np.random.uniform( 0, .5, 80)
然而,对于80次绘制中的每一次,我希望sigma值与theta值相关。有什么想法吗?
epggiuax1#
使用内置的: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.如图所示,如果必须对非单位方差进行调整,则情况会变得更加复杂)1.更多参考:http://www.riskglossary.com/link/correlation.htm1.为了在现实世界中有意义,协方差矩阵必须是对称的,并且还必须是 * 正定 * 或 * 半正定 *(它必须是可逆的)。特定的反相关结构可能是不可能的。
k75qkfdt2#
可以使用scipy中的import multivariate_normal。假设我们创建随机变量x和y:
scipy
import multivariate_normal
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)
从rv[:,0]得到x,从rv[:,1]得到y。相关系数可由下式获得:
rv[:,0]
rv[:,1]
import numpy as np np.corrcoef(rv.T)
j8ag8udp3#
两个正态分布由均值和方差定义:
means = [0, 0] # respective means var_xx = 1 ** 2 # var x = std x squared var_yy = 1 ** 2
两个分布之间的协方差由方差和协方差组成的协方差矩阵定义。两个协方差x/y和y/x相等:
import numpy as np cov_xy = 0.5 cov = np.array([[var_xx, cov_xy], [cov_xy, var_yy]])
使用随机生成器和函数multivariate_normal从分布中抽取N对。可选check_valid='raise'用于检查协方差矩阵实际上是symmetric and positive semi-definite:
multivariate_normal
check_valid='raise'
g = np.random.default_rng() N = 100 pairs = g.multivariate_normal(means, cov, size=N, check_valid='raise')
作为一个例子,让我们绘制这些对:
import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.scatter(pairs[:,0], pairs[:,1])
3条答案
按热度按时间epggiuax1#
使用内置的:http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.multivariate_normal.html
1.如图所示,如果必须对非单位方差进行调整,则情况会变得更加复杂)
1.更多参考:http://www.riskglossary.com/link/correlation.htm
1.为了在现实世界中有意义,协方差矩阵必须是对称的,并且还必须是 * 正定 * 或 * 半正定 *(它必须是可逆的)。特定的反相关结构可能是不可能的。
k75qkfdt2#
可以使用
scipy
中的import multivariate_normal
。假设我们创建随机变量x
和y
:从
rv[:,0]
得到x
,从rv[:,1]
得到y
。相关系数可由下式获得:j8ag8udp3#
两个正态分布由均值和方差定义:
两个分布之间的协方差由方差和协方差组成的协方差矩阵定义。两个协方差x/y和y/x相等:
使用随机生成器和函数
multivariate_normal
从分布中抽取N对。可选check_valid='raise'
用于检查协方差矩阵实际上是symmetric and positive semi-definite:作为一个例子,让我们绘制这些对: