2011-09-13 4 views
4
におけるN資産のポートフォリオのポートフォリオ分散

ポートフォリオの分散は次のように計算されます。ポートフォリオの株式の重みのPythonの

アレイ(ベクトル)(10個の銘柄がある):株式リターンの

weights = np.array(
    [[ 0.09], 
     [ 0.05], 
     [ 0.15], 
     [ 0.10], 
     [ 0.15], 
     [ 0.15], 
     [ 0.08], 
     [ 0.08], 
     [ 0.1 ], 
     [ 0.05]]) 

共分散行列:

covar = np.array([[ 0.00154474 0.00079555 0.00099691 0.00052596 0.0005363 0.00062005 
0.00064031 0.00037494 0.00018826 0.00132809], 
[ 0.00079555 0.00287429 0.00058536 0.00091774 0.00046885 0.00110434 
0.00137141 0.00046724 0.00030414 0.0016615 ], 
[ 0.00099691 0.00058536 0.00155757 0.00056336 0.00052395 0.00060104 
0.00057223 0.00021365 0.00017057 0.00130247], 
[ 0.00052596 0.00091774 0.00056336 0.00126312 0.00031941 0.00088137 
0.00024493 0.00025136 0.00011519 0.00135475], 
[ 0.0005363 0.00046885 0.00052395 0.00031941 0.00054093 0.00045649 
0.00042927 0.00021928 0.00016835 0.00093471], 
[ 0.00062005 0.00110434 0.00060104 0.00088137 0.00045649 0.00133081 
0.00060353 0.0003967 0.00024983 0.00168281], 
[ 0.00064031 0.00137141 0.00057223 0.00024493 0.00042927 0.00060353 
0.00468731 0.00059557 0.00020384 0.00078669], 
[ 0.00037494 0.00046724 0.00021365 0.00025136 0.00021928 0.0003967 
0.00059557 0.00082333 0.00017191 0.00066816], 
[ 0.00018826 0.00030414 0.00017057 0.00011519 0.00016835 0.00024983 
0.00020384 0.00017191 0.00036348 0.0004505 ], 
[ 0.00132809 0.0016615 0.00130247 0.00135475 0.00093471 0.00168281 
0.00078669 0.00066816 0.0004505 0.00530036]]) 

Iが計算

weights.T * covar * weights 

結果は、covarと同じサイズです。私はポートフォリオ理論の初心者ですが、ポートフォリオの分散はスカラー(単一値)でなければならないと思います。

これに役立つ経験がある人はいますか?

答えて

4
np.dot(weights.T,np.dot(covar,weights)) 
# array([[ 0.00064654]]) 

2次元numpy配列の場合、np.dotは行列乗算と等価です。

2D配列のnpに1D配列を付けると、np.dotは行列 - ベクトル乗算と等価です。

1Dアレイの場合、np.dotは内積に相当します。

numpy配列の場合、*は要素ごとの乗算を行います(必要に応じてbroadcasting)。


weights.T*np.matrix(covar)*weights 
#matrix([[ 0.00064654]]) 

あなたはnp.matrixcovarを変換する場合あるいは、それから*は行列の乗算と等価です。

+1

これは美しいことです。 –

+0

@ strimp099 - 新しいバージョンのnumpy(> = 1.5だと思いますが)では、 'dot'もndarrayメソッドです。言い換えれば、unutbuの例題の最初の例を 'weights.T.dot(covar.dot(weights))'と書くことができます。いくつかの事柄では、このスタイルは、後方互換性は少し劣るものの、少しクリーナーです。 –

+0

ありがとう@ジョー –