金融工学において、資本資産価格モデル(CAPM)とFama-French三因子モデルは、資産価格評価の主要なアプローチとして広く使用されています。CAPMモデルは主に市場リスクが資産収益に与える影響を分析する一方、Fama-French三因子モデルはそれに加えて、規模因子(SMB)と価値因子(HML)の影響を考慮に入れています。
以下に、MATLABを使用してCAPMモデルとFama-French三因子モデルを構築する方法を示します。
1. データ準備
以下のデータを取得済みとします:
- 対象資産の日次収益率(
stock_returns) - 市場指数の日次収益率(
benchmark_returns) - 無リスク金利(
rf_rate) - Fama-French三因子データ(
size_premiumとvalue_premium)
これらのデータは金融データベース(CRSP、Compustatなど)やオンラインリソース(Fama-Frenchデータベースなど)から取得できます。
2. CAPMモデルの構築
CAPMモデルの式は以下の通りです:
\(R_i - R_f = \alpha + \beta (R_m - R_f) + \epsilon\)
ここで、
- \(R_i\) は対象資産の収益率
- \(R_f\) は無リスク金利
- \(R_m\) は市場指数の収益率
- \(\alpha\) は切片項
- \(\beta\) は市場リスク係数
- \(\epsilon\) は誤差項
MATLABでは、fitlm関数を使用してCAPMモデルを推定できます。
% データが以下の変数にロード済みと仮定
% stock_returns: 対象資産の日次収益率
% benchmark_returns: 市場指数の日次収益率
% rf_rate: 無リスク金利
% 超過収益率の計算
excess_stock_returns = stock_returns - rf_rate;
excess_benchmark_returns = benchmark_returns - rf_rate;
% CAPMモデルの構築
market_model = fitlm(excess_benchmark_returns, excess_stock_returns);
% 結果の出力
disp('CAPMモデルの結果:');
disp(market_model);
% alphaとbetaの抽出
intercept = market_model.Coefficients.Estimate(1);
market_beta = market_model.Coefficients.Estimate(2);
fprintf('切片(Alpha): %.4f\n', intercept);
fprintf('市場ベータ: %.4f\n', market_beta);
3. Fama-French三因子モデルの構築
Fama-French三因子モデルの式は以下の通りです:
\(R_i - R_f = \alpha + \beta_1 (R_m - R_f) + \beta_2 \text{SMB} + \beta_3 \text{HML} + \epsilon\)
ここで、
- \(\text{SMB}\) は規模因子(Small Minus Big)
- \(\text{HML}\) は価値因子(High Minus Low)
MATLABでは、fitlm関数を使用して三因子モデルを推定できます。
% データが以下の変数にロード済みと仮定
% stock_returns: 対象資産の日次収益率
% benchmark_returns: 市場指数の日次収益率
% rf_rate: 無リスク金利
% size_premium: 規模因子
% value_premium: 価値因子
% 超過収益率の計算
excess_stock_returns = stock_returns - rf_rate;
excess_benchmark_returns = benchmark_returns - rf_rate;
% 三因子モデルの構築
ff_model = fitlm([excess_benchmark_returns, size_premium, value_premium], excess_stock_returns);
% 結果の出力
disp('Fama-French三因子モデルの結果:');
disp(ff_model);
% 係数の抽出
intercept = ff_model.Coefficients.Estimate(1);
market_beta = ff_model.Coefficients.Estimate(2);
size_beta = ff_model.Coefficients.Estimate(3);
value_beta = ff_model.Coefficients.Estimate(4);
fprintf('切片(Alpha): %.4f\n', intercept);
fprintf('市場ベータ: %.4f\n', market_beta);
fprintf('規模ベータ(SMB): %.4f\n', size_beta);
fprintf('価値ベータ(HML): %.4f\n', value_beta);
4. データ読み込み例
データがCSVファイルに保存されている場合の読み込み例です。
% データの読み込み
financial_data = readtable('market_data.csv');
% データの抽出
stock_returns = financial_data.StockReturns;
benchmark_returns = financial_data.BenchmarkReturns;
rf_rate = financial_data.RiskFreeRate;
size_premium = financial_data.SizePremium;
value_premium = financial_data.ValuePremium;
% 数値配列への変換(必要な場合)
stock_returns = table2array(stock_returns);
benchmark_returns = table2array(benchmark_returns);
rf_rate = table2array(rf_rate);
size_premium = table2array(size_premium);
value_premium = table2array(value_premium);
5. 注意事項
- データの頻度(日次、週次、月次)によってモデルの推定結果が異なります。一般的に、CAPMと三因子モデルは月次データに適しています。
- 実際の適用においては、外れ値の除去、欠損値の処理などのデータ前処理が必要になる場合があります。
- データ量が多い場合、
fitrlinearなどのより効率的な線形回帰関数を検討する価値があります。
上記のコードを使用することで、MATLABでCAPMモデルとFama-French三因子モデルを構築し、資産の収益を分析できます。