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)

16 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!

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 )

Google photo

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

Twitter picture

You are commenting using your Twitter 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: