ウェイト制約を課す
投資家はしばしば、ポートフォリオの各資産のウェイトに上限を設ける制約を受けます。これらの制約は実はメリットにもなります。最大ウェイトの制約があると、その後のポートフォリオは特定の資産に過度に集中しにくくなります。ただしデメリットもあります。同じ目標リターンが達成できなくなる、あるいは達成できてもボラティリティ(変動性)が高くなる可能性があることです。
前の演習で見たように、portfolio.optim() 関数では reshigh 引数でウェイト制約を設定できます。reshigh には各資産の最大ウェイトを並べたベクトルを渡します。
この演習では、最大ウェイト制約の異なる3つのポートフォリオを作成します。ここでは portfolio.optim() 関数の出力を理解しておくことが重要です。この関数は4つの要素からなるリストを返します。(i) $pw: ポートフォリオのウェイト、(ii) $px: ポートフォリオ全体のリターン、(iii) $pm: 期待リターンのポートフォリオ、(iv) $ps: ポートフォリオ・リターンの標準偏差です。
この演習はコースの一部です
Rで学ぶポートフォリオ分析入門
演習の手順
rep()関数を使って、returnsの各資産(列)に対応する最大ウェイトのベクトルを3つ作成します。最初のベクトルは最大100%、次は10%、最後は5%とし、それぞれmax_weights1、max_weights2、max_weights3と名付けます。- 最大ウェイト100%の最適ポートフォリオを作成し、
opt1と名付けます。 - 最大ウェイト10%の最適ポートフォリオを作成し、
opt2と名付けます。 - 最大ウェイト5%の最適ポートフォリオを作成し、
opt3と名付けます。 - 各ポートフォリオについて、ウェイトが1%を超える資産の数を計算します。ウェイトには、ポートフォリオ名の後に
$pwを付けてアクセスします。 - 作成した3つのポートフォリオのボラティリティ(標準偏差
$ps)を出力してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Create vectors of maximum weights
max_weights1 <- rep(1, ncol(returns))
max_weights2 <- ___
max_weights3 <- ___
# Create an optimum portfolio with max weights of 100%
opt1 <- portfolio.optim(___, reshigh = ___)
# Create an optimum portfolio with max weights of 10%
# Create an optimum portfolio with max weights of 5%
# Calculate how many assets have a weight that is greater than 1% for each portfolio
sum(opt1$pw > .01)
sum(___$pw > .01)
sum(___$pw > .01)
# Print portfolio volatilites
opt1$ps
___$__
___$__