Weighted Rich-club Effect

tnet » Weighted Networks » Weighted Rich-club Effect

Research has long documented the abundance of complex systems characterised by heterogeneous distribution of resources among their elements. Back in 1897, Pareto noticed the social and economic disparity among people in different societies and countries. This empirical regularity inspired the 80-20 rule of thumb stating that only a select minority (20%) of elements in many real-world settings are responsible for the vast majority (80%) of the observed outcome. While studies have shown that high degree nodes form many ties with each other (Borgatti and Everett, 1999; Colizza et al., 2006; Newman, 2002), the weighted rich-club effect tests whether a select group of nodes share their strongest ties with each other in a weighted network (Opsahl et al., 2008). The nodes in the select group is often referred to as prominent as they are the highest ranking nodes according to a measure, such as degree or node strength.

The Weighted Rich-club Effect

The Weighted Rich-club is mainly a global measure (i.e., it gives an indication of the overall level in a network; Opsahl et al., 2008). The main question which it seeks to answer is whether a subset of prominent nodes directed their strongest ties towards each other to a greater extent than randomly expected. To test this question, there are four initial steps:

  1. Define certain nodes as prominent
  2. Calculate the total sum of weights attached to ties among the prominent nodes (see panel a of the figure below)
  3. Calculate the total sum of same number of ties, but the strongest ones, in the network (see panel b of the figure below)
  4. Find the ratio of point 2 and point 3. As a result, if the prominent nodes share the strongest ties in the network, the fraction is 1. If we the prominent nodes do not share all of the strongest nodes, we get a value lower than 1.
Weighted Rich-club Effect

The method so far does not completely answer the question raised above. This is due to the fact that some ordering properties are associated with the strength of ties. When this is the case, even random networks may display a signal. Therefore, to properly test the phenomenon, we need to assess the weighted rich-club effect observed in a real-world network against the effect found in an ensemble of random networks based on an appropriate null model. For example, if prominence is defined in terms of having an average tie weight greater than X, of course the group of prominent nodes has stronger ties among them – everything else being equal. To overcome this issue, it is possible to produce benchmark values using Random Networks (i.e., creating many random networks, and calculating the above four steps on them, take an average of the fractions found in step 4, and then divide the fraction from the real network on the average of the random networks). Although there are various ways of producing random networks, they should be produced in such a way that nodes maintain their prominence. Specifically, the choice of an appropriate null model reflects the need to discount for associations between weights and ties. To this end, the random networks must meet three main requirements. First, the random networks must have the same number of nodes and ties as the observed network. This ensures that the basic parameters of the networks are the same (Erdos and Renyi, 1960; Rapaport, 1953). Second, they must have the same weight distribution as the observed network. This is a crucial constraint since the weighted rich-club effect is measuring non-trivial intensity of interactions among nodes. Moreover, this guarantees that the vector of ordered weights remain the same. Third, the prominent nodes must be the same as in the observed network. Random networks that does not fulfill the above three requirements are deemed non-comparable with the observed network, and thus does not allow for a proper weighted rich-club assessment (Colizza et al., 2006). This is particular relevance when degree or node strength are used as indicators, or when analysing a two-mode network.

The analyses that are often reported follow the topological rich-club coefficient format by using a flexible definition of prominence (i.e, increasing levels of prominence instead of a single level). Below is an example of using out-degree as a prominence parameter. In fact, each point represents the ratio between the observed metric and the metric calculated on corresponding random networks. These results can be analysed by stating that there is a negative weighted rich-club effect at low levels of prominence, while a cross over occurs when the club includes only nodes with an out-degree greater than 5.

Weighted Rich-club Effect in the neural network of the c.elegans worm with prominence defined in terms of degree

Statistical Significance

Although the above results indicate that there is a weighted rich-club effect, it is important to check whether the results are statistically significant. Statistical significance can be tested using the distribution of values from the random networks. Below is the distribution of coefficient from 1,000 random networks. If the observed coefficient is outside the 95 percent confidence interval, it could be deemed statstically significant. In the above example, the confidence interval always crosses 1, which means that the results are non-significant.

Distribution of Weighted Rich-club Effect coefficients from random networks.

If you have a two-mode network, I have suggested a specific method for these networks.

A Local Version of Weighted Rich-club Effect

