Skip to contents

This function aims at calculating metrics for one or several partitions, usually on outputs from netclu_, hclu_ or nhclu_ functions. Metrics may require the users to provide either a similarity or dissimilarity matrix, or to provide the initial species-site table.


  dissimilarity = NULL,
  dissimilarity_index = NULL,
  net = NULL,
  site_col = 1,
  species_col = 2,
  eval_metric = c("pc_distance", "anosim", "avg_endemism", "tot_endemism")



a bioregion.clusters object


a dist object or a bioregion.pairwise.metric object (output from similarity_to_dissimilarity()). Necessary if eval_metric includes pc_distance and tree is not a bioregion.hierar.tree object


a character string indicating the dissimilarity (beta-diversity) index to be used in case dist is a data.frame with multiple dissimilarity indices


the species-site network (i.e., bipartite network). Should be provided if eval_metric includes "avg_endemism" or "tot_endemism"


name or number for the column of site nodes (i.e. primary nodes). Should be provided if eval_metric includes "avg_endemism" or "tot_endemism"


name or number for the column of species nodes (i.e. feature nodes). Should be provided if eval_metric includes "avg_endemism" or "tot_endemism"


character string or vector of character strings indicating metric(s) to be calculated to investigate the effect of different number of clusters. Available options: "pc_distance", "anosim", "avg_endemism" and "tot_endemism"


a list of class bioregion.partition.metrics with two to three elements:

  • args: input arguments

  • evaluation_df: the data.frame containing eval_metric for all explored numbers of clusters

  • endemism_results: if endemism calculations were requested, a list with the endemism results for each partition


Evaluation metrics:

  • pc_distance: this metric is the method used by (Holt et al. 2013) . It is a ratio of the between-cluster sum of dissimilarity (beta-diversity) versus the total sum of dissimilarity (beta-diversity) for the full dissimilarity matrix. In other words, it is calculated on the basis of two elements. First, the total sum of dissimilarity is calculated by summing the entire dissimilarity matrix (dist). Second, the between-cluster sum of dissimilarity is calculated as follows: for a given number of cluster, the dissimilarity is only summed between clusters, not within clusters. To do that efficiently, all pairs of sites within the same clusters have their dissimilarity set to zero in the dissimilarity matrix, and then the dissimilarity matrix is summed. The pc_distance ratio is obtained by dividing the between-cluster sum of dissimilarity by the total sum of dissimilarity.

  • anosim: This metric is the statistic used in Analysis of Similarities, as suggested in (Castro-Insua et al. 2018) (see vegan::anosim()). It compares the between-cluster dissimilarities to the within-cluster dissimilarities. It is based based on the difference of mean ranks between groups and within groups with the following formula: \(R = (r_B - r_W)/(N (N-1) / 4)\), where \(r_B\) and \(r_W\) are the average ranks between and within clusters respectively, and \(N\) is the total number of sites. Note that the function does not estimate the significance here, it only computes the statistic - for significance testing see vegan::anosim().

  • avg_endemism: this metric is the average percentage of endemism in clusters as recommended by (Kreft and Jetz 2010) . Calculated as follows: \(End_{mean} = \frac{\sum_{i=1}^K E_i / S_i}{K}\) where \(E_i\) is the number of endemic species in cluster i, \(S_i\) is the number of species in cluster i, and K the maximum number of clusters.

  • tot_endemism: this metric is the total endemism across all clusters, as recommended by (Kreft and Jetz 2010) . Calculated as follows: \(End_{tot} = \frac{E}{C}\)where \(E\) is total the number of endemics (i.e., species found in only one cluster) and \(C\) is the number of non-endemic species.


Castro-Insua A, Gómez-Rodríguez C, Baselga A (2018). “Dissimilarity measures affected by richness differences yield biased delimitations of biogeographic realms.” Nature Communications, 9(1), 9--11.

Ficetola GF, Mazel F, Thuiller W (2017). “Global determinants of zoogeographical boundaries.” Nature Ecology & Evolution, 1, 0089.

