始める無料で始める

二次効用関数の最大化

ポートフォリオ最適化の課題に関する動画では、quadprog パッケージを使って二次効用の最適化問題を解く方法を見ました。この演習では、PortfolioAnalytics パッケージを使って二次効用問題を解く方法を学びます。二次効用の定式化は2つの項から成り、1つはポートフォリオの平均リターン、もう1つはリスク回避パラメータ lambda を伴うポートフォリオ分散です。

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

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

コースを見る

演習の手順

  • index_returns データセットの資産名を使ってポートフォリオ仕様オブジェクトを作成し、オブジェクト名を port_spec にします。
  • port_spec オブジェクトに、ウェイトの合計が1になるように「フルインベストメント」の制約を追加します。
  • port_spec オブジェクトに、各資産のウェイトが0から1の範囲となる「ロングのみ」の制約を追加します。
  • port_spec オブジェクトに、ポートフォリオの平均リターンを最大化する目的関数を追加します。
  • port_spec オブジェクトに、ポートフォリオ分散を最小化する目的関数を追加します。リスク回避は10に設定してください。
  • 最適化を実行します。この問題は二次計画法ソルバーで解けるため、optimize_method = "ROI" を指定します

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

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

# Create the portfolio specification
port_spec <- portfolio.spec(assets = ___)

# Add a full investment constraint such that the weights sum to 1
port_spec <- add.constraint(portfolio = ___, type = ___)

# Add a long only constraint such that the weight of an asset is between 0 and 1
port_spec <- add.constraint(portfolio = ___, type = ___)

# Add an objective to maximize portfolio mean return
port_spec <- add.objective(portfolio = ___, type = ___, name = ___)

# Add an objective to minimize portfolio variance
port_spec <- add.objective(portfolio = port_spec, type = ___, name = ___, risk_aversion = ___)

# Solve the optimization problem
opt <- optimize.portfolio(R = ___, portfolio = ___, optimize_method = "ROI")
コードを編集して実行