The weighted rich-club effect was originally formulated as a global measures where a fraction was computed for increasingly restrictive levels of prominence. However, it might be of interest to have a local measure where each node has a score. To rewrite the original research question, I thought:

  1. designate certain nodes as prominent in a similar fashion as the global measure
  2. for each node, sum the weights towards prominent nodes (if a node has three ties with weights of 1, 2 and 6, and the two ties with weight of 1 and 6 are directed towards prominent nodes, then the sum is 7).
  3. In case the definition of prominence is associated with the weight of ties, we need to discount for the randomly expected value. To this end, we could divide the value obtained in point 2, to the randomly expected value (average weight of ties (which is 3 in this example) multiplied with the number of ties towards prominent nodes): 6.

This process might be better be explained using an example. For the nodes in the network below, the scores would be as follow:

Sample network
Node Prominent Weighted Rich-club Effect
A/1 yes 1.00
B/2 yes 1.45
C/3 yes 1.00
D/4 no 1.00
E/5 no 1.33
F/6 no 1.00

Nodes A, C, D and F get a value of 1 as they do not have a choice in their behaviour because they are not connected to both prominent and non-prominent nodes. However, node B and E do have a choice in how to distributed their efforts. For example, node E have two ties, one with a weight of 2 to a prominent node and one with a weight of 1 to a non-prominent node. Therefore, it can be said that node E preferentially direct attention to prominent nodes.

Want to test it with your data?

The weighted rich-club can be calculated using tnet. First, you need to download and install tnet in R. Then, you need to create an edgelist of your network (see the data structures in tnet for weighted one-mode networks). The commands below show (1) how to calculate the global weighted rich-club effect on c.elegans’ neural network, and (2) how to calculate the local rich-club effect on the sample network above.

# Load tnet

# Global Weighted Rich-club Effect
# Load the neural network of the c. elegans worm

# Calculate the weighted rich-club coefficient using degree as a prominence parameter and link-reshuffled random networks
out <- weighted_richclub_w(celegans.n306.net, rich="k", reshuffle="links", NR=1000, seed=1)

# Plot output
plot(out[,c("x","y")], type="b", log="x", xlim=c(1, max(out[,"x"]+1)), ylim=c(0,max(out[,"y"])+0.5), xaxs = "i", yaxs = "i", ylab="Weighted Rich-club Effect", xlab="Prominence (degree greater than)")
lines(out[,"x"], rep(1, nrow(out)))

