我有一个pandas数据框,其中包含1963年至2012年(几乎6000万行)的各个公司的每日股票收益。我想估算CAPM Beta,因此我需要在过去250天中为每家公司运行滚动OLS回归,并将Beta值添加到现有数据框中。
我已经尝试将pyfinance软件包中的PandasRollingOLS函数与“ groupby”组合在一起,后者仅返回内存错误。 我也尝试编写两个for循环,第一个按公司分组('PERMNO'),第二个for循环进行滚动回归。但是,这也不起作用
我的数据框如下:
PERMNO RET mkt RF
date
1986-01-08 10000 -0.024640 -0.020994 0.00025
1986-01-09 10000 -0.000250 -0.011469 0.00025
1986-01-10 10000 -0.000250 -0.000167 0.00025
1986-01-13 10000 0.049750 0.002499 0.00025
1986-01-14 10000 0.047369 0.000116 0.00025
1986-01-15 10000 0.045205 0.007956 0.00025
1986-01-16 10000 0.043228 0.004452 0.00025
1986-01-17 10000 -0.000250 -0.001991 0.00025
1986-01-20 10000 -0.000250 -0.003985 0.00025
1986-01-21 10000 -0.000250 -0.007242 0.00025
rolling = daily.groupby('PERMNO').apply(lambda x: ols.PandasRollingOLS(y=daily['RET'], x=daily['mkt'], window=250))
regression=np.zeros((len(daily.index),2))
for group_name, df_group in daily_grouped:
for row in range(0,len(daily.index),1):
y= daily.RET[row:row + 250]
x= daily.mkt[row:row + 250]
regression[row]=np.polyfit(x,y,1)
daily['beta']=regression[:,0]
我想知道如何从公司的滚动回归中获取beta值