www.gusucode.com > mbcmodels 工具箱 matlab 源码程序 > mbcmodels/@xreglinear/InitStore2.m
function [m,OK]= InitStore2(m,x,y,bd) %INITSTORE2 initialises model using display order defined in TERMORDER % Copyright 2000-2008 The MathWorks, Inc. and Ford Global Technologies, Inc. if nargin>=3 && length(y)==size(x,1) m.Store.y= ytrans(m,y); if nargin > 3 if ~islogical(bd) BDL= false(size(x,1),1); BDL(bd)= true; else BDL= bd; end else BDL= ~isfinite(m.Store.y); end x(BDL,:)= []; else y= []; BDL= false(size(x,1),1); end m.Store= struct('y',y,... 'X',[],... 'D',x,... 'Q',[],... 'R',[],... 'H',[],... 'Wc',[],... 'DispOrder',0,... 'mse',[]); if ~isempty(x) FX= x2fx(m,x); t= ~m.TermsOut; % use TERMORDER to reorder coefficients for display ord= termorder(m); FX= FX(:,ord); m.Store.X= FX; m.Store.DispOrder= 1; t= t(ord); FX= FX(:,t); [Q,R,OK,df,Ri]= qrdecomp(m,x,[],FX); else FX=[]; m.Store.X= FX; m.Store.DispOrder= 1; Q=[]; R=[]; Ri=[]; df=0; OK=0; end m.Store.D= x; m.Store.Q= Q; m.Store.R= R; % leverage is 0 for bad data H= zeros(size(BDL,1),1); if OK && ~all(m.TermsOut) H(~BDL)= sum(Q.*Q,2); end m.Store.H= H; if nargin>=3 % calculate mse y= m.Store.y(isfinite(y)); %pad y if df>0 r= y - Q*(Q'*y); m.Store.mse = sum(r.^2)/df; else m.Store.mse = 0; end else m.Store.mse= []; end if OK if ~isempty(m.Store.mse) % store variance info m= var(m,Ri*sqrt(m.Store.mse),m.Store.mse,df); else m= var(m,Ri,m.Store.mse,df); end end