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