pandasでFF+C4ファクターを作ってみた②
これのちょっとした続き。
pandasのscatter_matrixを使うと、列のヒストグラムや分布、列間の散布図がまとめて出せると聞いたのでやってみる。
4ファクターを作るところまでは前回と一緒なので割愛。
このコードでスキャッタープロットが出る。対角部分は今回はカーネル分布にしておく。
pd.scatter_matrix(ffc4,diagonal='kde')
いいね!
散布図を見る限りファクター間の相関はあまり高くなさそうだね、ということで、一応相関を計算してみる。
pandasで相関行列を計算するのは前にやったので、そのことを思い出す。
加えて、どれも正規分布にはいまいち従ってなさそうなので、歪度と尖度も一応計算しておく。
In [32]: ffc4.corr() Out[32]: 1 Mkt-RF 2 SMB 3 HML 1 Mom 1 Mkt-RF 1 0.326722 0.228785 -0.33814 2 SMB 0.326722 1 0.114047 -0.148994 3 HML 0.228785 0.114047 1 -0.404134 1 Mom -0.33814 -0.148994 -0.404134 1 ffc4.skew() Out[33]: 1 Mkt-RF 0.193809 2 SMB 1.966844 3 HML 2.144194 1 Mom -3.116315 dtype: float64 ffc4.kurt() Out[34]: 1 Mkt-RF 7.734848 2 SMB 19.382973 3 HML 18.916469 1 Mom 28.186152 dtype: float64
これで計算される尖度は、通常の尖度から3を引いた超過尖度である点に注意すること。
相関はそこまで高いものはないので、OLSの説明変数として使う分には多重共線性の問題は起きなさそう。
あと、グラフで見た通り、いずれのファクターも歪度、超過尖度ともに0からかなり離れてるため、正規分布とは言えませんね、なかでもモメンタムファクターは暴れてますね、という結果に。
コード全体はこんな感じで、前回とほとんど変わらず。
# -*- coding: utf-8 -*- import pandas.io.data as web import numpy as np import seaborn as sns import pandas as pd ip=web.DataReader("F-F_Momentum_Factor", "famafrench") mom=ip[1].replace(-99.99,np.NaN).dropna() ip=web.DataReader("F-F_Research_Data_Factors", "famafrench") ff3=ip[0].replace(-99.99,np.NaN).dropna().ix[:,0:3] ffc4=pd.merge(ff3,mom,left_index=True, right_index=True) pd.scatter_matrix(ffc4,diagonal='kde') ffc4.corr() ffc4.skew() ffc4.kurt()