2011-12-29 5 views
2

私は互いに関連する2つのランダム変数を作成しようとしています。そして、最良の方法は、与えられたパラメータ(他のアイデアを開く)で二変量正規分布から引き出すことです。無相関バージョンは次のようになります。Pythonで二変量法線からサンプリングする

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

しかし、80の各1引き分けのために、私はシータ値に関連するシグマ値を求めています。何かご意見は?

+0

あなたは共分散行列(ρ)をどのようにしたいですか? –

+1

私が間違っていたら訂正してください。しかし、正規分布ではなく普通のものを使ってはいけませんか? –

答えて

11

ビルトインを使用します。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. へ現実世界で意味があるならば、共分散行列は対称でなければならず、またでなければならない。正定値またはposi半期準確定(可逆でなければならない)。特定の反相関構造は不可能かもしれない。
+1

パーフェクト - 私の平凡な統計的背景から、mycovの値が何に関連しているのか説明できますか?私は、 "5"と "1"はそれぞれの関心ベクトルに対応する分散であると仮定します。再びありがとう、 – mike

+0

本当にはい! 5と1は分散、3は共分散です。説明したように、ちょうど相関を求めたいのであれば、もう少しジグザグしなければなりません。 –

+0

偉大な答え!これは、(ガウスランダム)ベクトルを行列と事前に乗算して共分散を誘導するよりはるかに簡単です。 –

関連する問題