2

私は互いに相関する2つの確率変数を作成しようとしています。最良の方法は、与えられたパラメーター(他のアイデアを受け入れる)を使用して2変量正規分布から引き出すことだと思います。無相関バージョンは次のようになります。

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

ただし、80回の描画のそれぞれについて、シグマ値をシータ値に関連付けたいと思います。何かご意見は?

4

2 に答える 2

12

組み込みを使用します: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. 実世界で意味のあるものにするには、共分散行列が対称である必要があり、正定値または正半定値である必要があります(反転可能である必要があります)。特定の反相関構造は不可能な場合があります。
于 2011-12-30T00:23:35.010 に答える
1

import multivariate_normalfromscipyを使用できます。確率変数を作成し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)

からとxからがありrv[:,0]ます。相関係数は、次の式から取得できます。yrv[:,1]

import numpy as np
np.corrcoef(rv.T)
于 2019-02-24T08:48:35.030 に答える