数式から本格的な回帰へ
statsmodels.formula.api.ols('excess ~ mkt_rf + smb + hml', data=table).fit() は1行の式から最小二乗回帰を当てはめます。~ の左は説明したい量、右は説明変数で、切片は自動で加わります(外すには - 1)。結果オブジェクトにはすべてが入っています:params(係数)、bse(標準誤差)、tvalues、pvalues、rsquared、rsquared_adj、aic、resid、印刷用レポートの summary() です。どれもpandasのSeriesか数なので、DataFrameに並べればきれいな表になり、res.predict(新しい表) は同じ列名の新しい行に当てはめた式を適用します。株式のファクター回帰が標準的な使い方で、excess は無リスク金利を超える株式のリターン、mkt_rf は市場、smb は規模ファクター、hml はバリューファクターです。
2つの比較が表を役立つものにします。CAPMは市場だけ、excess ~ mkt_rf を使い、3ファクターモデルは smb と hml を加えます。説明変数を増やしても R² は決して下がらないので、自由度調整済み R²、AIC、あるいはF検定を使います。ff3.compare_f_test(capm) はF統計量、そのp値、追加した説明変数の数を返し、p値が小さければ2つの追加ファクターに本当の説明力があるということです。もうひとつの定番の注意は表そのものです。月末リターンは各暦月の最後の終値から(prices.groupby(prices.index.to_period('M')).last() のあと pct_change())求め、同じ月でファクター表と結合しなければなりません。月がずれた回帰はノイズへの回帰です。
- 1行で1つの回帰:式が目的変数と説明変数を示し、結果オブジェクトがすべての統計量を持つ。
- 入れ子のモデルは適切な道具で比べる:R² は必ず上がるので、調整済みR²、AIC、F検定を使う。
- まず月を揃える:月末リターンは同じ月のファクターと組にする。
ラボ:採点される内容
- 月次回帰表15点
- CAPMの当てはめ10点
- 3ファクターの当てはめ10点
- 整った係数表15点
- 大きいモデルは割に合うか15点
- 予測10点
- 研究全体25点