始める無料で始める

標本モーメント推定

ポートフォリオのモーメント推定におけるデフォルト手法は標本法です。モーメントは、momentFUN 引数に渡した関数を optimize.portfolio() 内で評価して計算します。momentFUN のデフォルトは set.portfolio.moments() で、標本モーメントを計算します。こうして得られたモーメントは目的関数の入力として使われます。推定すべきモーメントは目的によって異なります。例えば、ポートフォリオの標準偏差を最小化する目的では第2モーメントのみが必要です。これに対して、シャープレシオを最大化する目的では第1モーメントと第2モーメントの推定が必要です。標本モーメント推定には、推定誤差や次元の呪いといった欠点があります。資産数や推定するパラメータの次元が増えるほど、推定誤差のリスクは高まります。

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

Rで学ぶ中級ポートフォリオ分析

コースを見る

演習の手順

  • 目的名に "mean" を指定して、リターンの目的を追加します。
  • set.portfolio.moments を使って標本モーメントを計算し、moments という変数に代入します。
  • 第1モーメントがリターンの標本平均推定と等しいか確認します。
  • 目的名に "StdDev" を指定して、リスクの目的を追加します。
  • set.portfolio.moments を使って標本モーメントを計算し、moments という変数に代入します。
  • 第2モーメントが分散共分散行列の標本推定と等しいか確認します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Add a return objective with "mean" as the objective name
port_spec <- add.objective(portfolio = port_spec, type = ___, name = ___)

# Calculate the sample moments
moments <- set.portfolio.moments(R = ___, portfolio = ___)

# Check if moments$mu is equal to the sample estimate of mean returns
moments$mu == colMeans(asset_returns)

# Add a risk objective with "StdDev" as the objective name
port_spec <- add.objective(portfolio = port_spec, type = ___, name = ___)

# Calculate the sample moments using set.portfolio.moments. Assign to a variable named moments.
moments <- set.portfolio.moments(R = ___, portfolio = ___)

# Check if moments$sigma is equal to the sample estimate of the variance-covariance matrix
moments$sigma == cov(asset_returns)
コードを編集して実行