目標リターンのグリッドを使って効率的フロンティアを計算する
これまでに見たように、効率的フロンティアを計算する1つの方法は、まず目標リターンのグリッドを定義し、その後、各目標リターンごとに、期待リターンが目標リターンと等しく、分散が最小となるポートフォリオを求めるという流れです。
では、妥当な目標リターンのグリッドとは何でしょうか。最大の目標リターンは、各銘柄の平均リターンの最大値に設定します。最小の目標リターンは、本来であれば最小分散ポートフォリオのリターンに設定したいところですが、まだその値が分からないため、ここでは全銘柄の平均リターンの最小値を用いてグリッドを作成します。
この演習では、for ループを使って、ポートフォリオの平均、標準偏差、およびウェイトの候補グリッドを計算します。
この演習はコースの一部です
Rで学ぶポートフォリオ分析入門
演習の手順
returnsの列平均(colMeans()を使用)を計算し、stockmuと名付けます。- 長さ 50 の数列(seq())を作成します。これは無リスク金利 1% から始まり、
stockmuの最大値で終わるようにし、gridと名付けます。 - rep() を使って、
gridと同じ長さの空のベクトルを2つ初期化し、ポートフォリオの平均と標準偏差を格納します。これらをそれぞれvpmとvpsdとします。 - 50 行 30 列の空の行列を初期化し、
mweightsと名付けます。matrix()関数を使用できます。 - for ループを作成し、
gridの最初の値から最後の値まで反復します。各反復で、returnsを用い、目標リターンをgridの該当値に設定したポートフォリオoptを作成します。 - 各反復で、
optの値を使って、ベクトルvpm($pm)、vpsd($ps)をそれぞれ埋めていきます。 - ポートフォリオのウェイト(
$pw)をmweightsに行ごとに格納します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Calculate each stocks mean returns
# Create a grid of target values
grid <- seq(from = ___, to = ___, length.out = ___)
# Create empty vectors to store means and deviations
vpm <- vpsd <-
# Create an empty matrix to store weights
mweights <- matrix(NA, 50, 30)
# Create your for loop
for(i in 1:length(grid)) {
opt <- portfolio.optim(x = ___, pm = ___[i])
vpm[i] <- ___$__
vpsd[i] <- ___$__
mweights[i, ] <- ___$__
}