Import.
line source
+ − % CDFPLOT makes cumulative distribution plot
+ − %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ − %
+ − % h = cdfplot(y1,[],ops) Plot an empirical cumulative distribution function
+ − % against a theoretical cdf.
+ − %
+ − % h = cdfplot(y1,y2,ops) Plot two empirical cumulative distribution
+ − % functions. Cdf for y1 is compared against cdf for y2 with confidence
+ − % bounds.
+ − %
+ − % ops is a cell aray of options
+ − % - 'ProbDist' -> theoretical distribution. Available distributions are:
+ − % - 'Fdist' -> F cumulative distribution function. In this case the
+ − % parameter 'params' should be a vector with distribution degrees of
+ − % freedoms [dof1 dof2]
+ − % - 'Normdist' -> Normal cumulative distribution function. In this case
+ − % the parameter 'params' should be a vector with distribution mean and
+ − % standard deviation [mu sigma]
+ − % - 'Chi2dist' -> Chi square cumulative distribution function. In this
+ − % case the parameter 'params' should be a number indicating
+ − % distribution degrees of freedom
+ − % - 'GammaDist' -> Gamma distribution. 'params' should contain the
+ − % shape and scale parameters
+ − % - 'ShapeParam' -> In the case of comparison of a data series with a
+ − % theoretical distribution and the data series is composed of correlated
+ − % elements. K can be adjusted with a shape parameter in order to recover
+ − % test fairness. In such a case the test is performed for K* = Phi *K.
+ − % Phi is the corresponding Shape parameter. The shape parameter depends
+ − % on the correlations and on the significance value. It does not depend
+ − % on data length.
+ − % - 'params' -> Probability distribution parameters
+ − % - 'conflevel' -> requiered confidence for confidence bounds evaluation.
+ − % Default 0.95 (95%)
+ − % - 'FontSize' -> Font size for axis. Default 22
+ − % - 'LineWidth' -> line width. Default 2
+ − % - 'axis' -> set axis properties of the plot. refer to help axis for
+ − % further details
+ − %
+ − % Luigi Ferraioli 10-02-2011
+ − %
+ − % % $Id: cdfplot.m,v 1.8 2011/07/08 09:45:48 luigi Exp $
+ − %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ − function h = cdfplot(y1,y2,ops)
+ −
+ − %%% check and set imput options
+ − % Default input struct
+ − defaultparams = struct(...
+ − 'ProbDist','Fdist',...
+ − 'ShapeParam',1,...
+ − 'params',[1 1],...
+ − 'conflevel',0.95,...
+ − 'FontSize',22,...
+ − 'LineWidth',2,...
+ − 'axis',[]);
+ −
+ − names = {'ProbDist','ShapeParam','params','conflevel','FontSize','LineWidth','axis'};
+ −
+ − % collecting input and default params
+ − if nargin == 3
+ − if ~isempty(ops)
+ − for jj=1:length(names)
+ − if isfield(ops, names(jj))
+ − defaultparams.(names{1,jj}) = ops.(names{1,jj});
+ − end
+ − end
+ − end
+ − end
+ −
+ − pdist = defaultparams.ProbDist; % check theoretical distribution
+ − shp = defaultparams.ShapeParam;
+ − dof = defaultparams.params; % distribution parameters
+ − conf = defaultparams.conflevel; % confidence level for confidence bounds calculation
+ − if conf>1
+ − conf = conf/100;
+ − end
+ − fontsize = defaultparams.FontSize;
+ − lwidth = defaultparams.LineWidth;
+ − axvect = defaultparams.axis;
+ −
+ −
+ − %%% check data input
+ − if isempty(y2) % do theoretical comparison
+ − % get empirical distribution for input data
+ − [eCD,ex]=utils.math.ecdf(y1);
+ − % switch between input theoretical distributions
+ − switch lower(pdist)
+ − case 'fdist'
+ − CD = utils.math.Fcdf(ex,dof(1),dof(2));
+ − case 'normdist'
+ − CD = utils.math.Normcdf(ex,dof(1),dof(2));
+ − case 'chi2dist'
+ − CD = utils.math.Chi2cdf(ex,dof(1));
+ − case 'gammadist'
+ − CD = gammainc(ex./dof(2),dof(1));
+ − end
+ − % get confidence levels with Kolmogorow - Smirnov test
+ − alp = (1-conf)/2;
+ − cVal = utils.math.SKcriticalvalues(numel(ex)*shp,[],alp);
+ − % get confidence levels
+ − CDu = CD+cVal;
+ − CDl = CD-cVal;
+ −
+ − figure;
+ − h = stairs(ex,[eCD CD CDu CDl]);
+ − grid on
+ − xlabel('x','FontSize',fontsize);
+ − ylabel('F(x)','FontSize',fontsize);
+ − set(h(3:4), 'Color','b', 'LineStyle',':','LineWidth',lwidth);
+ − set(h(1), 'Color','r', 'LineStyle','-','LineWidth',lwidth);
+ − set(h(2), 'Color','k', 'LineStyle','--','LineWidth',lwidth);
+ − legend([h(1),h(2),h(3)],{'eCDF','CDF','Conf. Bounds'});
+ − if ~isempty(axvect)
+ − axis(axvect);
+ − else
+ − % get limit for quantiles corresponding to 0 and 0.99 prob
+ − xlw = interp1(eCD,ex,0.001,'linear');
+ − if isnan(xlw)
+ − xlw = min(ex);
+ − end
+ − xup = interp1(eCD,ex,0.999,'linear');
+ − axis([xlw xup 0 1]);
+ − end
+ −
+ − else % do empirical comparison
+ − % get empirical distribution for input data
+ − [eCD1,ex1]=utils.math.ecdf(y1);
+ − [eCD2,ex2]=utils.math.ecdf(y2);
+ −
+ − % get confidence levels with Kolmogorow - Smirnov test
+ − alp = (1-conf)/2;
+ − cVal = utils.math.SKcriticalvalues(numel(ex1),numel(ex2),alp);
+ − % get confidence levels
+ − CDu = eCD2+cVal;
+ − CDl = eCD2-cVal;
+ −
+ − figure;
+ − h1 = stairs(ex1,eCD1);
+ − grid on
+ − hold on
+ − h2 = stairs(ex2,[eCD2 CDu CDl]);
+ − xlabel('x','FontSize',fontsize);
+ − ylabel('F(x)','FontSize',fontsize);
+ − set(h2(2:3), 'Color','b', 'LineStyle',':','LineWidth',lwidth);
+ − set(h1(1), 'Color','r', 'LineStyle','-','LineWidth',lwidth);
+ − set(h2(1), 'Color','k', 'LineStyle','--','LineWidth',lwidth);
+ − legend([h1(1),h2(1),h2(2)],{'eCDF1','eCDF2','Conf. Bounds'});
+ − if ~isempty(axvect)
+ − axis(axvect);
+ − else
+ − % get limit for quantiles corresponding to 0 and 0.99 prob
+ − xlw = interp1(eCD2,ex2,0.001,'linear');
+ − if isnan(xlw)
+ − xlw = min(ex2);
+ − end
+ − xup = interp1(eCD2,ex2,0.999,'linear');
+ − axis([xlw xup 0 1]);
+ − end
+ − h = [h1; h2];
+ − end
+ −
+ − end