ECG-Kit 1.0

File: <base>/common/LIBRA/ellipsplot.m (2,496 bytes)
function ellipsplot(center,covar,data,dist,nid,labx,laby)

%ELLIPSPLOT plots the 97.5% tolerance ellipse of the bivariate data set
% (data). The ellipse is defined by those data points whose distance (dist) 
% is equal to the squareroot of the 97.5% chisquare quantile with 2 degrees of
% freedom. 
%  
% Required input arguments:
%   center  : estimate of the center of the data set
%    covar  : estimate of the covariance matrix of the data set 
%     data  : the two-dimensional data matrix
%     dist  : distance needed to flag data points outside the ellipse
%
% Optional input arguments:
%      nid  : number of data points with largest distance
%             to be identified (default value: 3)
%     labx  : a label for the x axis (default value: 'X1')
%     laby  : a label for the y axis (default value: 'X2')
%
% I/O: ellipsplot(center,covar,data,dist,nid,labx,laby)
%
% This function is part of LIBRA: the Matlab Library for Robust Analysis,
% available at: 
%              http://wis.kuleuven.be/stat/robust.html
%
% Last update: 23/10/2003

set(gcf,'Name', '97.5% Tolerance ellipse', 'NumberTitle', 'off');
n=length(dist);
if size(data,2)~=2
     disp('The tolerance ellipse is only drawn for two-dimensional data sets')
else
    if nargin==4
        nid=3;
        labx='X1';
        laby='X2';
    elseif nargin==5
        labx='X1';
        laby='X2';
    elseif nargin==6
        laby='X2';
    end
     deter=covar(1,1)*covar(2,2)-covar(1,2)^2;
     ylimit=sqrt(7.37776*covar(2,2));
     y=-ylimit:0.005*ylimit:ylimit;
     sqtdi=sqrt(deter*(ylimit^2-y.^2))/covar(2,2);
     sqtdi([1,end])=0;
     b=center(1)+covar(1,2)/covar(2,2)*y;
     x1=b-sqtdi;
     x2=b+sqtdi;
     y=center(2)+y;
     ellip=[x1,x2([end:-1:1]);y,y([end:-1:1])]';
     xmin=min([data(:,1);ellip(:,1)]);
     xmax=max([data(:,1);ellip(:,1)]);
     ymin=min([data(:,2);ellip(:,2)]);
     ymax=max([data(:,2);ellip(:,2)]);
     xmarg=0.05*abs(xmax-xmin);
     ymarg=0.05*abs(ymax-ymin);
     xmin=xmin-xmarg;
     xmax=xmax+xmarg;
     ymin=ymin-ymarg;
     ymax=ymax+ymarg;
     x1=data(:,1)';
     x2=data(:,2)';
     plot(x1,x2,'o')
     xlabel(labx)
     ylabel(laby)
     xlim([xmin,xmax]);
     ylim([ymin,ymax]);
     box on
     [dist,ind]=sort(dist);
     ind=ind(n-nid+1:n)';
     text(x1(ind),x2(ind),int2str(ind));   
     title('Tolerance ellipse (97.5%)');         
     line(ellip(:,1),ellip(:,2),'Color','r');
 end