始める無料で始める

目標リターンのグリッドを使って効率的フロンティアを計算する

これまでに見たように、効率的フロンティアを計算する1つの方法は、まず目標リターンのグリッドを定義し、その後、各目標リターンごとに、期待リターンが目標リターンと等しく、分散が最小となるポートフォリオを求めるという流れです。

では、妥当な目標リターンのグリッドとは何でしょうか。最大の目標リターンは、各銘柄の平均リターンの最大値に設定します。最小の目標リターンは、本来であれば最小分散ポートフォリオのリターンに設定したいところですが、まだその値が分からないため、ここでは全銘柄の平均リターンの最小値を用いてグリッドを作成します。

この演習では、for ループを使って、ポートフォリオの平均、標準偏差、およびウェイトの候補グリッドを計算します。

この演習はコースの一部です

Rで学ぶポートフォリオ分析入門

コースを見る

演習の手順

  • returns の列平均(colMeans() を使用)を計算し、stockmu と名付けます。
  • 長さ 50 の数列(seq())を作成します。これは無リスク金利 1% から始まり、stockmu の最大値で終わるようにし、grid と名付けます。
  • rep() を使って、grid と同じ長さの空のベクトルを2つ初期化し、ポートフォリオの平均と標準偏差を格納します。これらをそれぞれ vpmvpsd とします。
  • 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, ] <- ___$__
}
コードを編集して実行