二次効用関数の最大化
ポートフォリオ最適化の課題に関する動画では、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")