33 lines
1.1 KiB
Matlab
33 lines
1.1 KiB
Matlab
% Calculating the Pearson coefficient for a degree sequence.
|
|
% Source: "Assortative Mixing in Networks", M.E.J. Newman, Phys Rev Let 2002
|
|
%
|
|
% INPUTs: M - (adjacency) matrix, nxn (square)
|
|
% OUTPUTs: r - Pearson coefficient
|
|
%
|
|
% Other routines used: degrees.m, numEdges.m, adj2inc.m
|
|
% See also pearsonW.m
|
|
% GB: last updated, October 1, 2012
|
|
|
|
function r = pearson(M)
|
|
|
|
[degs,~,~] = degrees(M); % get the total degree sequence
|
|
m = numEdges(M); % number of edges in M
|
|
inc = adj2inc(M); % get incidence matrix for convience
|
|
|
|
% j,k - remaining degrees of adjacent nodes for a given edge
|
|
% sumjk - sum of all products jk
|
|
% sumjplusk - sum of all sums j+k
|
|
% sumj2plusk2 - sum of all sums of squares j^2+k^2
|
|
|
|
% compute sumjk, sumjplusk, sumj2plusk2
|
|
sumjk = 0; sumjplusk = 0; sumj2plusk2 = 0;
|
|
for i=1:m
|
|
[v] = find(inc(:,i)==1);
|
|
j = degs(v(1))-1; k = degs(v(2))-1; % remaining degrees of 2 end-nodes
|
|
sumjk = sumjk + j*k;
|
|
sumjplusk = sumjplusk + 0.5*(j+k);
|
|
sumj2plusk2 = sumj2plusk2 + 0.5*(j^2+k^2);
|
|
end
|
|
|
|
% Pearson coefficient formula
|
|
r = (sumjk - sumjplusk^2/m)/(sumj2plusk2-sumjplusk^2/m); |