view m-toolbox/classes/+utils/@math/ecdf.m @ 19:69e3d49b4b0c
database-connection-manager
Update ltpda_uo.fromRepository
author
Daniele Nicolodi <nicolodi@science.unitn.it>
date
Mon, 05 Dec 2011 16:20:06 +0100 (2011-12-05)
parents
f0afece42f48
children
line source
+ − % ECDF Compute empirical cumulative distribution function
+ − %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ − % Compute empirical cumulative distribution function for a series of data
+ − %
+ − % CALL
+ − %
+ − % [F,X] = ecdf(Y);
+ − %
+ − % INPUT
+ − %
+ − % - Y, a data series
+ − %
+ − % L Ferraioli 09-03-2011
+ − %
+ − % $Id: ecdf.m,v 1.2 2011/03/09 11:40:27 luigi Exp $
+ − %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ − function [F,X] = ecdf(Y)
+ −
+ − % sort input data
+ − X = sort(Y);
+ −
+ − % define variable for cumulative sum
+ − sw = ones(size(X));
+ − n = numel(sw);
+ −
+ − jj = 2;
+ − idd = false(size(sw));
+ − % Fi is calculated practically as Fi = ni/n where ni is the position of
+ − % the ith element of the sorted input array. If two or more elements are
+ − % equal then only the ni corresponding to the last one is considered and
+ − % the other elements are removed. ni is obtained by a cumulative sum of
+ − % an arrays of ones. If k elements are equal they are removed and
+ − % substituted by a single k.
+ − while jj < n+1
+ − if X(jj) ~= X(jj-1); % if successive elements are different we can go on
+ − jj = jj+1;
+ − else % if some elements are equal than we have to count the equal elements
+ − jt = jj+1;
+ − while jt<=n+1 && X(jt-1)==X(jj-1) % counting equal elements
+ − jt = jt + 1;
+ − end
+ −
+ − for ji=jj:jt-2
+ − idd(ji-1) = true; % make the assignement for successive removal of elements
+ − end
+ − t = jt-jj;
+ − % set the value corresponding to the number of equal elements in
+ − % correspondence to the last element of the series of eqials
+ − sw(jt-2) = t;
+ −
+ − jj = jt;
+ − end
+ − end
+ −
+ − % remove unwanted elements corresponding to duplicates
+ − sw(idd) = [];
+ −
+ − % calculate cumulative distribution by cumulative sum
+ − F = cumsum(sw)./n;
+ −
+ − % remove elements corresponding to replicas
+ − X(idd) = [];
+ −
+ − end