pandasとscikits.statsmodelsを使用してリターンのOLSを求める

pandasを使用して2つの銘柄の日次リターンの時系列相関を求める」の続きっぽいやつ。

「scikits.statsmodels」が必要だったので、importした。
特にコメントは無いw。

#coding:utf-8
import pandas as pd
import numpy as np
import datetime as dt
import pandas_datareader.data as pdd
import scikits.statsmodels

######## Define Method ########
def getMultiStockData(tickerList, date_from, date_to):
    def getStockData(ticker):
        stockData = pdd.DataReader(ticker, 'yahoo', date_from, date_to)
        return stockData
    datas = map(getStockData, tickerList)
    return pd.concat(datas, keys=tickerList, names=['Ticker', 'Date'])

######### 処理 #########
# 期間設定
date_from = dt.date(2016, 1, 1)
date_to = dt.date(2016, 12, 16)

# 株価取得
tickerList = ['1803', '8698']
multiStockData  = getMultiStockData(tickerList, date_from, date_to)

######### 終値取得と日次リターン #########
# 終値を取得
adjClosingPrice = multiStockData[['Adj Close']]
adjClosingPrice = adjClosingPrice.reset_index()

# pandas.DataFrameをpivotingして終値データをticker毎に纏める
adjClosingPriceTable = adjClosingPrice.pivot(
    index='Date',
    columns='Ticker',
    values='Adj Close'
)

# 日次リターンを求める
daily_pct_change =  adjClosingPriceTable.pct_change()   # 日次リターンの計算
daily_pct_change.fillna(0, inplace=True)                # Nanを0で埋める

######### OLS実行 ########
model = pd.ols(
    y=daily_pct_change['1803'],
    x={'8698': daily_pct_change['8698']},
    window=20
)

model.beta['8698'].plot(figsize=(12, 8));