www.gusucode.com > mbcmodels 工具箱 matlab 源码程序 > mbcmodels/@xregmodel/InitStore.m

    function [m, OK] = InitStore(m, X, y, bd, doRinvCalc)
%INITSTORE Peform the initialization store of variance values
%
%  [M, OK] = INITSTORE(M, X, Y, BD, DORINVCALC)
%
%  See also XREGLINEAR\INITSTORE, XREGMODEL\VAR.

%  Copyright 2000-2006 The MathWorks, Inc. and Ford Global Technologies, Inc.

% The variance parameters only get stored if doRinvCalc is not present or is
% true. Thus if it's given and false, just return ok=true and return. 
if nargin >= 5 && ~doRinvCalc,
    OK = true;
    return
end

if nargin >= 3,
    y= ytrans(m,y);
    if nargin >= 4,
        if ~islogical(bd)   
            BDL= false(size(X,1),1);
            BDL(bd)= true;
        else
            BDL= bd;
        end
    else
        BDL= ~isfinite(y);
    end	
    X(BDL,:)= [];
    y(BDL)= [];
end

if ~isempty( X ),
    FX = CalcJacob( m, X );
    [Q, R, OK, df, Ri] = i_qr_ols( m, FX );
else
    OK = false;
end

if nargin >= 3 && OK,
    % calculate MSE
    %% r = y - Q*(Q'*y);
    r = y - eval( m, X );
    if df > 0,
        mse = sum( r.^2 )/df;
    else
        mse = 0;
    end
else
    mse = 1;
end

% store variance info
if OK 
    m = var( m, Ri*sqrt( mse ), mse, df );
else
    m = var( m, [], 0, Inf );
end

%------------------------------------------------------------------------------|
function [Q,R,OK,df, Ri] = i_qr_ols(m,X)

[Q,R,OK]= xregqr(X);

df = size(Q,1)-size(R,1);

if nargout > 4 
    if OK 
        Ri = inv(R);
    else
        Ri = [];
    end   
end