Holt BG, Lessard J, Borregaard MK, Fritz SA, Araújo MB, Dimitrov D, Fabre P, Graham CH, Graves GR, Jønsson Ka, Nogués-Bravo D, Wang Z, Whittaker RJ, Fjeldså J, Rahbek C (2013). “An update of Wallace's zoogeographic regions of the world.” Science, 339(6115), 74--78.

Kreft H, Jetz W (2010). “A framework for delineating biogeographical regions based on species distributions.” Journal of Biogeography, 37, 2029--2053.

Langfelder P, Zhang B, Horvath S (2008). “Defining clusters from a hierarchical cluster tree: the Dynamic Tree Cut package for R.” BIOINFORMATICS, 24(5), 719--720.


Boris Leroy (, Maxime Lenormand ( and Pierre Denelle (


comat <- matrix(sample(0:1000, size = 500, replace = TRUE, prob = 1/1:1001),
20, 25)
rownames(comat) <- paste0("Site",1:20)
colnames(comat) <- paste0("Species",1:25)

comnet <- mat_to_net(comat)

dissim <- dissimilarity(comat, metric = "all")

# User-defined number of clusters
tree1 <- hclu_hierarclust(dissim, n_clust = 2:20, index = "Simpson")
#> Randomizing the dissimilarity matrix with 30 trials
#>  -- range of cophenetic correlation coefficients among
#>                      trials: 0.48 - 0.56
#> Optimal tree has a 0.56 cophenetic correlation coefficient with the initial dissimilarity
#>       matrix
#> Warning: The requested number of cluster could not be found
#>                          for k = 15. Closest number found: 14
#> Warning: The requested number of cluster could not be found
#>                          for k = 16. Closest number found: 14
#> Warning: The requested number of cluster could not be found
#>                          for k = 18. Closest number found: 17
#> Warning: The requested number of cluster could not be found
#>                          for k = 19. Closest number found: 17
#> Warning: The requested number of cluster could not be found
#>                          for k = 20. Closest number found: 17
#> Clustering results for algorithm : hclu_hierarclust 
#> 	(hierarchical clustering based on a dissimilarity matrix)
#>  - Number of sites:  20 
#>  - Name of dissimilarity metric:  Simpson 
#>  - Tree construction method:  average 
#>  - Randomization of the dissimilarity matrix:  yes, number of trials 30 
#>  - Cophenetic correlation coefficient:  0.561 
#>  - Number of clusters requested by the user:  2 3 4 5 6 7 8 9 10 11 ... (with 9 more values) 
#> Clustering results:
#>  - Number of partitions:  19 
#>  - Partitions are hierarchical
#>  - Number of clusters:  2 3 4 5 6 7 8 9 10 11 ... (with 9 more values) 
#>  - Height of cut of the hierarchical tree: 0.109 0.105 0.102 0.098 0.094 0.086 0.078 0.07 0.062 0.051 ... (with 9 more values) 

a <- partition_metrics(tree1, dissimilarity = dissim, net = comnet,
                       site_col = "Node1", species_col = "Node2",
                       eval_metric = c("tot_endemism", "avg_endemism",
                                      "pc_distance", "anosim"))
#> Computing similarity-based metrics...
#>   - pc_distance OK
#>   - anosim OK
#> Computing composition-based metrics...
#>   - avg_endemism OK
#>   - tot_endemism OK
#> Partition metrics:
#>  - 19  partition(s) evaluated
#>  - Range of clusters explored: from  2  to  17 
#>  - Requested metric(s):  tot_endemism avg_endemism pc_distance anosim 
#>  - Metric summary:
#>      tot_endemism avg_endemism pc_distance    anosim
#> Min    0.00000000  0.000000000   0.1332654 0.5032680
#> Mean   0.01473684  0.006491228   0.7800817 0.7316629
#> Max    0.20000000  0.100000000   1.0000000 0.9786096
#> Access the data.frame of metrics with your_object$evaluation_df
#> Details of endemism % for each partition are available in 
#>         your_object$endemism_results