# Local Weighted Rich-club Effect
# Load the above sample network
net <- cbind(

# Define prominence parameter (node 1 (A), 2 (B) and 3 (C) are designated as prominent)
prominence <- c(1,1,1,0,0,0)

# Run function
weighted_richclub_local_w(net, prominence)


Borgatti, S.P., Everett, M.G., 1999. Models of Core/Periphery Structures. Social Networks 21: 375-395.

Colizza, V., Flammini, A., Serrano, M. A., Vespignani, A., 2006. Detecting rich-club ordering in complex networks. Nature Physics 2, 110-115. arXiv:physics/0602134

Newman, M.E.J., 2002. Assortative mixing in networks. Physical Review Letters 89 (208701).

Opsahl, T., Colizza, V., Panzarasa, P., Ramasco, J. J., 2008. Prominence and control: The weighted rich-club effect. Physical Review Letters 101 (168702). arXiv:0804.0417.

If you use any of the information in this post, please cite: Opsahl, T., Opsahl, Colizza, V., Panzarasa, P., Ramasco, J.J., 2008. Prominence and control: The weighted rich-club effect. Physical Review Letters 101 (168702)

25 Comments Add your own

  • 1. Eseosa  |  April 15, 2014 at 10:48 am

    For node F, how was the weighted richclub effect calculated, if both node E and F are referred to as non-prominent; the only tie for node F is E-F?

    • 2. Tore Opsahl  |  April 15, 2014 at 3:11 pm

      Apologies. There was a spelling mistake (now corrected). Node F has no choice in shifting its attention between prominent and non-prominent nodes, and as such, gets a score of 1.

  • 3. davidnfisher  |  September 23, 2014 at 8:10 am

    Hi Tore,

    How do you extract the values for the random networks from the weighted_richclub_w function?



    • 4. Tore Opsahl  |  September 24, 2014 at 1:53 am

      Hi David,

      The average value is present in the y-column, and the confidence intervals are listed. However, there are no direct way to get all the scores out. If you look into the weighted_richclub_w-function, the rphi-object contains the scores. Altering the function to return/save this object would enable you to make the histograms on this page.


      • 5. davidnfisher  |  September 24, 2014 at 11:15 am

        OK, I had wondered about the 95% CIs as mine are all 0:

        x y l99 l95 h95 h99
        1 0.999990 1.000000 0 0 0 0
        2 1.117379 1.078395 0 0 0 0
        3 1.248549 1.078395 0 0 0 0
        4 1.395117 1.078395 0 0 0 0
        5 1.558890 1.078395 0 0 0 0
        6 1.741889 1.078395 0 0 0 0
        7 1.946370 1.078395 0 0 0 0
        8 2.174856 1.175318 0 0 0 0
        9 2.430163 1.175318 0 0 0 0
        10 2.715441 1.175318 0 0 0 0
        11 3.034208 1.205826 0 0 0 0
        12 3.390395 1.205826 0 0 0 0
        13 3.788396 1.205826 0 0 0 0
        14 4.233117 1.245198 0 0 0 0
        15 4.730045 1.245198 0 0 0 0
        16 5.285307 1.411366 0 0 0 0
        17 5.905752 1.411366 0 0 0 0
        18 6.599031 1.411366 0 0 0 0
        19 7.373695 1.479959 0 0 0 0
        20 8.239296 1.479959 0 0 0 0
        21 9.206511 1.545667 0 0 0 0
        22 10.287268 1.545667 0 0 0 0
        23 11.494896 1.545667 0 0 0 0
        24 12.844287 1.598236 0 0 0 0
        25 14.352084 1.598236 0 0 0 0
        26 16.036883 1.871658 0 0 0 0
        27 17.919460 1.886792 0 0 0 0
        28 20.023034 2.649007 0 0 0 0
        29 22.373548 2.649007 0 0 0 0
        30 24.999990 2.649007 0 0 0 0

        Does that mean there CIs have no size?


      • 6. Tore Opsahl  |  September 24, 2014 at 9:14 pm

        Hi David,

        Are you using 100 or more random networks? I think I set confidence ranges only to be computed for 100+ random networks — perhaps the values should be set to NA instead when the sample is small.


  • 7. davidnfisher  |  September 25, 2014 at 7:14 am

    Ah ok yes that is the issue, I have CIs as soon as I set it to 101 random networks. Cheers!

  • 8. Rose  |  October 1, 2014 at 11:02 pm

    Is there a way to just get one weighted rich club coefficient (like an average) for the whole network? Thanks Tore.

    • 9. Tore Opsahl  |  October 3, 2014 at 3:29 am

      Hi Rose,

      All the numbers in the diagrams are scores for the whole network, but at various cut-off of defining prominence. You could look at a percentile of nodes (e.g., only the top 10% are prominent / rich).


  • 10. Rose  |  October 10, 2014 at 3:22 am

    Hi Tore,

    So i know that as x value increases a smaller set of agents are included in that club and then the y value represents average value. There are 30 rows in the output. But how do i restrict to a percentile of nodes only? Thanks for clarifying.

    • 11. Tore Opsahl  |  October 14, 2014 at 11:23 pm


      You can use degree_w to find the distribution of your prominence metric, and then calculate the distribution.

      Hope this helps,

  • 12. Abdul Waheed  |  December 31, 2014 at 11:05 am

    Dear Tore,

    Kindly if possible can you please tell me why I’m getting this error when I’m finding rich club effect on my data set.

    Error in weighted_richclub_w(ProjectedStates, prominence) :
    The rich-parameter is not properly specified; only k and s.
    In addition: Warning messages:
    1: In if (rich == “k”) { :
    the condition has length > 1 and only the first element will be used
    2: In if (rich == “s”) { :
    the condition has length > 1 and only the first element will be used

    Further, when I apply weighted_richclub_tm on my 2mode network it is not giving appropriate results.

    I’ll remain thankful for your concern.

    Kind regards


    • 13. Tore Opsahl  |  January 1, 2015 at 11:08 pm

      Hi A.W.Mahesar,

      Thanks for taking an interest in my work. How is the prominence-object defined? It needs to be a single character that is either “k” or “s” for binary degree or weighted degree, respectively. See code example above.

      Hope this helps,

  • 14. Rodrigo  |  May 9, 2018 at 5:16 am

    Dear Tore,

    Before all, congratulations by your work. I have read the articles and follow the resourceful blog. It is all really interesting!

    I have one doubt about the results of this function. Would each bin be the distribution of prominence? Then, in order to retrieve the level of prominence used in the calculations (s >= prominence) at bin 20, is just necessary to see the limits of the weight distribution of the network at the bin 20, for instance?

    Thank you in advance.



    • 15. Rodrigo  |  May 9, 2018 at 9:45 am

      Sorry, I misunderstood the results. I thought that x was the observed phi, when actually I realized that the x is the cutting point of richness, is that correct?

      Thank you for letting your work available.

      Kind Regards,


      • 16. Tore Opsahl  |  May 9, 2018 at 10:46 pm

        Thank you for taking an interest in my work, Rodrigo.

        You are correct: the x-axis represents the prominence vector (e.g., a value of 20 means that nodes with s >= 20 (if prominence is s) forms the rich-club). The y-axis shows the rich-club coefficient (ratio of the observed and the random) for the select nodes in the rich-club.

        Good luck!

  • 17. Drahomír  |  August 1, 2019 at 5:48 am

    Hello Tore,

    Thank you for your great and fascinating work.

    I’m currently conducting a network analysis where i’m trying to identify core structure that controls the prominent portion of information flow within the network.

    I had one question regarding the computations of strenghts at certain levels of prominence. In my case the prominence is represented by weighted degree (or strength). As the strength is calculated as a sum of adjacent edges to the node, is strength recalculated for each selected rich-club?

    Lets say i have prominence level of strength 80 (units doesn’t matter) at which i detected significant formation of a rich-club. If i understood the algorithm right, this means that all the nodes not meeting this level of strength (prominence) have been removed. That is, the strengths of remaining nodes is 80 or greater, but this is the recalculated strength after removal of nodes not meeting this requirment. I mean something simillar to k-core (based on degrees) or s-core (based on strengths) decomposition of the network, which iterativelly removes nodes starting from minimum value recalculating the selected parameter each time a node is removed.

    Thank you for your response

    Best regards

    • 18. Tore Opsahl  |  August 20, 2019 at 9:13 pm

      Hi Drahomir,

      Glad you’re finding the work useful.

      The prominence is not reclaculated as the rich-club becomes more selective.


  • 19. Drahomir  |  August 21, 2019 at 6:29 am

    Hi Tore,

    Thank you for your response. I would be really thankful if you could explain me the issue I’m having with the results of the analysis.

    I have undirected network with n = 248 and m = 2401. The strength values are in the range from 3.26 to 1309. When I ran the analysis, I used “s” as a rich parameter reshuffling weights with NR = 1000 and nbins = 50. The problem I have is that the results show the weighted richclub coefficient (wrc) only up to the prominence level of 70 (i.e. strength = 70). I’m wondering why the stronger nodes weren’t included. I tried to expand the number of bins to 150, but again the maximum prominence value for which wrc is computed is 70. Doesn’t undirected edgelists have to be symmetrised as in the case of computing weighted average shortest paths?

    Significant WRC (above 95%-tile of the random counterparts) was detected at the prominence value of 56. If I’m interpreting the results accordingly, then this mean that a significant rich club is forming amongst nodes with strength value 56 or greater. However, in my case this means that rich club consists of almost 55% of the original number of the nodes in the network (I excepted a more prominent rich club). I’m really trying to make sense out of this result, but from visual inspection of the network it is clearly visible that there are much stronger nodes sharing greater weights amongst themselves (which is suggestive of more selective wrc than suggested by the analysis). If I may, I would gladly send you the data and results of my analysis.

    Thank you for your patience and help


    • 20. Tore Opsahl  |  August 27, 2019 at 8:09 pm

      Hi Drahomir,

      There might not sufficient amount of data past s=70. You are correct in symmetrizing the network if it is undirected. Feel free to send me an email and I will have a look at it.


      • 21. Drahomir  |  August 27, 2019 at 8:15 pm

        Hi Tore,

        Well, I must have overlooked or forget the symmetrization process mentioned in the paper. I reran the analysis on the symmetrized edgelist and now the results are looking good and comprehensible :) Thanks for your time and effort.


  • 22. Kirill  |  November 6, 2019 at 10:33 pm

    Dear Tore,

    Thank you for your work and code!

    I have a couple of questions about null models. In the article for weighted networks, you use weight & links reshuffling but as far as I understand the function for calculating WRC accept them only separately. Am I right or link reshuffling one implies weight reshuffling? Finally, in the paper, you also say that if richness is defined as the strength (my case), the null model should preserve strength distribution. Can you give a piece of advice on how it can be performed?


  • 24. Arlo  |  March 17, 2021 at 12:35 am

    Dear Tore,

    Thanks very much for your work and code!

    I have trouble understanding the statistical significance of the coefficients. With “tnet” function “weighted_richclub_w”, can I say if values in the Y column are outside the intervals created by the corresponding “H95” and “I95” columns, then these values in the Y column are statistically significant? Is this the right interpretation? Thanks!

    • 25. Tore Opsahl  |  March 17, 2021 at 4:36 pm

      Hi Arlo,

      Indeed. Think of these values are the plot positions of the confidence interval in the graph of the paper.



Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Subscribe to the comments via RSS Feed

%d bloggers like this: