
在实证分析中,ri可以使用资产组合的月度或者周度收益率计算,rf可以使用一年期存款利率计算,rm可以使用某个宽基指数或者宽基指数组合的月度或者周度收益率计算进行计算。


3、实证思路的设计
(1)以过去某一段时间,如过去一年内的基金的周收益率为样本,对基金i的收益率序列ri,通过Jensen Alpha模型回归计算原始的超额收益αi和残差序列ei;
(2)对残差序列ei有放回抽样(即Bootstrap处理),获得相同长度的伪残差序列ei_hat;
(3)假设原始的αi不存在,即运气成分,根据伪残差序列,构造伪收益率序列ri_hat,ri_hat-rf=βi*(rm-rf)+ei_hat;
(4)对基金i的伪收益率序列ri_hat,通过模型回归得到Bootstrap后的伪超额收益αi_hat;
(5)重复上述2~4步骤骤1000次,获得1000个Bootstrap超额收益αi_hat;
(6)根据假设检验的原理,基本思路为原始的αi不存在,我们通过1000次Bootstrap得到超额收益αi_hat形成了一个分布,可以设定一个小概率事件发生的区域,由于我们希望得到的是备择假设是αi是存在的且是显著大于0的,所以如果αi落入右侧小概率区域,则可以拒绝原假设,说明基金的超额收益是靠实力达到的,在我们的实验设计中,我们设定这个拒绝域的概率为10%。
fromstatsmodels.regression.linear_modelimportOLS#线性回归#使用JensenAlpha模型计算超额收益αi#df_alpha_xc为包含rprf(ri-rf)、rmrf(rm-rf),cons为常数项的dataframeregmodel2=OLS(df_alpha_xc.rprf,df_alpha_xc[['cons','rmrf']],missing='drop',hasconst=True).fit()#运气还是实力bootstrap重复抽样计算alpha#首先取出CAPM模型中的残差序列、拟合值dfres=pd.DataFrame({'fit':regmodel2.fittedvalues,'resid':regmodel2.resid})#取出回归拟合值和残查项df_alpha_res=pd.merge(df_alpha_xc,dfres,right_index=True,left_index=True,how='inner')#整合原始数据和拟合数据df_alpha_res=df_alpha_res.copy()#计算伪净值y_hat=b*(rm-rf)+resid,没有截距项df_alpha_res['fit_hat']=regmodel2.params['rmrf']*df_alpha_res['rmrf']+df_alpha_res['resid']df_alpha_res=df_alpha_res.reset_index()#方便获取索引num=len(df_alpha_res)#样本的个数alpha_list=[]foriinrange(1000):#bootstrap1000次index=np.random.choice(range(num),num)#有放回抽样df_alpha_res_sample=df_alpha_res.iloc[index]reg_sample=OLS(df_alpha_res_sample.fit_hat,df_alpha_res_sample[['cons','rmrf']],missing='drop',hasconst=True).fit()alpha_sample=reg_sample.params['cons']*52#伪净值的年化选股收益alpha_list.append(alpha_sample)ser=pd.Series(alpha_list)p_alpha=len(ser[ser>exaplpha])/len(ser)#简单计算正向拒绝域的概率p_alpha=(1ifp_alpha<=0.1else0)#aplha是否是运气还是实力0为运气1为实力
2021年1-7月平均收益率 | 本组基金数量 | 本组中超过同期中证500指数涨跌幅(7.06%)的基金占比 | 两样本收益率均值T检验统计量 | |
alpha来自运气组 | 8.8% | 331 | 48% | t=3.29,pvalue=0.001 |
alpha来自实力组 | 14.0% | 302 | 60% |
