ECG-Kit 1.0
(52,473 bytes)
function makeplot(out,varargin)
%MAKEPLOT makes plots for the main functions. These figures can also be obtained
% by setting 'plots = 1' in those functions.
%
% Required input:
% out = a structure containing the output of one of the following classes:
% MCDCOV, LS, LTS, MLR, MCDREG, CPCA,CPCR, CSIMPLS, RAPCA, ROBPCA,
% RPCR, RSIMPLS, CDA, RDA
%
% Optional input:
% nameplot : 0 : menu of plots (default = 0)
% 'all' : all possible plots
% 'scree' : scree plot
% 'pcadiag' : Score outlier map
% 'regdiag' : Regression outlier map
% '3ddiag' : 3D Regression outlier map
% 'robdist' : A plot of the robust distances
% 'qqmcd' : A qq-plot of the robust distances versus the quantiles of the chi-squared distribution
% 'dd' : A DD-plot: Robust distances versus Mahalanobis distances
% 'ellipse' : A tolerance ellipse
% 'resfit' : Standardized LTS Residuals versus fitted values
% 'resindex' : Standardized LTS Residuals versus index
% 'qqlts' : Normal QQ-plot of the LTS residuals
% 'scatter' : Scatterplot with LTS line
% 'da' : Tolerance ellipses of a discrimant analysis
% 'simca' : Scatterplot with boundaries defined by the number of PC's from a simca method
% labod : number of points to be identified in score plots
% with largest orthogonal distance.
% labsd : number of points to be identified in score and regression plots
% with largest score distance.
% labresd : number of points to be identified in regression plots
% with largest residual distance.
% labmcd : number of points to be identified in MCD plots
% with the largest robust distance.
% lablts : number of points to be identified in LTS plots
% with the largest absolute standardized residual.
% classic : In case of a robust analysis, classic can be set to 0 to avoid classical plots (default).
% If set to one, the inputargument 'out' must contain a field called 'classic' which is a structure.
%
% I/O: makeplot(out,'nameplot',0,'labsd',3,'labod',3,'labresd',3,'classic',0)
% The user should only give the input arguments that have to change their default value.
% The name of the input arguments needs to be followed by their value. The order of
% the input arguments is of no importance.
%
% Example: outrpcr=rpcr(x,y,'plots',0,'classic',1);
% makeplot(outrpcr,'labsd',5, 'classic',1)
% makeplot(outrpcr,'nameplot','scree')
%
% outmcd=mcdcov(x);
% makeplot(outmcd,'labmcd',6)
% makeplot(outmcd,'labmcd',4,'nameplot','dd')
%
% outls=libra_ols(x,y);
% makeplot(outls)
%
% This function is part of the Matlab Library for Robust Analysis (LIBRA),
% available at:
% www.wis.kuleuven.ac.be/stat/robust.html
%
% Written by Sabine Verboven 09/04/2003
% Last Updated : 29/01/2008
%
% Uses functions: screeplot, scorediagplot, regresdiagplot,
% regresdiagplot3d, plotnumbers, plotnumbers3d,
% distplot, chiqqplot, ddplot, ellipsplot, residualplot,
% normqqplot, lsscatter, menureg, menuscoreg,
% menupls, menucov, menuls,menuda, menusimca
%
%INTITIALISATION%
if isstruct(out)
innames=fieldnames(out);
if strmatch('class',innames,'exact')
attrib=out.class;
else
error('The method had no class identifier.')
end
if strmatch('classic',innames,'exact')
classic=out.classic;
elseif ismember(attrib,{'CPCA','CPCR','CSIMPLS','MLR','CDA','LS','CSIMCA'})
classic= 1;
else
classic=0;
end
else
error('The first inputargument is not a structure.')
end
counter=1;
default=struct('nameplot',0,'labsd',3,'labod',3,'labresd',3,'labmcd',3,'lablts',3,'classic',1);
list=fieldnames(default);
options=default;
IN=length(list);
i=1;
%
if nargin>1
%
%placing inputfields in array of strings
%
for j=1:nargin-1
if rem(j,2)~=0
chklist{i}=varargin{j};
i=i+1;
end
end
%
%Checking which default parameters have to be changed
% and keep them in the structure 'options'.
%
while counter<=IN
index=strmatch(list(counter,:),chklist,'exact');
if ~isempty(index) %in case of similarity
for j=1:nargin-2 %searching the index of the accompanying field
if rem(j,2)~=0 %fieldnames are placed on odd index
if strcmp(chklist{index},varargin{j})
I=j;
end
end
end
options=setfield(options,chklist{index},varargin{I+1});
index=[];
end
counter=counter+1;
end
choice=options.nameplot;
if choice~=0
ask=0;
else
ask=1; %menu of plots
end
labsd=options.labsd;
labod=options.labod;
labresd=options.labresd;
labmcd=options.labmcd;
lablts=options.lablts;
classicplots=options.classic;
if ~isstruct(classic) & options.classic==1
mess=sprintf(['The classical output is not available. Only robust plots will be shown.\n',...
'Please rerun the preceeding analysis with the option ''classic'' set to 1',...
'\n if the classical plots are required.']);
disp(mess)
classicplots=0;
end
else
ask=1; %menu of plots
choice=0;
labsd=3;
labod=3;
labresd=3;
labmcd=3;
lablts=3;
if ~isstruct(classic) & options.classic==1
% mess=sprintf(['The classical output is not available. Only robust plots will be shown.\n',...
% 'Please rerun the preceeding analysis with the option ''classic'' set to 1',...
% '\n if the classical plots are required.']);
%disp(mess)
classicplots=0;
else
classicplots=1;
end
end
%to initialize the correct menu of plots
exitno=0;
switch attrib
case 'CPCA'
exitno=4;
if ismember({char(choice)},{'regdiag','3ddiag','robdist','qqmcd','dd','ellipse','resfit','resindex','qqlts','diag','scatter',...
'da','simca'})
error('That kind of plot is not available for this method.')
end
case 'CPCR'
exitno=6;
if ismember({char(choice)},{'robdist','qqmcd','dd','ellipse','resfit','resindex','qqlts','diag','scatter','da','simca'})
error('That kind of plot is not available for this method.')
end
case 'LS'
exitno=7;
if ismember({char(choice)},{'scree','pcadiag','3ddiag','robdist','qqmcd','dd','ellipse','simca','da'})
error('That kind of plot is not available for this method.')
end
case 'MCDREG'
exitno=3;
if ismember({char(choice)},{'scree','pcadiag','3ddiag','robdist','qqmcd','dd','ellipse',...
'resfit','resindex','qqlts','diag','scatter','da','simca'})
error('That kind of plot is not available for this method.')
end
case 'MLR'
exitno=3;
if ismember({char(choice)},{'scree','pcadiag','3ddiag','robdist','qqmcd','dd','ellipse',...
'resfit','resindex','qqlts','diag','scatter','da','simca'})
error('That kind of plot is not available for this method.')
end
case 'LTS'
exitno=7;
if ismember({char(choice)},{'scree','pcadiag','3ddiag',...
'robdist','qqmcd','dd','ellipse','da','simca'})
error('That kind of plot is not available for this method.')
end
if ~isfield(out,'rd')
error('Please rerun the LTS-regression again with the option plots equal to 1.')
end
case {'RAPCA','ROBPCA'}
exitno=4;
if ismember({char(choice)},{'regdiag','3ddiag','robdist','qqmcd','dd','ellipse','resfit',...
'resindex','qqlts','diag','scatter','da','simca'})
error('That kind of plot is not available for this method.')
end
case 'RPCR'
exitno=6;
if ismember({char(choice)},{'robdist','qqmcd','dd','ellipse','resfit','resindex','qqlts','diag','scatter',...
'da','simca'})
error('That kind of plot is not available for this method.')
end
case {'RSIMPLS','CSIMPLS'}
exitno=5;
if ismember({char(choice)},{'scree','robdist','qqmcd','dd','ellipse','resfit','resindex','qqlts','diag','scatter',...
'da','simca'})
error('That kind of plot is not available for this method.')
end
case 'MCDCOV'
if ismember({char(choice)},{'scree','pcadiag','regdiag','3ddiag','resfit','resindex','qqlts','diag','scatter',...
'da','simca'})
error('That kind of plot is not available for this method.')
end
exitno=6;
case {'RDA','CDA'}
exitno=3;
if ismember({char(choice)},{'scree','pcadiag','3ddiag','robdist','qqmcd','dd','ellipse',...
'resfit','resindex','qqlts','diag','scatter','regdiag','simca'})
error('That kind of plot is not available for this method.')
end
if size(out.center,2)>2
disp('Warning: Tolerance ellipses are only drawn for two-dimensional data sets.')
return
end
case {'CSIMCA','RSIMCA'}
exitno=3;
if ismember({char(choice)},{'scree','pcadiag','3ddiag','robdist','qqmcd','dd','ellipse',...
'resfit','resindex','qqlts','diag','scatter','regdiag','da'})
error('That kind of plot is not available for this method.')
end
if size(out.pca{1}.P,1) > 3
disp('Warning: The dimension of the dataset is larger than 3.')
return
end
end
if exitno==0
error(['Your attribute identifier must be one of the following names:',...
'CPCA, RAPCA, ROBPCA, CPCR, RPCR, LS, LTS, MCDREG, RSIMPLS, CSIMPLS, MCDCOV, CDA,RDA,CSIMCA,RSIMCA'])
end
%plotting what is asked for
if ask==0
whichplot(out,choice,attrib,exitno,labsd,labod,labresd,labmcd,lablts,classic,classicplots)
else
%make menu of plots
while (choice~=exitno)
switch attrib
case {'CPCA','ROBPCA','RAPCA'}
choice=menuscore(out,attrib,exitno,labsd,labod,classic,classicplots);
case {'MCDREG','MLR'}
choice=menureg(out,attrib,exitno,labsd,labresd,classic,classicplots);
case {'COV','MCDCOV'}
choice=menucov(out,attrib,exitno,labmcd,classic,classicplots);
case {'RSIMPLS','CSIMPLS'}
choice=menupls(out,attrib,exitno,labsd,labod,labresd,classic,classicplots);
case {'CPCR','RPCR'}
choice=menuscoreg(out,attrib,exitno,labsd,labod,labresd,classic,classicplots);
case {'LTS','LS'}
choice=menuls(out,attrib,exitno,labsd,labresd,lablts,classic,classicplots);
case{'CDA','RDA'}
choice=menuda(out,attrib,exitno,classic,classicplots);
case{'CSIMCA','RSIMCA'}
choice=menusimca(out,attrib,exitno,classic,classicplots);
end
end
end
%%%%%%%%%%%%% MAIN FUNCTION %%%%%%%%%%%%%%%
function whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,labmcd,lablts,classic,classicplots)
%Initializing variables
switch attrib
case {'ROBPCA','RAPCA'}
Xdist=out.sd;
cutoffX=out.cutoff.sd;
cutoffO=out.cutoff.od;
OD=out.od;
k=out.k;
L=out.L;
%classical output
if isstruct(classic)
Lcl=classic.L;
Xdistcl=classic.sd;
ODcl=classic.od;
cutoffXcl=classic.cutoff.sd;
cutoffOcl=classic.cutoff.od;
attribcl='CPCA';
end
case 'MCDREG'
fitted=out.fitted;
Rdist=out.resd;
cutoffR=out.cutoff.resd;
if size(fitted,2)~=1
multi=1;
else
multi=0;
end
res=out.res;
Xdist=out.rd;
Rsquared=out.rsquared;
cutoffX=out.cutoff.rd;
Se=out.cov;
k=size(out.slope,1);
%classical output
if isstruct(classic)
attribcl=classic.class;
fittedcl=classic.fitted;
Rdistcl=classic.resd;
standrescl=classic.stdres;
cutoffRcl=classic.cutoff.resd;
rescl=classic.res;
Xdistcl=classic.md;
cutoffXcl=classic.cutoff.md;
Rsquaredcl=classic.rsquared;
Secl=classic.cov;
end
case 'MLR'
fittedcl=out.fitted;
Rdistcl=out.resd;
cutoffRcl=out.cutoff.resd;
if size(fittedcl,2)~=1
multi=1;
else
multi=0;
end
rescl=out.res;
Xdistcl=out.md;
cutoffXcl=out.cutoff.md;
Rsquaredcl=out.rsquared;
Secl=out.cov;
k=size(out.slope,1);
attribcl=out.class;
case 'RPCR'
fitted=out.fitted;
Rdist=out.resd;
cutoffR=out.cutoff.resd;
if size(fitted,2)~=1
multi=1;
else
multi=0;
end
res=out.res;
Xdist=out.sd;
Rsquared=out.rsquared;
cutoffX=out.cutoff.sd;
cutoffO=out.cutoff.od;
OD=out.od;
Se=out.cov;
k=out.k;
L=out.robpca.L;
%classical output
if isstruct(classic)
attribcl='CPCR';
Lcl=classic.cpca.L;
Xdistcl=classic.sd;
ODcl=classic.od;
cutoffOcl=classic.cutoff.od;
cutoffXcl=classic.cutoff.sd;
Rdistcl=classic.resd;
cutoffRcl=classic.cutoff.resd;
end
case 'LTS'
resid=out.res;
fitted=out.fitted;
scale=out.scale;
standres=resid/scale;
n=length(resid);
if isfield(out,'X')
x=out.X;
y=out.y;
else
x=0;
y=0;
end
Xdist=out.rd;
cutoffX=out.cutoff.rd;
cutoffY=out.cutoff.rd;
k=size(out.slope,1);
%classical output
if isstruct(classic)
attribcl='LS';
residcl=classic.res;
fittedcl=classic.fitted;
scalecl=classic.scale;
standrescl=residcl/scalecl;
Xdistcl=classic.md;
cutoffXcl=classic.cutoff.md;
ncl=length(residcl);
if isfield(classic,'X')
xcl=classic.X;
ycl=classic.y;
else
xcl=0;
ycl=0;
end
end
case 'LS'
attribcl=attrib;
residcl=out.res;
fittedcl=out.fitted;
scalecl=out.scale;
Xdistcl=out.md;
cutoffXcl=out.cutoff.md;
standrescl=out.resd;
ncl=length(residcl);
if isfield(out,'X')
xcl=out.X;
ycl=out.y;
else
xcl=0;
ycl=0;
end
k=size(out.slope,1);
case 'CPCA'
Lcl=out.L;
Xdistcl=out.sd;
ODcl=out.od;
cutoffOcl=out.cutoff.od;
cutoffXcl=out.cutoff.sd;
k=out.k;
attribcl=attrib;
case 'CPCR'
fitted=out.fitted;
Lcl=out.cpca.L;
k=out.k;
Xdistcl=out.sd;
ODcl=out.od;
cutoffOcl=out.cutoff.od;
cutoffXcl=out.cutoff.sd;
Rdistcl=out.resd;
cutoffRcl=out.cutoff.resd;
if size(fitted,2)~=1
multi=1; %multivariate analysis
else
multi=0; %univariate analysis
stdrescl=out.resd;
cutoffRcl=out.cutoff.resd;
end
attribcl=attrib;
case 'RSIMPLS'
fitted=out.fitted;
Rdist=out.resd;
cutoffR=out.cutoff.resd;
if size(fitted,2)~=1
multi=1;
else
multi=0;
end
res=out.res;
Xdist=out.sd;
cutoffX=out.cutoff.sd;
cutoffO=out.cutoff.od;
OD=out.od;
Se=out.cov;
k=out.k;
%classical output
if isstruct(classic)
attribcl='CSIMPLS';
Xdistcl=classic.sd;
ODcl=classic.od;
cutoffOcl=classic.cutoff.od;
cutoffXcl=classic.cutoff.sd;
Rdistcl=classic.resd;
cutoffRcl=classic.cutoff.resd;
end
case 'CSIMPLS'
fittedcl=out.fitted;
if size(fittedcl,2)~=1
multi=1;
else
multi=0;
end
Xdistcl=out.sd;
ODcl=out.od;
k=out.k;
cutoffXcl=out.cutoff.sd;
cutoffOcl=out.cutoff.od;
attribcl=attrib;
Rdistcl=out.resd;
cutoffRcl=out.cutoff.resd;
case 'MCDCOV'
if ~isempty(out.plane)
disp('Warning (makeplot): The MCD covariance matrix is singular. No plots can be drawn.')
return
end
covar=out.cov;
md=out.md;
rd=out.rd;
if isfield(out,'X')
data=out.X;
else
data=0;
end
center=out.center;
cutoffR=out.cutoff.rd;
cutoffM=out.cutoff.md;
if isstruct(classic)
if isfield(out,'X')
datacl=out.X;
else
datacl=0;
end
centercl=out.classic.center;
covcl=out.classic.cov;
mdcl=out.classic.md;
attribcl=out.classic.class;
end
case 'COV'
%only available inside the mcdcov function.
case 'CDA'
if isfield(out,'x')
xcl=out.x;
groupcl=out.group;
else
xcl=0;
groupcl=0;
end
methodcl=out.method;
centercl=out.center;
covcl=out.cov;
classcl=out.class;
case 'RDA'
if isfield(out,'x')
x=out.x; group=out.group;
else
x=0;group=0;
end
method=out.method;
center=out.center;
covar=out.cov;
class=out.class;
if isstruct(classic)
if isfield(out.classic,'x')
xcl=out.classic.x;
groupcl=out.classic.group;
else
xcl=0;
groupcl=0;
end
methodcl=out.classic.method;
centercl=out.classic.center;
covcl=out.classic.cov;
classcl=out.classic.class;
end
case 'RSIMCA'
if isstruct(classic)
resultcl=out.classic;
else
resultcl=0;
end
end
%determination of the number of plots (robust or/and classic)
if strcmp(attrib,'LS') | strcmp(attrib,'CPCR') | strcmp(attrib,'CPCA') | strcmp(attrib,'MLR') | strcmp(attrib,'CDA') | strcmp(attrib,'CSIMPLS')|strcmp(attrib,'CSIMCA')
oneplot=1; %only classical plots possible
elseif (strcmp(attrib,'RAPCA') |strcmp(attrib,'MCDREG') | strcmp(attrib,'RPCR')|strcmp(attrib,'ROBPCA')| strcmp(attrib,'RSIMPLS')| strcmp(attrib,'MCDCOV')|strcmp(attrib,'LTS')|strcmp(attrib,'RDA')|strcmp(attrib,'RSIMCA')) & classicplots==0
oneplot=2; %only robust plots possible
else
oneplot=0; %both robust and classical plot in the middle of the screen
bdwidth=5;
topbdwidth=30;
set(0,'Units','pixels');
scnsize=get(0,'ScreenSize');
pos1=[bdwidth, 1/3*scnsize(4)+bdwidth, scnsize(3)/2-2*bdwidth, scnsize(4)/2-(topbdwidth+bdwidth)];
pos2=[pos1(1)+scnsize(3)/2, pos1(2), pos1(3), pos1(4)];
end
switch plotn
case 'all' %all possible plots
close
switch attrib
case {'MCDREG','MLR'}
if oneplot==0
figure('Position',pos1)
regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)
figure('Position',pos2)
regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)
elseif oneplot==1
figure
regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd) %multi stond op 2
elseif oneplot==2
figure
regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)
end
case {'CPCA', 'ROBPCA'}
if oneplot==0
figure('Position',pos1)
screeplot(L,attrib)
figure('Position',pos2)
screeplot(Lcl,attribcl)
pos1(2)=pos1(2)-40;
pos2(2)=pos2(2)-40;
figure('Position',pos1)
scorediagplot(Xdist,OD,k,cutoffX,cutoffO,attrib,labsd,labod)
figure('Position',pos2)
scorediagplot(Xdistcl,ODcl,k,cutoffXcl,cutoffOcl,attribcl,labsd,labod)
elseif oneplot==1
figure
screeplot(Lcl,attrib)
figure
scorediagplot(Xdistcl,ODcl,k,cutoffXcl,cutoffOcl,attribcl,labsd,labod)
else
figure
screeplot(L,attrib)
figure
scorediagplot(Xdist,OD,k,cutoffX,cutoffO,attrib,labsd,labod)
end
case {'RSIMPLS','CSIMPLS'}
if oneplot==0
figure('Position',pos1)
scorediagplot(Xdist,OD,k,cutoffX,cutoffO,attrib,labsd,labod)
figure('Position',pos2)
scorediagplot(Xdistcl,ODcl,k,cutoffXcl,cutoffOcl,attribcl,labsd,labod)
pos1(2)=pos1(2)-40;
pos2(2)=pos2(2)-40;
figure('Position',pos1)
regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attribcl,labsd,labresd)
figure('Position',pos2)
regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)
%3D plot is still highly memory consuming 08/04/04
% if exist('OD')
% Nihil=(OD <= 1.e-06);
% OD(Nihil)=0;
% help=OD;
% elseif exist('ODcl')
% Nihil=(ODcl <= 1.e-06);
% ODcl(Nihil)=0;
% helpcl=ODcl;
% end
% pos1(2)=pos1(2)-80;
% pos2(2)=pos2(2)-80;
% if ~all(help) %in case k=rank(T)=r then OD = zero
% figure('Position',pos1)
% regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)
% figure('Position',pos2)
% regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)
% else
% figure('Position',pos1)
% regresdiagplot3d(Xdist,OD,Rdist,cutoffX,cutoffO,cutoffR,k,attrib,multi,labsd,labod,labresd,0)
% title(['Robust 3D outlier map based on ',num2str(k),' LV'])
% figure('Position',pos2)
% regresdiagplot3d(Xdistcl,ODcl,Rdistcl,cutoffXcl,cutoffOcl,cutoffRcl,k,attribcl,multi,labsd,labod,labresd,0)
% title(['Classical 3D outlier map based on ',num2str(k),' LV'])
% end
elseif oneplot==1
figure
scorediagplot(Xdistcl,ODcl,k,cutoffXcl,cutoffOcl,attribcl,labsd,labod)
figure
regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)
%3D plot is still highly memory consuming 08/04/04
% if exist('ODcl')
% Nihil=(ODcl <= 1.e-06);
% ODcl(Nihil)=0;
% helpcl=ODcl;
% end
% figure
% if ~all(helpcl) %in case k=rank(T)=r then OD = zero
% regresdiagplot(Rdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,'CPCR',labsd,labresd)
% else
% regresdiagplot3d(Xdistcl,ODcl,Rdistcl,cutoffXcl,cutoffOcl,cutoffRcl,k,attribcl,multi,labsd,labod,labresd,0)
% title(['Classical 3D outlier map based on ',num2str(k),' LV'])
% end
else
figure
scorediagplot(Xdist,OD,k,cutoffX,cutoffO,attrib,labsd,labod)
figure
regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)
%3D plot is still highly memory consuming 08/04/04
% if exist('OD')
% Nihil=(OD <= 1.e-06);
% OD(Nihil)=0;
% help=OD;
% end
% figure
% if ~all(help) %in case k=rank(T)=r then OD = zero % nog verfijnen is niet volledig nul is zeer klein (<10^-6)
% regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)
% else
% regresdiagplot3d(Xdist,OD,Rdist,cutoffX,cutoffO,cutoffR,k,attrib,multi,labsd,labod,labresd,0)
% title(['Robust 3D outlier map based on ',num2str(k),' LV'])
% end
end
case {'CPCR','RPCR'}
if oneplot==0
figure('Position',pos1)
screeplot(L,attrib)
figure('Position',pos2)
screeplot(Lcl,attrib)
pos1(2)=pos1(2)-40;
pos2(2)=pos2(2)-40;
figure('Position',pos1)
scorediagplot(Xdist,OD,k,cutoffX,cutoffO,attrib,labsd,labod)
figure('Position',pos2)
scorediagplot(Xdistcl,ODcl,k,cutoffXcl,cutoffOcl,attribcl,labsd,labod)
pos1(2)=pos1(2)-80;
pos2(2)=pos2(2)-80;
figure('Position',pos1)
regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attribcl,labsd,labresd)
figure('Position',pos2)
regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)
%3D plot is still highly memory consuming 08/04/04
% if exist('OD')
% Nihil=(OD <= 1.e-06);
% OD(Nihil)=0;
% help=OD;
% elseif exist('ODcl')
% Nihil=(ODcl <= 1.e-06);
% ODcl(Nihil)=0;
% helpcl=ODcl;
% end
% if ~all(help) %in case k=rank(T)=r then OD = zero
% figure('Position',pos1)
% regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)
% figure('Position',pos2)
% regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)
% else
% figure('Position',pos1)
% regresdiagplot3d(Xdist,OD,Rdist,cutoffX,cutoffO,cutoffR,k,attrib,multi,labsd,labod,labresd,0)
% title(['Robust 3D outlier map based on ',num2str(k),' LV'])
% figure('Position',pos2)
% regresdiagplot3d(Xdistcl,ODcl,Rdistcl,cutoffXcl,cutoffOcl,cutoffRcl,k,attribcl,multi,labsd,labod,labresd,0)
% title(['Classical 3D outlier map based on ',num2str(k),' LV'])
% end
elseif oneplot==1
figure
screeplot(Lcl,attrib)
figure
scorediagplot(Xdistcl,ODcl,k,cutoffXcl,cutoffOcl,attrib,labsd,labod)
figure
regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)
%3D plot is still highly memory consuming 08/04/04
% if exist('ODcl')
% Nihil=(ODcl <= 1.e-06);
% ODcl(Nihil)=0;
% helpcl=ODcl;
% end
% figure
% if ~all(helpcl) %in case k=rank(T)=r then OD = zero
% regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,'CPCR',labsd,labresd)
% else
% regresdiagplot3d(Xdistcl,ODcl,Rdistcl,cutoffXcl,cutoffOcl,cutoffRcl,k,attribcl,multi,labsd,labod,labresd,0)
% title(['Classical 3D outlier map based on ',num2str(k),' LV'])
% end
else
figure
screeplot(L,attrib)
figure
scorediagplot(Xdist,OD,k,cutoffX,cutoffO,attrib,labsd,labod)
figure
regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)
%3D plot is still highly memory consuming 08/04/04
% figure
% if exist('OD')
% Nihil=(OD <= 1.e-06);
% OD(Nihil)=0;
% help=OD;
% end
% if ~all(help) %in case k=rank(T)=r then OD = zero
% regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)
% else
% regresdiagplot3d(Xdist,OD,Rdist,cutoffX,cutoffO,cutoffR,k,attrib,multi,labsd,labod,labresd,0)
% title(['Robust 3D outlier map based on ',num2str(k),' LV'])
% end
end
case 'MCDCOV'
if oneplot==0
figure('Position',pos1)
distplot(rd,cutoffR,attrib,labmcd)
figure('Position',pos2)
distplot(md,cutoffM,attribcl,labmcd)
figure('Position',pos1)
chiqqplot(rd,size(data,2),attrib)
figure('Position',pos2)
chiqqplot(md,size(data,2),attribcl)
figure
ddplot(md,rd,cutoffM,attrib,labmcd)
figure
if size(data,2)~=2|data==0
axes
box on
text(0.05,0.5,'Tolerance ellipse is only available for bivariate data','color','r')
else
ellipsplot(center,covar,data,rd,labmcd)
set(findobj('color','r'),'color','m');
hold on
ellipsplot(centercl,covcl,data,md,labmcd)
set(findobj('color','r'),'color','b','linestyle',':');
hold off
legend_handles=[findobj('color','m'); findobj('color','b','linestyle',':')];
legend(legend_handles,'robust','classical','Location','best')
end
elseif oneplot==2
figure
distplot(rd,cutoffM,attrib,labmcd)
figure
chiqqplot(rd,size(data,2),attrib)
figure
ddplot(md,rd,cutoffM,attrib,labmcd)
figure
if size(data,2)~=2|data==0
axes
box on
text(0.05,0.5,'Tolerance ellipse is only available for bivariate data','color','r')
else
ellipsplot(center,covar,data,rd,labmcd,'MCDCOV')
end
end
case {'LTS','LS'}
if oneplot==0
figure('Position',pos1)
residualplot(fitted,standres,attrib,'Fitted values','Standardized LTS residual',lablts)
figure('Position',pos2)
residualplot(fittedcl,standrescl,attribcl,'Fitted value','Standardized LS residual',lablts)
pos1(2)=pos1(2)-40;
pos2(2)=pos2(2)-40;
figure('Position',pos1)
residualplot(1:n,standres,attrib,'Index','Standardized LTS residual',lablts)
figure('Position',pos2)
residualplot(1:ncl,standrescl,attribcl,'Index','Standardized LS residual',lablts)
pos1(2)=pos1(2)-80;
pos2(2)=pos2(2)-80;
figure('Position',pos1)
normqqplot(resid,attrib)
figure('Position',pos2)
normqqplot(residcl,attribcl)
pos1(2)=pos1(2)-100;
pos2(2)=pos2(2)-100;
figure('Position',pos1)
if strcmp(attrib,'LTS')
regresdiagplot(Xdist,standres,cutoffX,cutoffY,k,0,attrib,labsd,labresd);
else
regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,1,attrib,labsd,labresd);
end
figure('Position',pos2)
if strcmp(attribcl,'LS')
regresdiagplot(Xdistcl,standrescl,cutoffXcl,0,k,0,attribcl,labsd,labresd);
else
regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,1,attribcl,labsd,labresd);
end
pos1(2)=pos1(2)-120;
pos2(2)=pos2(2)-120;
figure('Position',pos1)
if size(x,2)~=1|x==0
axes
box on
text(0.05,0.5,'Scatter plot is only available for bivariate data','color','r')
else
lsscatter(x,y,fitted,attrib)
end
figure('Position',pos2)
if size(xcl,2)~=1|xcl==0
axes
box on
text(0.05,0.5,'Scatter plot is only available for bivariate data','color','r')
else
lsscatter(xcl,ycl,fittedcl,attribcl)
end
elseif oneplot ==1
figure
residualplot(fittedcl,standrescl,attribcl,'Fitted value','Standardized LS residual',lablts) ;
figure
residualplot(1:ncl,standrescl,attribcl,'Index','Standardized LS residual',lablts) ;
figure
normqqplot(residcl,attrib);
figure
if strcmp(attrib,'LS')
regresdiagplot(Xdistcl,standrescl,cutoffXcl,0,k,0,attrib,labsd,labresd);
else
regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,1,attrib,labsd,labresd);
end
figure
if size(xcl,2)~=1|xcl==0
axes
box on
text(0.05,0.5,'Scatter plot is only available for bivariate data','color','r')
else
lsscatter(xcl,ycl,fittedcl,attribcl)
end
elseif oneplot==2
figure
residualplot(fitted,standres,attrib, 'Fitted value','Standardized LTS residual',lablts)
figure
residualplot(1:n,standres,attrib,'Index','Standardized LTS residual',lablts)
figure
normqqplot(resid,attrib)
figure
if strcmp(attrib,'LTS')
regresdiagplot(Xdist,standres,cutoffX,0,k,0,attrib,labsd,labresd);
else
regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,1,attrib,labsd,labresd);
end
figure
if size(x,2)~=1|x==0
axes
box on
text(0.05,0.5,'Scatter plot is only available for bivariate data','color','r')
else
lsscatter(x,y,fitted,attrib)
end
end
case{'RDA','CDA'}
if oneplot==0
figure('Position',pos1)
daplot(x,group,center,covar,class,method)
figure('Position',pos2)
daplot(xcl,groupcl,centercl,covcl,classcl,methodcl)
elseif oneplot==1
figure
daplot(xcl,groupcl,centercl,covcl,classcl,methodcl)
elseif oneplot==2
figure
daplot(x,group,center,covar,class,method)
end
case{'RSIMCA','CSIMCA'}
if oneplot==0
figure('Position',pos1)
simcaplot(result)
figure('Position',pos2)
simcaplot(resultcl)
elseif oneplot==1
figure
simcaplot(resultcl)
elseif oneplot==2
figure
simcaplot(result)
end
end
choice=exitno;
case 'scree' %screeplot
close
if oneplot==0
figure('Position',pos1)
screeplot(L,attrib)
figure('Position',pos2)
screeplot(Lcl,attribcl)
elseif oneplot==1
screeplot(Lcl,attribcl)
else
screeplot(L,attrib)
end
case 'pcadiag' %diagnostic Scoreplot (Xdist-Odist)
%close
if oneplot==0
figure('Position',pos1)
scorediagplot(Xdist,OD,k,cutoffX,cutoffO,attrib,labsd,labod)
figure('Position',pos2)
scorediagplot(Xdistcl,ODcl,k,cutoffXcl,cutoffOcl,attribcl,labsd,labod)
elseif oneplot==1
figure
scorediagplot(Xdistcl,ODcl,k,cutoffXcl,cutoffOcl,attribcl,labsd,labod)
else
figure
scorediagplot(Xdist,OD,k,cutoffX,cutoffO,attrib,labsd,labod)
end
case '3ddiag' %3D-plot: highly memory consuming!!!!
close
if oneplot==0
if exist('OD')
Nihil=(OD <= 1.e-06);
OD(Nihil)=0;
help=OD;
elseif exist('ODcl')
Nihil=(ODcl <= 1.e-06);
ODcl(Nihil)=0;
helpcl=ODcl;
end
if ~all(help)%in case k=rank(T)=r then OD = zero
figure('Position',pos1)
regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)
figure('Position',pos2)
regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)
else
figure('Position',pos1)
regresdiagplot3d(Xdist,OD,Rdist,cutoffX,cutoffO,cutoffR,k,attrib,multi,labsd,labod,labresd,0)
title(['Robust 3D outlier map based on ',num2str(k),' LV'])
figure('Position',pos2)
regresdiagplot3d(Xdistcl,ODcl,Rdistcl,cutoffXcl,cutoffOcl,cutoffRcl,k,attribcl,multi,labsd,labod,labresd,0)
title(['Classical 3D outlier map based on ',num2str(k),' LV'])
end
elseif oneplot==1
if exist('ODcl')
Nihil=(ODcl <= 1.e-06);
ODcl(Nihil)=0;
helpcl=ODcl;
end
if ~all(helpcl) %in case k=rank(T)=r then OD = zero
regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd)
else
regresdiagplot3d(Xdistcl,ODcl,Rdistcl,cutoffXcl,cutoffOcl,cutoffRcl,k,attribcl,multi,labsd,labod,labresd,0)
title(['Classical 3D outlier map based on ',num2str(k),' LV'])
end
else
if exist('OD')
Nihil=(OD <= 1.e-06);
OD(Nihil)=0;
help=OD;
end
if ~all(help) %in case k=rank(T)=r then OD = zero
regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd)
else
regresdiagplot3d(Xdist,OD,Rdist,cutoffX,cutoffO,cutoffR,k,attrib,multi,labsd,labod,labresd,0)
title(['Robust 3D outlier map based on ',num2str(k),' LV'])
end
end
case {'Idist','robdist'}
close
if oneplot==0
figure('Position',pos1)
distplot(rd,cutoffM,'MCDCOV',labmcd)
figure('Position',pos2)
distplot(md,cutoffM,'COV',labmcd)
%elseif oneplot==1 not available since 'COV' is only called inside
%the MCDCOV function
elseif oneplot==2
distplot(rd,cutoffM,'MCDCOV',labmcd)
end
case 'qqmcd'
close
if oneplot==0
figure('Position',pos1)
chiqqplot(rd,size(data,2),'MCDCOV')
figure('Position',pos2)
chiqqplot(md,size(data,2),'COV')
elseif oneplot==2
chiqqplot(rd,size(data,2),'MCDCOV')
end
case 'dd'
close
ddplot(md,rd,cutoffM,attrib,labmcd)
case 'ellipse'
close
if oneplot==0
if size(data,2)~=2|data==0
axes
box on
text(0.05,0.5,'Tolerance ellipse plot is only available for bivariate data','color','r')
else
ellipsplot(center,covar,data,rd,labmcd)
set(findobj('color','r'),'color','m');
hold on
ellipsplot(centercl,covcl,data,md,labmcd)
set(findobj('color','r'),'color','b','linestyle',':');
hold off
legend_handles=[findobj('color','m'); findobj('color','b','linestyle',':')];
legend(legend_handles,'robust','classical','Location','best')
end
elseif oneplot==2
if size(data,2)~=2|data==0
axes
box on
text(0.05,0.5,'Tolerance ellipse plot is only available for bivariate data','color','r')
else
ellipsplot(center,covar,data,rd,labmcd)
end
end
case 'resfit'
close
if oneplot==0
figure('Position',pos1)
residualplot(fitted,standres,attrib,'Fitted value','Standardized LTS residual',lablts)
figure('Position',pos2)
residualplot(fittedcl,standrescl,attribcl,'Fitted value','Standardized LS residual',lablts)
elseif oneplot==1
residualplot(fittedcl,standrescl,attribcl,'Fitted value','Standardized LS residual',lablts)
elseif oneplot==2
residualplot(fitted,standres,attrib,'Fitted value','Standardized LTS residual',lablts)
end
case 'resindex'
close
if oneplot==0
figure('Position',pos1)
residualplot(1:n,standres,attrib,'Index','Standardized LTS residual',lablts)
figure('Position',pos2)
residualplot(1:ncl,standrescl,attribcl,'Index','Standardized LS residual',lablts)
elseif oneplot==1
residualplot(1:ncl,standrescl,attribcl,'Index','Standardized LS residual',lablts)
elseif oneplot==2
residualplot(1:n,standres,attrib,'Index','Standardized LTS residual',lablts)
end
case 'qqlts'
close
if oneplot==0
figure('Position',pos1)
normqqplot(resid,'LTS')
figure('Position',pos2)
normqqplot(residcl,'LS')
elseif oneplot==1
normqqplot(residcl,'LS')
elseif oneplot==2
normqqplot(resid,'LTS')
end
case 'regdiag'
%close
if oneplot==0
figure('Position',pos1)
if strcmp(attrib,'LTS')
regresdiagplot(Xdist,standres,cutoffX,0,k,0,attrib,labsd,labresd);
else
regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd);
end
figure('Position',pos2)
if strcmp(attribcl,'LS')
regresdiagplot(Xdistcl,standrescl,cutoffXcl,0,k,0,attribcl,labsd,labresd);
else
regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attribcl,labsd,labresd);
end
elseif oneplot==1
if strcmp(attrib,'LS')
regresdiagplot(Xdistcl,standrescl,cutoffXcl,0,k,0,attrib,labsd,labresd);
else
regresdiagplot(Xdistcl,Rdistcl,cutoffXcl,cutoffRcl,k,multi,attrib,labsd,labresd);
end
elseif oneplot==2
if strcmp(attrib,'LTS')
regresdiagplot(Xdist,standres,cutoffX,0,k,0,attrib,labsd,labresd);
else
regresdiagplot(Xdist,Rdist,cutoffX,cutoffR,k,multi,attrib,labsd,labresd);
end
end
case 'scatter'
close
if oneplot==0
figure('Position',pos1)
if size(x,2)~=1|x==0
axes
box on
text(0.05,0.5,'Scatter plot is only available for bivariate data','color','r')
else
lsscatter(x,y,fitted,attrib)
end
figure('Position',pos2)
if size(xcl,2)~=1|xcl==0
axes
box on
text(0.05,0.5,'Scatter plot is only available for bivariate data','color','r')
else
lsscatter(xcl,ycl,fittedcl,attribcl)
end
elseif oneplot==1
if size(xcl,2)~=1|xcl==0
axes
box on
text(0.05,0.5,'Scatter plot is only available for bivariate data','color','r')
else
lsscatter(xcl,ycl,fittedcl,attribcl)
end
elseif oneplot==2
if size(x,2)~=1|x==0
axes
box on
text(0.05,0.5,'Scatter plot is only available for bivariate data','color','r')
else
lsscatter(x,y,fitted,attrib)
end
end
case 'da'
close
if oneplot==0
figure('Position',pos1)
daplot(x,group,center,covar,class,method)
figure('Position',pos2)
daplot(xcl,groupcl,centercl,covcl,classcl,methodcl)
elseif oneplot==1
daplot(xcl,groupcl,centercl,covcl,classcl,methodcl)
elseif oneplot==2
daplot(x,group,center,covar,class,method)
end
case 'simca'
close
if oneplot==0
figure('Position',pos1)
simcaplot(out)
figure('Position',pos2)
simcaplot(resultcl)
elseif oneplot==1
simcaplot(out)
elseif oneplot==2
simcaplot(out)
end
end
%---------------------------------------------------------------------------------------------------------------------------
function choice= menucov(out,attrib,exitno,labmcd,classic,classicplots)
choice=menu('Covariance plots: ','All','Index plot of the distances','Quantile-Quantile plot of the distances','Distance-distance plot',...
'Tolerance ellipse (for bivariate data)','Exit');
switch choice
case 1
plotn='all';
whichplot(out,plotn,attrib,exitno,3,3,3,labmcd,3,classic,classicplots)
case 2
plotn='Idist';
whichplot(out,'Idist',attrib,exitno,3,3,3,labmcd,3,classic,classicplots)
case 3
plotn='qqmcd';
whichplot(out,plotn,attrib,exitno,3,3,3,labmcd,3,classic,classicplots)
case 4
plotn='dd';
whichplot(out,plotn,attrib,exitno,3,3,3,labmcd,3,classic,classicplots)
case 5
plotn='ellipse';
whichplot(out,plotn,attrib,exitno,3,3,3,labmcd,3,classic,classicplots)
case 6
choice=exitno;
end
%---------------------------------------------------------------------------------------------------------------------------
function choice = menureg(out,attrib,exitno,labsd,labresd,classic,classicplots)
choice=menu('Regression Plots: ','All ','Regression outlier map', 'Exit ');
switch choice
case 1
plotn='all';
whichplot(out,plotn,attrib,exitno,labsd,3,labresd,3,3,classic,classicplots)
case 2
plotn='regdiag';
whichplot(out,plotn,attrib,exitno,labsd,3,labresd,3,3,classic,classicplots)
case 3
choice=exitno;
end
%---------------------------------------------------------------------------------------------------------------------------
function choice = menuscore(out,attrib,exitno,labsd,labod,classic,classicplots)
choice=menu('Score Plots: ','All ','Scree plot','Score outlier map', 'Exit ');
switch choice
case 1
plotn='all';
whichplot(out,plotn,attrib,exitno,labsd,labod,3,3,3,classic,classicplots)
case 2
plotn='scree';
whichplot(out,plotn,attrib,exitno,labsd,labod,3,3,3,classic,classicplots)
case 3
plotn='pcadiag';
whichplot(out,plotn,attrib,exitno,labsd,labod,3,3,3,classic,classicplots)
case 4
choice=exitno;
end
%---------------------------------------------------------------------------------------------------------------------------
function choice = menupls(out,attrib,exitno,labsd,labod,labresd,classic,classicplots)
choice=menu('PLS Plots: ','All ','Score outlier map',...
'Regression outlier map', '3D outlier map (Highly memory consuming)','Exit ');
switch choice
case 1
plotn='all';
whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots)
case 2
plotn='pcadiag';
whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots)
case 3
plotn='regdiag';
whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots)
case 4
plotn='3ddiag';
whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots)
case 5
choice=exitno;
end
%---------------------------------------------------------------------------------------------------------------------------
function choice=menuscoreg(out,attrib,exitno,labsd,labod,labresd,classic,classicplots)
choice=menu('Score and Regression Plots: ','All ','Scree plot','Score outlier map',...
'Regression outlier map', '3D outlier map (Highly memory consuming)', 'Exit ');
switch choice
case 1
plotn='all';
whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots)
case 2
plotn='scree';
whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots)
case 3
plotn='pcadiag';
whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots)
case 4
plotn='regdiag';
whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots)
case 5
plotn='3ddiag';
whichplot(out,plotn,attrib,exitno,labsd,labod,labresd,3,3,classic,classicplots)
case 6
choice=exitno;
end
%---------------------------------------------------------------------------------------------------------------------------
function choice= menuls(out,attrib,exitno,labsd,labresd,lablts,classic,classicplots)
choice=menu('Residual plots: ', 'All', 'Standardized residuals versus fitted values',...
'Index plot of standardized residuals','Normal QQplot of residuals',...
'Diagnostic plot of residuals versus robust distances',...
'Scatter plot with regression line','Exit');
switch choice
case 1
plotn='all';
whichplot(out,plotn,attrib,exitno,labsd,3,labresd,3,lablts,classic,classicplots)
case 2
plotn='resfit';
whichplot(out,plotn,attrib,exitno,3,3,3,3,lablts,classic,classicplots)
case 3
plotn='resindex';
whichplot(out,plotn,attrib,exitno,3,3,3,3,lablts,classic,classicplots)
case 4
plotn='qqlts';
whichplot(out,plotn,attrib,exitno,3,3,3,3,lablts,classic,classicplots)
case 5
plotn='regdiag';
whichplot(out,plotn,attrib,exitno,labsd,3,labresd,3,lablts,classic,classicplots)
case 6
plotn='scatter';
whichplot(out,plotn,attrib,exitno,3,3,3,3,lablts,classic,classicplots)
case 7
choice=exitno;
end
%---------------------------------------------------------------------------------------------------------------------------
function choice = menuda(out,attrib,exitno,classic,classicplots)
choice=menu('Discriminant analysis: ','All ','Tolerance ellipses (for bivariate data)', 'Exit ');
switch choice
case 1
plotn='all';
whichplot(out,plotn,attrib,exitno,3,3,3,3,3,classic,classicplots)
case 2
plotn='da';
whichplot(out,plotn,attrib,exitno,3,3,3,3,3,classic,classicplots)
case 3
choice=exitno;
end
%------------------------------------------------------------------------------------------------------------------------------
function choice = menusimca(out,attrib,exitno,classic,classicplots)
choice=menu('SIMCA analysis: ','All ','Scatter plot', 'Exit ');
switch choice
case 1
plotn='all';
whichplot(out,plotn,attrib,exitno,3,3,3,3,3,classic,classicplots)
case 2
plotn='simca';
whichplot(out,plotn,attrib,exitno,3,3,3,3,3,classic,classicplots)
case 3
choice=exitno;
end