1、第 12 章 中国股市 CAPM 验证12.1 理论基础12.1.1 资本资产定价模型(CAPM)资本资产定价模型(CAPM)的证券市场线公式如下:= + ,iERf )(fMiR其中:为风险资产 的预期收益;ii为市场组合的收益;MR为无风险资产的收益;f为股票 i 的 值。i12.1.2 计算 BETA 值,对于任何股票 i;(实际上就是回归系数的估计值) 。2(,)imiCovR,对于任何组合 p;1Npipw其中, 为组合 p 的 值, 为资产 i 在组合 p 中所占的比例。pipw12.1.3 时间序列模型检验用到的基本时间序列方程如下:, 2,013ittitititRrrS(12
2、.1)其中:是股票 i 在时期 t 的收益率;,it为股票 i 的 值;i为与 值无关的解释变量;iS为此模型 t 时期的残差;,it, , 和 为待估计的系数。0tr1t2t3tr12.1.4 中国市场 CAPM 验证验证 CAPM 在中国股市成立,即验证:资产的风险和收益存在线性关系,即 =0;2tEr是资产 i 风险的唯一度量,即 =0;i3t资产的风险与其收益正相关,即 = - 0;1tr,mtRf=0tErfR资本市场有效,即 , , - - , - 和 为公平赌博(Fair Game) ,2tr3t1t,mtEf0trf,it即以上数值的自相关系数为 0。12.2 计算步骤12.2
3、.1 数据选取研究时间段:1995 年 1 月 1 日到 2000 年 12 月 31 日;研究对象:在对股票模型进行回归时,选取时间段内全部 A 股股票(深市和沪市)作为研究对象;有效市场组合:全部 A 股股票按流通市值进行加权平均形成的组合;无风险利率:一年期居民定期储蓄存款利率;数据频率:双周收益率。即从 1995 年 1 月 1 日到 2000 年 12 月 31 日,计算双周收益率,每只股票有 156 个样本点。剔除交易日期不够 156 天的股票。验证 SAS 程序如下。data ;weeks=(31dec2000d-01jan1995d)/14;put weeks=;run;wee
4、ks=156.512.2.2 模型设定如果用一段时期的数据计算 Beta 值,然后按 Beta 值的大小对股票进行分组,接下来再用此组数据重新计算组合的 Beta 值,并用于检验,会使估计的 Beta 值有很大的偏差。高 Beta 系数组合的 Beta 系数可能会被高估,低 Beta 系数组合的 Beta 系数可能会被低估。为了避免这一问题,我们采用 BJS 方法,即用一段时期的数据计算 Beta 值、分组,然后用接下来的一段时期的数据重新计算每一股票的 Beta 值并算出组合的 Beta 值,并用于检验。模型设定的具体方法由以下几步构成。分组期:采用层叠分组,每个分组期都包括 16 个样本点
5、,如表 12.1 所示。用开始 8 个月的数据(即第 1 个分组期内的 16 个样本点数据)计算股票 i 的 Beta 值 ,然后按着 的大小ii把所有的股票分成 15 组, 这是为了在后面估计方程参数时采用这 15 个组合组内平均值构造时间序列进行估计,减少由单只股票分别估计带来的误差。表 12.1 各时期设定估值期:用接下来的 5 个月数据(即 17-26 个样本点数据)重新计算每支股票的 ,然后计算i每个组合的 。计算中对组内 取简单平均,当然应按公司市值作为权重计算 ,但pi p这对结果不会有很大影响。同时用这 5 个月数据,通过 计算 的标准差 ,作为影, ,itpmtitRa,it
6、 ,()itS响股票 i 的收益率的与 无关的因素。以上算出的 和 作为检验模型的初始值(下面还要提到,估值期得到的p()tS和 还需作动态的调整) 。p()tS检验期:用接下来的 5 个月数据对模型进行横截面检验(即第 27-36 个样本点数据):, p=1,2,.,15。201,13,1()pttpttptpiptRrrS横截面检验就是固定时点 t,以 15 个股票组合的收益率、 、 和 作为观察p2()ptS值,进行回归,以估计出 、 、 和 的值,并计算出每个模型的 检验值。0tr1t2t3tr具体检验过程设计如下:估值期(即 t=17 至 26)计算出来的 和 只能作为检验模型的初始
7、值,即检验检p()tS验期内第一个时间点(即 t=27)的参数。接下来时点的 和 需要重新计算。例如,p()tS检验检验期内第二个时点(即 t=28)的参数时,除了要用估值期的数据以外,还要加入检验期第一个时点(t=27 )的数据(即使用 17-27 作为“估计期”,重新估计 和 值,p()tS再利用时间点 t=28 的数据检验方程参数。注意,检验期参数估计的过程总是依靠 15 组不同 和相应时间点 t 的数据,上述的调整是在组内进行的。依次类推,检验检验期第 10p个时点(即 t=36)的模型时,一共要用到 10+9=19 组数据(17-35 )来估算 和 的p()tS值。这样,算出检验期内
8、每个时点的参数估计值和其 检验值。每隔 5 个月,按照以上步骤重新计算,依次滚动下去,共需滚动 13 次,具体时间详见时间表 12.1 所示。这样,我们就得到了从时点 27 到时点 156 所有时点的参数估计值 、 、 和 及 检验值。0tr1t2t3trt 检验:设总体 为 的一个样本,则),.(),212nN。/tSn各参数的检验值可以由下面的式子计算:,0,1,2,3;rstjj/)(其中为时点的个数, 为各参数估计值的均值, 为各参数估计值的标准差。jr )(jrs我们分别计算出 1996 年、1997 年、1998 年、1999 年、2000 年以及 19952000 整个时间段的各
9、参数的均值 ,各参数的标准差 ,各参数的自回归系数 ,各参数的j)(jrs )(jr检验值 和 检验值。)(jrt12.3 计算程序12.3.1 计算市场组合指数市场组合指数的计算采用流通市值加权,实现过程参照本书第 7 章指数风险溢价计算 ,此处不再赘述。最后生成数据集 compufin.final,其中 index 为市场指数。12.3.2 计算双周收益率/*计算市场组合双周收益率*/options nodate nonotes nosource;data index;set compufin.final;dweek=ceil(date-01Jan95d-6)/14); /*标记双周序号,
10、1995 年1月1日及以后的第一周为0,以后每两周加1*/data index(keep=dweek dwr_index);set index;if last.dweek=1 ; /*保留双周末数据 */by dweek;dwr_index=dif(index)/lag(index); /*计算双周收益率*/if dwr_index=. then delete; /*去掉空值 */run;/*通过DOS 命令为计算个股双周收益率创建宏文本:char12.txt*/*第一步,在 DOS 的“d:基于 sas 系统的金融计算光盘stoindif”目录下键入“dir a6*.*/b list.txt
11、”,生成文件 list.txt*/*第二步,生成宏文本*/data a;infile d:基于SAS 系统的金融计算光盘stoindiflist.txt;informat fname $16.;input fname $;data a;set a;hexcd=substr(fname,2,6);format hexcd $6.;data a;set a;a=%a(;b=); ;file “d:基于SAS系统的金融计算光盘stoindifchar12_1.txt“ ;put a $ hexcd $ b $ ;run;/*根据复权个股数据库(stoindif)复权价计算个股双周收益率*/data
12、stock;delete;%macro a(a1);data a;set stoindif.adweek=ceil(date-01Jan95d-6)/14); /*标记双周序号*/hexcd=“data a(keep=dweek dwr hexcd);set a(where=(datelist.txt”,生成文件 list.txt*/*第二步,生成宏文本*/data a;infile d:基于sas系统的金融计算光盘stoindiflist.txt;informat fname $16.;input fname $;data a;set a;hexcd=substr(fname,2,6);fo
13、rmat hexcd $6.;data a;set a;a=%a(;b=); ;file “d:基于sas系统的金融计算光盘stoindifchar12_1.txt“ ;put a $ hexcd $ b $ ;run;/*根据复权个股数据库(stoindif)复权价计算个股双周收益率*/data stock;delete;%macro a(a1);data a;set stoindif.adweek=ceil(date-01Jan95d-6)/14); /*标记双周序号*/hexcd=“data a(keep=dweek dwr hexcd);set a(where=(date (mod(n
14、obs,15)*(floor(nobs/15)+1) then group=ceil(_n_-(mod(nobs,15)*(floor(nobs/15)+1)/(floor(nobs/15)+(mod(nobs,15);proc sort data=a;by hexcd;run;%do i=%eval(/*在同一分组期内逐个计算 “估值期”betaBeta值*/data b; set table;where %eval(/*控制每次读相应数据行*/proc reg outest=b noprint; /*betaBeta和S值输出到b*/model dwr=dwr_index;by hexcd
15、;run;data b;merge b(keep=hexcd dwr_index _rmse_ rename=(dwr_index=b _rmse_=s) a;/*将b与a合并,加上组号,并只保留Betabeta 和残差标准差S*/by hexcd;if group=. then delete; /*如果股票在“分组期”没有上市,则此处不参与计算*/proc sort;by group;run;proc means data=b noprint; /*每组Betabeta与S取简单平均*/by group;var b s;output out=b mean=b s; /*输出到 b*/run;
16、data b(keep=group s b bb); /*只保留回归用变量 S、平方 */set b;bb=b*b; /*加入beta 的平方这个变量*/run;data c;set table;where dweek=%eval(/*“检验期”对应的一个数据点*/data c;merge c a;/*加上组号*/by hexcd;if group=. then delete;/*如果股票在“分组期”没有上市,则此处不参与计算*/proc sort;by group;run;proc means data=c noprint; /*组收益率简单平均*/by group;var dwr dwr_
17、index; output out=c mean=dwr dwr_index;/*输出到c文件*/run;data b(keep=group dwr dwr_index b bb s dweek);merge c b; /*合并 b、c ,这样“ 估值期”得到的Betabeta、Beta beta平方、S和“检验期”的对应数据都到了一个表格中*/by group;dweek=%eval( /*加上序号*/run;data reg; set reg b; /*合并成大表*/run;%end;%mend b;%b(1);%b(11);%b(21);%b(31);%b(41);%b(51);%b(6
18、1);%b(71);%b(81);%b(91);%b(101);%b(111);%b(121);data reg;set reg;where dwr=.;run;proc reg data=reg outest=out tableout noprint;/*将生成的reg表进行分组回归,得到相应参数*/model dwr=b bb s/dw;by dweek;run;/*检验结果*/data out1;set out;where _type_=PARMS; proc means data=out1 noprint; /*t检验,输出到out1*/var bb s b;output out=ou
19、t1 t=t_bb t_s t_b probt=probt_bb probt_s probt_b mean=mean_bb mean_s mean_b;run;/*结果已输出到 work.out 中,这里加上日期并把 t 检验和参数估计放在同一行,以更好的呈现*/data out2;set out;keep dweek intercept b bb s _TYPE_;where _type_ in (PARMS,T);proc sort;by dweek descending _type_;data out2(drop=_type_);set out2;intercept_t=lag(inte
20、rcept);b_t=lag(b);bb_t=lag(bb);s_t=lag(s);if _type_=T then delete;data a(keep=date dweek);set compufin.final;dweek=ceil(date-01Jan95d-6)/14);if dweek=lag(dweek) then delete;data out2;merge out2 a;by dweek;if intercept=. then delete;run;/*计算一阶自相关系数*/data a(drop=_type_ _freq_ probt_bb probt_s probt_b)
21、;set out1;do dweek=27 to 156;output;end;data out3;merge out2(drop=intercept_t b_t bb_t s_t date) deposit a;by dweek;if bb=. then delete;var1=bb;var2=s;var3=b-mean_b;var4=intercept-dw_rf;data out3;set out3;lag_var1=lag(var1);lag_var2=lag(var2);lag_var3=lag(var3);lag_var4=lag(var4);proc corr data=out3
22、 out=out3 (type=corr) oprint; /*协方差矩阵输出到 out3*/var var1-var4 lag_var1-lag_var4;run;12.4 检验结果与分析12.4.1 检验结果检验的结果由表 12.2、表 12.3 和数据集 work.out4 给出。表 12.2 中变量解释:date 为日期;dweek 为双周数;dw_rf 为双周无风险收益;intercept,b, bb, s 为相应的参数估计值;intercept_t,b_t, bb_t, s_t 为相应的 t 值。注意:相应的概率值(P-value)也可以直接输出,由于输出宽度不够这里省略。表 12
23、.2 回归结果及 t 检验表 12.3 为表 12.2 中参数为 0 的假设检验。表 12.3 , , 和 的 t 检验tr01t2r3表 12.4 为相应变量的一阶自相关系数。表 12.4 , , - - Rf和 - Rf 的自相关系数tr23t1mtREtr012.4.2 结果分析分析表 12.2、12.3 和 12.4 有以下结论:1996,1997 和 1998 年, 的波动较大,1999 年后逐渐变小,但没有呈现显著的大于 00tr或小于 0 趋势。另外, 的 t 检验绝对值也很小,说明它对股票收益率的解释作用是比较弱的。从表 12.2 中 与 的比较上来看,两者没有显现出明显的相关
24、性。0trfR的 t 检验值比较大,说明股票的收益率和其 值存在一定的线性关系,负的 t 值表明1r 收益率和 值之间的存在着负相关的关系。的 t 检验值比较小,证明了 对收益率的影响的确很小,从而说明了股票的收益率2r2和其 值确实存在一定的线性关系。的 t 检验值比较大,说明了除了 值以外,还存在着其他的因素在影响着股票的收益3r率。从表 12.4 可以看到, - Rf, , 和 的自相关系数都比较小,这0tr3t)(1fmtt REr2tr是个有趣的现象,难道这反映出我国股票市场是有效的吗?需要作进一步的研究。总体上来讲,股票的收益率和其 值之间是有一定负线性相关性的,但并不显著,其他因
25、素与收益率的相关性更为密切。12.4.3 其他解释变量分析上面的检验结果发现, 对收益率的解释作用并没有 的解释作用显著。所以,tr3应该引入其他解释变量,对模型重新检验,进一步深入研究究竟是什么因素是决定我国股票收益率的主要因素。预期可以引入的变量有:反映公司规模大小的参数:公司在时刻的市场价值 =公司 在 时刻已流通的itMEtA 股股数 公司在时刻的股票价格 ;itEitP反映公司经营情况的参数:公司 在 时刻的净资产收益率 ; it itRO反映公司在股票市场上活跃程度的参数:公司 在 时刻的交易量 。ititV检验时,可以对公司市场价值 和交易量 取自然对数。加入这些变量后对模型it
26、MEitV的回归如前面的方法,只是在检验期对每个时间点进行回归时,除解释变量 和2p外,还要同时加入这些解释变量。本章不作进一步的计算。)(pts本章参考文献1. 朱世武著, SAS编程技术与金融数据处理 ,清华大学出版社,2003.7.2. Black, F., M. Jensen, and M. Scholes, “The Capital Asset Pricing Model: Some Empirical Tests,” in Studies in the Theory of Capital Markets, Praeger, New York (M. Jensen, editor). 1972.习题估值期按公司市值作为权重计算 ,重新作验证。p利用至 2002 年底的数据,重新作检验,要考虑本章习题 1 和加入其它解释变量。