the expression levels of two genes) taking values $a_l$ and $b_m$, respectively, the mutual information is defined as $$MI(A,B)=H(A)+H(B)-H(A,B),$$ where $$\begin{aligned}
  H(A) &= -\sum_l P(a_l)\log P(a_l),\\
  H(B) &= -\sum_m P(b_m)\log P(b_m),\\
  H(A,B) &= \sum_{lm} P(a_l,b_m) \log P(a_l,b_m),\end{aligned}$$ are the individual and joint Shannon entropies of $A$ and $B$, and $P(a_l)=P(A=a_l)$, and likewise for the other terms. Since gene expression data are continuous, mutual information estimation is non-trivial and usually involves some form of discretisation [@daub2004]. Mutual information has been successfully used as a co-expression measure in a variety of contexts [@butte2000; @basso2005; @faith2007].

Clustering and co-expression module detection {#sec:clust-co-expr}
---------------------------------------------

It is generally understood that cellular functions are carried out by “modules”, groups of molecules that operate together and whose function is separable from that of other modules [@hartwell1999]. Clustering gene expression data (i.e. dividing genes into discrete groups on the basis of similarities in their expression profiles) is a standard approach to detect such functionally coherent gene modules. The literature on gene expression clustering is vast and cannot possibly be reviewed comprehensively here. It includes “standard” methods such as hierarchical clustering [@eisen1998cluster], $k$-means [@tavazoie1999systematic], graph-based methods that operate directly on co-expression networks [@sharan2000click], and model-based clustering algorithms which assume 