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

    function [s,list,SummStatsType,Description]= summary(m,Criteria,X,y,s2full,s2mle) %#ok<INUSD>
%SUMMARY Return summary statistics for model
%
%  [s,list,SummStats] = summary(m,Criteria,x,y);
%  [s,list,SummStats] = summary(m,Criteria,x,y,s2full);
%  [MINorMAX,list,SummStats] = summary(m, Criteria, X, Y) returns a list of
%  criteria and whether to use as summary.
%
%  Criteria list = {'RMSE','PRESS RMSE','R^2',''logML','AIC','AICc','BIC'}

%  Copyright 2015 The MathWorks, Inc.

list= {'RMSE','PRESS RMSE','R^2','logML'};
SummStatsType= [-1 -1 1 1];
% don't use RMSE as summary stats (calculated in stats method
if nargout>3
    Description= {'Root Mean Square Error'          'sqrt(SSE/N)'
        'PRESS RMSE'                                'sqrt(sum( (K/Ky*y./diag(inv(Ky)))^2 )/N)'
        'R^2'                                       '1 - SSE/SST'
        'Marginal log likelihood'                   'y''/Ky*y/2 + log(det(Ky)) + N/2*log(2pi)'
};
end

if nargin<2
    % true indicates minimise and false maximise
    s = false(size(list));
    s(1:2) = true;
    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

s= NaN(1,length(sel));
if ~isfitted(m)
   return 
end

mse = m.StatsGPR.Sigma.^2;
res = y - resubPredict(m.StatsGPR);
sse= sum( res.^2 );

% assume df= nObs-p
nObs= size(y,1);


for i=1:length(sel)
    switch sel(i)
        case 1
            % RMSE
            s(i) = sqrt(mse);
        case 2
            % PRESS RMSE
            if strcmpi(m.StatsGPR.PredictMethod,'Exact')
                sumStats = stats(m,'summary',X,y);
                s(i) = sumStats(4);
            end
        case 3
            sst = sum((y-mean(y)).^2);
            % R^2
            if sst>0
                s(i)= 1-sse/sst;
            else
                s(i)= 1;
            end
        case 4
            % Marginal Log Likelihood
            s(i) = m.LogML; 
    end
end