2017-04-17 181 views
1

我需要运行大量的OLS回归模型(〜1.600)。我已经为〜1.600个观测值中的每一个收集了60个数据点。在python中运行多个OLS回归模型

我正在使用Fama & French 5因子模型,其中每个观测值的60个数据点都与样本中的日期相匹配。例如。我有一个数据框中的开始日期['2010-1-1']到结束日期['2015-1-1']的五个因子参数。

我需要针对给定股票的股票收益率运行这些参数。现在,由于五个因子参数是在数据框中收集的,大约有96.000行(1600 * 60)和五列(对于每个因子),我需要选择前60个观察值,用OLS对一组返回值运行这些参数,存储估计系数,然后选择因子参数和股票收益的观察值。

start = 0 
stop = 59 

empty_list = [] 

for i in my_data: 
    coef = my_date[i][start:stop] 
    # run regression with the coef slice and store them in a dataframe 
    start += 60 
    stop += 60 

不过,我似乎无法得到这个工作:

我一直在使用切片状尝试。有关如何解决这个问题的任何建议?

回答

1

使用groupby + np.arange() // 60

from statsmodels.api import formula 
import pandas as pd 

df = pd.DataFrame(
    np.random.randn(96000, 6), 
    columns=['f1', 'f2', 'f3', 'f4', 'f5', 'r'] 

) 

f = 'r ~ f1 + f2 + f3 + f4 + f5' 

def regress(df, f): 
    return formula.ols(f, df).fit().params 

results = df.groupby(np.arange(len(df)) // 60).apply(regress, f=f) 

results.head() 

    Intercept  f1  f2  f3  f4  f5 
0 -0.108910 0.205059 0.006981 0.088200 0.064486 -0.003423 
1 0.155242 -0.057223 -0.097207 -0.098114 0.163142 -0.029543 
2 0.014305 -0.123687 -0.120924 0.017383 -0.168981 0.090547 
3 -0.254084 -0.063028 -0.092831 0.137913 0.185524 -0.088452 
4 0.025795 -0.126270 0.043018 -0.064970 -0.034431 0.081162 
+0

这看起来像什么,我想做的事,真棒东西!但是,这个脚本不是将五个因素的整个样本倒回来,然后将它们除以60? –

+0

@MBV_DK no。它一次倒退60个。 – piRSquared

+0

你先生,是英雄。非常感谢! –