12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- function [R,Nk,Ek] = rich_club_bu(CIJ,varargin)
- %RICH_CLUB_BU Rich club coefficients (binary undirected graph)
- %
- % R = rich_club_bu(CIJ)
- % [R,Nk,Ek] = rich_club_bu(CIJ,klevel)
- %
- % The rich club coefficient, R, at level k is the fraction of edges that
- % connect nodes of degree k or higher out of the maximum number of edges
- % that such nodes might share.
- %
- % Input: CIJ, connection matrix, binary and undirected
- % klevel, optional input argument. klevel sets the
- % maximum level at which the rich club
- % coefficient will be calculated. If klevel is
- % not included the the maximum level will be
- % set to the maximum degree of CIJ.
- %
- % Output: R, vector of rich-club coefficients for levels
- % 1 to klevel.
- % Nk, number of nodes with degree>k
- % Ek, number of edges remaining in subgraph with
- % degree>k
- %
- % Reference: Colizza et al. (2006) Nat. Phys. 2:110.
- %
- % Martijn van den Heuvel, University Medical Center Utrecht, 2011
- Degree = sum(CIJ); %compute degree of each node
- if nargin == 1
- klevel = max(Degree);
- elseif nargin == 2
- klevel = varargin{1};
- elseif nargin > 2
- error('number of inputs incorrect. Should be [CIJ], or [CIJ, klevel]')
- end
- R = zeros(1,klevel);
- Nk = zeros(1,klevel);
- Ek = zeros(1,klevel);
- for k = 1:klevel
- SmallNodes=find(Degree<=k); %get 'small nodes' with degree <=k
- subCIJ=CIJ; %extract subnetwork of nodes >k by removing nodes <=k of CIJ
- subCIJ(SmallNodes,:)=[]; %remove rows
- subCIJ(:,SmallNodes)=[]; %remove columns
- Nk(k)=size(subCIJ,2); %number of nodes with degree >k
- Ek(k)=sum(subCIJ(:)); %total number of connections in subgraph
- R(k)=Ek(k)/(Nk(k)*(Nk(k)-1)); %unweighted rich-club coefficient
- end
|