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

    function [s,list,SummStatsType,Description]= summary(m,Criteria,X,y,s2full,s2mle)
%XREGARX/SUMMARY
%
% [s,list,SummStats] = SUMMARY(m, Criteria, X, Y);
% [s,list,SummStats] = SUMMARY(m, Criteria, X, Y, s2full);
% [MINorMAX,list,SummStats]= summary(m) returns a list of criteria and whether
% to use as summary 
%
% Criteria list = {'RMSE','DW'}


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

list= {'RMSE','DW'};
SummStatsType= [-1 2];
% don't use RMSE as summary stats (calculated in stats method
if nargout>3
    Description= {'Root Mean Square Error'          'sqrt(SSE/(N-p))'
        'Durbin-Watson Statistic'                   'sum((r_t-r_{t+1})^2)/sum((r_t^2) '};
end


if nargin<2 
    % true indicates minimise and false maximise
    s= true(size(list));
    return
end

if ischar(Criteria)
    switch lower(Criteria)
        case 'all'
            sel= 1:length(list);
        case 'data'
            sel= find(abs(SummStatsType)~=1);
        case 'summary'
            sel= find(abs(SummStatsType)~=0);
        case 'multi'
            sel= find(SummStatsType<=0);
        otherwise
            sel= find(ismember(list,Criteria));
    end
elseif iscell(Criteria)
    sel= find(ismember(list,Criteria));
elseif islogical(Criteria)
    sel= find(Criteria);
else
    sel= Criteria;
end


[ri,mse,df] = var(m);% degrees of freedom

sse= mse*df;
% assume df= nObs-p
nObs= df+numParams(m);

s2mle= sse/nObs;
if nargin<3
    s2 = mse;
end

logL= sse/s2mle + nObs*log(s2mle);


s= zeros(1,length(sel));
for i=1:length(sel)
    switch sel(i)
        case 1
            % RMSE
            s(i) = sqrt(mse);
        case 2
            % Durban-Watson

            delmat = get( m, 'OrderAndDelay' );
            md = max( sum( delmat, 1 ) );

            yhat= eval(m,X,repmat(y(1),md-1,1));
            r= y - yhat;
            s(i)= sum( (r(1:end-1)- r(2:end)).^2 ) /sum(r.^2);
    end
end