WHAT' CHA GONNA DO FOR ME?

Python、統計、機械学習、R、ファイナンスとか

pandasでFF+C4ファクターを作ってみた②

これのちょっとした続き。

pandasのscatter_matrixを使うと、列のヒストグラムや分布、列間の散布図がまとめて出せると聞いたのでやってみる。
4ファクターを作るところまでは前回と一緒なので割愛。
このコードでスキャッタープロットが出る。対角部分は今回はカーネル分布にしておく。

pd.scatter_matrix(ffc4,diagonal='kde')

f:id:lofas:20150214234811p:plain

いいね!
散布図を見る限りファクター間の相関はあまり高くなさそうだね、ということで、一応相関を計算してみる。
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()