首先,我们定义一个统计量,设原模型为中所含解释变量的集合为
,则在解释变量中加入
后,我们有
式7.21形式和F统计量类似,所以我们将其叫做伪
统计量。
这样我们就可以给出逐步回归的基本步骤了:
1:对每一个
,对解释变量
单独做回归计算
值,
,若
,则选择
进入模型,否则没有变量进入模型,这时我们认为所有解释变量对
的影响都不显著。
2:在第一步的基础上在剩下的
个解释变量逐个加入到模型中,并计算相应的
,
,若
没有变量进入模型,第一步得到的模型就是最优模型。否则选择
进入模型,考虑是否要将
剔除:
,若
则剔除
。
3:
,
,若
没有变量进入模型,上一步得到的模型就是最优模型。否则选择
进入模型,考虑是否要将
,
,…,
剔除。
重复3直到没有变量进入模型,而且所有进入的变量都不能被剔除为此。最后一个模型就是我们要选取得最优模型。
不足之处:该方法最终只提供一个“最优”回归方程,而无其他选择的余地
定义:Regress_Stepwise(y:array,X:array,A_E,A_D:Real):array;
说明:默认的回归方程包含常数项,程序返回的结果,x行为筛选的变量的下标(从0开始标示解释变量),regress行为筛选变量与因变量进行回归的结果(第一项为常数项)
参数:
y : 被解释变量序列,为一维数组类型;
x : 解释变量矩阵,为二维数组类型,每一列为一个解释变量;
A_E:选取变量的显著性水平,默认为0.05,为实数类型;
A_D:剔除变量的显著性水平,默认为0.1,为实数类型;
股票涨幅与各财务指标的逐步回归
endt:=inttodate(20100910);
stklist:=GetBKByDate('sh000300',endt);
y:=array();
x:=array();
For i:=0 to length(stklist)-1 do
Begin
setsysparam(pn_stock(),Stklist[i]);
setsysparam(pn_date(),endt);
setsysparam(pn_rate(),1);
RDate:=NewReportDateOfEndT2(EndT);
y[i]:=stockzf3();
x[i][0]:=Last12MData(RDate,9900000);//每股收益
x[i][1]:=Last12MData(RDate,9900003);//每股净资产
x[i][2]:=Last12MData(RDate,9900100);//净资产收益率
x[i][3]:=Last12MData(RDate,9900108);//净利润率
x[i][4]:=Last12MData(RDate,9900203);//资产负债率
x[i][5]:=Last12MData(RDate,9900004);//净资产增长
x[i][6]:=ln(StockMarketValue(EndT)); //流通市值
end;
y:=Standarize_II(`y)[:,0];//标准化
x:=Standarize_II(x);
return Regress_Stepwise(y,x,0.05,0.1);//逐步回归
结果如下: