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

    function varargout = sse_transform(m,transform,X,Y,varargin)
%SSE_TRANSFORM calculate SSE for a range of Box-Cox transform values
%  [sse,ci,TransformOutputs] = sse_transform(model,transform,X,Y,TransformParameters)
%  Computes the sse and confidence interval on data X and Y given transformation
%  transform
%
%	For transform = 'boxcox' an optional TransformParameter Lambda_Range allows the sse
%	to be computed over a vector of possible lambda. If Lambda_Range is not included it
%	defaults to -3:0.5:3. Lambda_Range is returned in the TransformOutputs

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



switch(transform)
case('boxcox')
   if isempty(varargin) || isempty(varargin{1})
      LambdaRange = -3:0.5:3;
   else
      LambdaRange = varargin{1};
   end
   
   % Loop through lambda, evaluating SSE at each value and store in SSE_DATA
   sse_data = NaN(size(LambdaRange));
   for i=1:length(LambdaRange);
       lam = LambdaRange(i);
       set(m,'boxcox',{lam,double(Y)});  			% define the BOXCOX Transform
       [x,y] = checkdata(m,X,Y);          % transform the data
       [mf,OK] = calcWeights(m,x,y);    % using the current centers, lambda (reg parameter), and width
       if OK
           Store = get(mf,'Store');
           sse_data(i) = Store.mse;			% one of which is SSE
       end
   end
   
   % Calculate the confidence interval, ci,
   
   df=dferror(mf);
   
   min_sse = min(sse_data);
   ci = min_sse*(1 + tinv(0.975,df)^2/df);
   
   varargout{1} = sse_data;
   varargout{2} = ci;
   varargout{3} = LambdaRange;
end