4

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

port_var = W'_p * S * W_p

Nassestのポートフォリオの場合

W'_p = transpose of vector of weights of stocks in portfolios
S = sample covariance matrix
W_p = vector of weights of stocks in portfolios

私は次のnumpy行列を持っています。

ポートフォリオ内の株式の重みの配列(ベクトル)(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]])

私が計算するとき

weights.T * covar * weights

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

誰かがこれを助けてくれるかもしれない経験がありますか?

4

1 に答える 1

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

2D numpy配列の場合、np.dot行列の乗算と同等です。

1D配列でnp.dottedされた2D配列の場合、np.dot行列とベクトルの乗算と同等です。

1D配列の場合、np.dotは内積に相当します。

numpy配列の場合、*は要素ごとの乗算を実行します(必要に応じてブロードキャストを使用)。


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

または、に変換するcovarと、np.matrix行列の*乗算と同等になります。

于 2011-09-13T22:09:26.373 に答える