Hierarchical clustering of bipartite data sets based on the statistical
  significance of coincidences
  When some 'entities' are related by the 'features' they share they are
amenable to a bipartite network representation. Plant-pollinator ecological
communities, co-authorship of scientific papers, customers and purchases, or
answers in a poll, are but a few examples. Analyzing clustering of such
entities in the network is a useful tool with applications in many fields, like
internet technology, recommender systems, or detection of diseases. The
algorithms most widely applied to find clusters in bipartite networks are
variants of modularity optimization. Here we provide an hierarchical clustering
algorithm based on a dissimilarity between entities that quantifies the
probability that the features shared by two entities is due to mere chance. The
algorithm performance is $O(n^2)$ when applied to a set of n entities, and its
outcome is a dendrogram exhibiting the connections of those entities. Through
the introduction of a 'susceptibility' measure we can provide an 'optimal'
choice for the clustering as well as quantify its quality. The dendrogram
reveals further useful structural information though -- like the existence of
sub-clusters within clusters or of nodes that do not fit in any cluster. We
illustrate the algorithm by applying it first to a set of synthetic networks,
and then to a selection of examples. We also illustrate how to transform our
algorithm into a valid alternative for one-mode networks as well, and show that
it performs at least as well as the standard, modularity-based algorithms --
with a higher numerical performance. We provide an implementation of the
algorithm in Python freely accessible from GitHub.
