知识库 > 数学方法 > 回归分析

多元线性回归    

  •     普通最小二乘法
        使残差平方和达到最小。
        这里,我们使用RSS对中的每一个元素求偏导,并都令为0,就可以得到正规方程组。
         
        如果满秩,秩为,我们可以得到参数的估计:
        随机干扰项的方差的无偏估计
        极大似然法
         
        上式是极大似然函数,求得的最终结果
        普通最小二乘法和极大似然法估计出来的是一样的,如果方程满足经典假设,该估计值具有线性性,无偏性,最小方差性。普通最小二乘法估计出来的的无偏估计量。
        

        定义:Regress_CMLS(y:array,x:array,u:array,constant:Bool):array;
        说明:回归方程的最小二乘法参数估计(可选择是否包含常数项),返回回归方程的系数,如果有常数项则排在第一项;
        输入参数:
        y : 被解释变量序列,为一维数组类型
        x : 解释变量矩阵,为二维数组类型,每一列为一个解释变量
        u : 残差序列,为一维数组类型,变参
        constant:是否包含常数项,为布尔类型,缺省为true
        

        多元线性回归模型的统计检验
        多元线性回归函数模型的参数估计出来以后,需要进一步的对样本回归函数进行检验,以判断估计的可靠性。
        1:模型拟合优度检验
        a:可决系数
        总离差的分解,其中
        总离差平方和,其中为被解释变量的均值;
        残差平方和,其中为被解释变量根据回归方程得到的估计值;
        回归平方和,其中分别是被解释变量估计值和均值。
          
        上式给出了样本可决系数的定义,该统计量是描述拟合优度的一个重要的指标。由定义,我们知道,所以一般的越接近于1,表明残差平方和越小,样本回归线和样本观测值的拟合程度越高。
        将残差平方和与总离差平方和之比的分子分母分别使用他们各自的自由度去除,变成均方差之比,以消除解释变量个数对可决系数的影响,修正的样本决定系数为:
         
        b:AIC,SC信息准则
        这两个指标被使用来比较所含解释变量个数不同的多元回归模型的拟合集成度。
         
        
        为对数似然值,为观测数目,为被估计的参数个数。AIC和修正的样本可决系数类似,在评价模型优劣时兼顾了简洁性和精确性。这两个指标都是越小越好。这两个准则要求仅当所增加的解释变量能够减少AIC,SC统计量,才能在原模型中增加该解释变量。
        2:回归方程的显著性检验
        原假设,备选假设不全为0。
        :
        如果发生,则在水平下拒绝原假设,即模型的线性关系显著成立,模型通过方程显著性检验。
        如果发生,则在水平下接受原假设,即模型的线性关系显著不成立,模型不通过方程显著性检验。
        与修正样本可决系数之间的关系:
        
        上式表明,这两个统计量同向变化,=0时,=0;越大,越大;=1时,无穷大。因此,F检验可用于度量总体回归线的显著性检验,也可以检验的显著性。
        3:变量的显著性检验
        检验模型的解释变量是否对被解释变量有显著影响的假设检验。原假设:,备选假设:
         
        对角线上的第j+1个元素,使用
        若则在水平下拒绝原假设 ,即对应的解释变量是显著的;
        若 ,则在 水平下拒绝原假设,即对应的解释变量是不显著的。
        4:随机序列的正态性JB检验
        检验一个随机序列是否服从正态分布。原假设:该随机序列为正态分布,备选假设:该随机序列不为正态分布,我们有统计量:
         
        其中分别为随机序列的偏度和峰度
        若则在水平下拒绝原假设,即随机序列不为正态分布;
        若则在水平下接受原假设,即随机序列为正态分布。
        5:多元线性回归模型的置信区间
        参数估计量的置信水平的置信区间为:
         
        参数估计量的置信水平的置信区间为:
         
        参数估计量的置信水平的置信区间为:
        
        

        定义:Regression(y:array,x:array,alpha:real,constant:Bool):array;;
        说明:对多元线性回归模型进行估计及假设检验,返回结果有回归系数、残差序列、残差正态性检验、R平方、调整R平方、F检验、T检验、信息准则和DW统计量等;
        输入参数:
        y : 被解释变量序列,为一维数组类型;
        x : 解释变量矩阵,为二维数组类型,每一列为一个解释变量;
        alpha:显著性水平,实数类型,取值在0-1之间,缺省为0.05;
        constant:是否包含常数项,为布尔类型,缺省为true;
        

        例:回归估计沪深300行业的权重(参加平台下的函数IndustryRegrssionIndex函数)
        利用回归方程以沪深300各行业指数涨幅做X,以沪深300指数涨幅做Y,求解各行业占沪深300的权重并和实际值进行检验:
        
        其中,是时刻的沪深300涨幅,时刻第个行业的沪深300行业指数涨幅,是沪深300一级行业数量,是所取样本数.时间取2012-01-01~2012-4-13;
        

        IndexId:='SH000300';
        Stock:='SH000908;SH000909;SH000910;SH000911;SH000912;SH000913;SH000914;SH000915;SH000916;SH000917';
        BegT:=20120101T;EndT:=20120413T;
        //********取数据*********************//
        ov := BackUpSystemParameters();
        setsysparam(pn_stock(),IndexId);
        setsysparam(pn_date(),EndT);
        stockarr := str2array(stock); //解释变量指数代码
        stockarrname := stockarr;
        stockarrname ::=stockname(mcell);  //被解释变量指数名称
        Y := array();
        X := array();
        days := MarketTradeDayQk(BegT,EndT);  //交易日
        Y := Nday3(length(days),stockzf3());
        For nI := 0 to length(stockarr)-1 do
        begin
        setsysparam(pn_stock(),stockarr[nI]);
        for nJ := 0 to length(days)-1 do
        Begin
        setsysparam(pn_date(),days[nJ]); //指数收益率
        X[nJ,nI] := stockzf3(); //股票收益率矩阵
        end;
        end;
        [code]
        我们使用解释变量X对被解释变量Y直接做回归,回归结果(ret)如图7-4所示。
        [code]
        //*******调用回归函数****************//
        ret := regression(y,x,0.05,0);
        W   := ret['Coefficient'];
        //yf:=(x:*`W)[:,0]; return `array("拟合值":yf,"被解释变量":y);
        Return ret;
        

        
        
        拟合优度达到1.0000,这说明拟合得非常好, DW检验为1.7482,比较好。各个变量的显著性T检验都比较大,P值都等于0.0000,拒绝原假设。残差图如下图所示。
        
        程序的后面,我们实现了回归结果与真实的情况(申万300行业指数取样结束时间的市值与申万300指数取样结束时间的总市值的比重)的对比:
        

        //*******行业流通市值占比*******************//
        bk := stockname(IndexId);
        setsysparam(pn_bk(),trim(bk));
        setsysparam(pn_date(),endT);
        IndexIdTotalValue := BKV(); //指数流通市值(排查大股东比例)
        n := length(stockarr);
        weight := array();
        for nI := 0 to n-1 do
        Begin
        bk := stockname(stockarr[nI]);
        setsysparam(pn_bk(),trim(bk)); //
        setsysparam(pn_date(),endT);
        weight[nI] := BKV()/IndexIdTotalValue;//计算市值占比
        end
        RestoreSystemParameters(ov);
        return  `array('行业名称':stockarrname,'回归系数':w*100,'流通市值占比':weight*100);
        

        以下是BKV函数:
        

        function BKV();
        begin
          ov:=BackUpSystemParameters();
          stks:=getbk(DefaultBkName());
          v:=0;
          for i:=0 to length(stks)-1 do
          begin
            setsysparam(pn_stock(),stks[i]);
            v+=StockMarketValue3()*(1-StockMSHPercentage1to3(20101231,1)/100);
          end;
          RestoreSystemParameters(ov);
          return v;
        end
        

    回归结果与市值比重的对比
    行业名称回归系数流通市值占比行业名称回归系数流通市值占比
    300能源 7.8812910.54778300医药 4.169643.28089
    300材料 13.4282213.71287300金融 36.4832839.62192
    300工业 15.7183513.71325300信息 1.723551.36549
    300可选 8.031776.75133300电信 1.915191.32497
    300消费 8.135127.36311300公用 2.532252.05887
    总和100.018104.053

        回归系数系数和各指数的市值占比走势大致一样,但是数组有落差,其中这种差别我们认为是自由流通盘所引起的差别。