<title>Background</title> <p>Biological systems can be modeled as complex network systems with many interactions between the components. These interactions give essential information about the function and behavior of the analyzed system. For example, the protein-protein interaction network is the physical basis of multiple cellular functions. The first large-scale protein interaction studies were conducted on yeast [##REF##10688190##1##,##REF##11283351##2##], followed by more recent studies on the fly [##REF##14605208##3##] and the worm [##REF##14704431##4##]. The main goal of current network research in many diverse areas such as biology, social sciences and statistical physics is to understand and characterize underlying network structures. Such an understanding is vital for many systems, simply because <italic>structure always affects function </italic>[##REF##11258382##5##].</p> <p>As noted by Barabasi [##REF##14735121##6##], the most important discovery of network research in recent years is that many different complex network systems including biological networks demonstrate some significant common principles that govern their architecture, topology and behavior such as small-world property [##REF##11034217##7##,##UREF##0##8##], power-law degree distribution [##REF##11034217##7##] and highly modular structures [##REF##9623998##9##].</p> <p>Among other network analysis tasks network clustering plays a particular role as it helps us to detect modules or communities which are usually good indicators of structural or functional units of the underlying network.</p> <p>Various methods have been developed to find partitions in networks. These methods tend to partition networks such that there are a dense set of edges within every partition and few edges between partitions. Modularity-based algorithms [##REF##15729348##10##, ####UREF##1##11##, ##UREF##2##12####2##12##] and normalized cut [##UREF##3##13##,##UREF##4##14##] are widely used examples. However, most of the state-of-the-art algorithms have quadratic running time thus limited usage for large real networks.</p> <p>Recently we proposed a new network clustering algorithm, SCAN (Structural Clustering Algorithm for Networks) which runs linearly with the size of given network [##UREF##5##15##]. Despite the common methodology of current methods where maximization or minimization of edges within/across clusters is essential, it defines clusters based on structural similarity of vertices. Number of shared neighbors for two vertices basically defines their similarity, and vertices with similarity values above certain threshold are assigned to the same partition. Similarity definition that takes into account the neighborhood of a vertex becomes more reasonable when social networks are considered: people who share more friends are more likely to be friends each other and more likely to be members of same community.</p> <p>Additionally its capability to detect hubs and isolated nodes in the given network makes it a unique approach as no other available methods offer such a function.</p> <p>In this study, we show the effectiveness of our methodology using the budding yeast (Saccharomyces cerevisiae) protein-protein interaction network. To validate our clustering results, we compare our clusters with the known functions of each protein. Our predicted functional modules achieve very high clustering scores as compared to other state-of-the-art approaches.</p>
<title>Methods</title> <title>The notion of structure-connected clusters</title> <p>Our goal is to achieve an optimal clustering of the PPI network, as well as to identify hubs and outliers. Therefore, both connectivity and local structure are used in our definition of optimal clustering. In this section, we formulize the notion of a structure-connected cluster, which extends that of a density-based cluster [##UREF##8##23##] and can distinguish good clusters, hubs, and outliers in networks. In the next section, we present, SCAN, an efficient algorithm to find the optimal clustering of networks [##UREF##5##15##].</p> <title>Structure-connected clusters</title> <p>The existing network clustering methods are designed to find optimal clustering of networks based on the number of edges that run within or across clusters. Direct connections are important, but they represent only one aspect of the network structure. We believe that the neighborhood around two connected vertices is also important. The neighborhood of a protein includes all the vertices connected to it by an edge. When you consider a pair of connected vertices, their combined neighborhood reveals neighbors common to both vertices.</p> <p>Our method is based on common neighbors. Two vertices are assigned to a cluster according to how they share neighbors. This makes sense when you consider social communities. People who share many friends create a community, and the more friends they have in common, the more intimate the community. But in social networks there are different kinds of actors. There are also people who are outsiders (like hermits), and there are people who are friendly with many communities but belong to none (like politicians). The latter plays a special role in small-world networks as <italic>hubs </italic>[##REF##9623998##24##]. Such a hub is illustrated by protein <italic>G </italic>in Figure ##FIG##4##5##.</p> <p>More formally, we focus on simple, undirected and unweighted graphs. Let <italic>G </italic>= {<italic>V</italic>, <italic>E</italic>} be a graph, where <italic>V </italic>is a set of vertices -proteins in PPI; and <italic>E </italic>is set of unordered pairs of distinct vertices, called edges. Before formal presentation of SCAN, it is worth to give fundamental definitions exploited by the algorithm. We refer the reader to our previous work [##UREF##5##15##] for extensive formal discussions.</p> <p>The structure of a vertex is described by its neighborhood. A formal definition of vertex structure is given as follows.</p> <title>Definition 1 (Vertex Structure)</title> <p>Let <italic>v ∈ V</italic>, the structure of v is defined by its neighborhood, denoted by</p> <p></p> <p>Please note that neighborhood of protein <italic>v, Γ (v)</italic>, also includes v in addition to all neighbors of v. For instance, considering Figure ##FIG##4##5##, <italic>Γ (A) </italic>would be <italic>{A, B, E, F, G}</italic>. Having Definition 1, now we can formulize similarity function, which is run for every edge, <italic>{v, w} ∈ E</italic>, in the network. We call the similarity function structural similarity because it is solely derived from vertex structure <italic>Γ (v)</italic>. The structural similarity between two vertices is measured by normalized common neighbors, which is also called cosine similarity measure commonly used in information retrieval. If we only use the number of shared neighbors, hub vertices, such as <italic>G </italic>in Figure ##FIG##4##5##, will be clustered into either of the clusters or two clusters will be mistakenly merged. Therefore, we normalize number of common neighbors by the geometric mean of the two neighborhoods' size. Note that In Figure ##FIG##4##5##, protein <italic>G </italic>should be identified as a hub, shared in neighborhood of both clusters.</p> <title>Definition 2 (Structural Similarity)</title> <p></p> <p>When a member of cluster shares a similar structure with one of its neighbors, their computed structural similarity will be large. Obviously structural similarity is symmetric, <italic>σ (v, w) = σ (w, v)</italic>. Structural similarity between <italic>v </italic>and <italic>w, σ (v, w)</italic>, would be greater than zero if and only if v and w are vertices of an edge <italic>e ∈ E</italic>. Under this circumstance, structural similarity attains values between (0, 1]. However, structural similarity should be restricted to control expansion of the cluster. Therefore, we apply a threshold <italic>ε </italic>to the computed structural similarity when assigning cluster membership, formulized in the following <italic>ε</italic>-neighborhood definition.</p> <title>Definition 3 (<italic>ε</italic>-Neighborhood)</title> <p></p> <p>When a vertex accumulates enough neighbors in its <italic>ε</italic>-neighborhood, it becomes a nucleus or <italic>seed </italic>for a cluster. Such a vertex is called a core vertex. Core vertices are a special class of vertices that have a minimum of <italic>μ </italic>neighbors with a structural similarity that greater than or equals to the threshold <italic>ε</italic>. From core vertices we grow the clusters. In this way only the parameters <italic>μ </italic>and <italic>ε </italic>determine the clustering of networks. For a given <italic>ε</italic>, the minimal size of a cluster is determined by <italic>μ</italic>. If a vertex w is in <italic>ε</italic>-neighborhood of a core vertex <italic>v</italic>, vertex <italic>w </italic>should be included into the same cluster with vertex <italic>v</italic>. Because, they are connected and share a similar structure. This concept is known as <italic>direct structural reachability</italic>.</p> <p>Direct structural reachability is symmetric for any pair of cores. However, it is asymmetric if one of the vertices is not core. Also the property of direct structural reachability is basis for the cluster expansion. A newly formed cluster C consists of a core vertex v and v's <italic>ε</italic>-neighborhood. Then we try to expand cluster C through any vertex w in v's <italic>ε</italic>-neighborhood. This approach guarantees that vertex w is directly structure-reachable from vertex v. Iterative queries for direct structural reachability usually add more and more vertices into the current cluster. This procedure mimics a chain effect for core vertices.</p> <p>A simple setting is shown in Figure ##FIG##5##6##. Under the conditions of <italic>μ </italic>= <italic>2 </italic>and <italic>ε </italic>= <italic>0.6</italic>, the possible scenario is as follows: We find <italic>E </italic>as the first core vertex since structural similarity between <italic>E </italic>and <italic>B </italic>is greater than <italic>ε, 0.6</italic>. Now a cluster of <italic>{E, B} </italic>is formed, and it should be expanded if possible. At the second step we look for any vertex that is similar to <italic>B</italic>. Among neighbors of <italic>B</italic>, vertex <italic>D </italic>is selected and inserted into the current cluster <italic>{E, B} </italic>due to similarity value of <italic>0.77 </italic>between <italic>B </italic>and <italic>D</italic>. After the insertion, the cluster has now three vertices <italic>{E, B, D}</italic>. At this stage of algorithm, it is noticeable that vertex <italic>E </italic>and <italic>B </italic>are core vertices; <italic>B </italic>is directly structure-reachable from <italic>E</italic>; and <italic>D </italic>is directly structure-reachable from <italic>B</italic>.</p> <p>After given example, we introduce another property of SCAN algorithm: structural reachability, which can be considered as chained form of direct structural reachability. The structural reachability is transitive, but it is asymmetric. It is only symmetric for a pair of cores, as appears in previous example. More specifically, the structural reachability is a transitive closure of direct structural reachability.</p> <p>Two non-core vertices in the same cluster may not be structure-reachable because the core condition may not hold for them. But they still belong to the same cluster because they both are structure- reachable from the same core. This idea is known as structural connectivity, and explained more formally as follows. A vertex <italic>v ∈ V </italic>is structure-connected to a vertex <italic>w ∈ V </italic>w.r.t <italic>ε </italic>and <italic>μ</italic>, if there is a vertex <italic>u ∈ V </italic>such that both v and w are structure-reachable from <italic>u</italic>. The structural connectivity is a symmetric relation. For the structure-reachable vertices, it is also reflective. Now we are ready to define a cluster as structure-connected vertices, which is maximal w.r.t. structural reachability.</p> <p>A non-empty subset <italic>C </italic>⊆ <italic>V </italic>is called a structure-connected cluster w.r.t <italic>ε </italic>and <italic>μ</italic>, if all vertices in <italic>C </italic>are structure-connected and <italic>C </italic>is maximal w.r.t structure reachability. The SCAN algorithm finds all clusters w.r.t <italic>ε </italic>and <italic>μ</italic>, however, there might be some isolated vertices that are not assigned to clusters. If this is the case, we categorize each of those vertices either as hub or outlier. When an isolated vertex <italic>v ∈ V </italic>has neighbors belonging to two or more different clusters, it is labeled as hub vertex. Otherwise, isolated vertex would be an outlier.</p> <p>In practice, the definitions of a hub and an outlier are flexible. It may be more useful to regard hubs as a special kind of outlier, since both are isolated vertices. The more clusters in which an outlier has neighbors, the more strongly that vertex acts as a hub between those clusters. This point will be discussed further when we consider actual networks.</p> <title>Algorithm scan</title> <p>In this section, we describe the algorithm SCAN which implements the search for clusters, hubs and outliers in PPI network. The search begins by first visiting each vertex once to find structure-connected clusters, and then visiting the isolated vertices to identify them as either a hub or an outlier.</p> <p>The pseudo code of the algorithm SCAN is presented in Figure ##FIG##6##7## with graphical representation in Figure ##FIG##7##8## and Figure ##FIG##8##9##. SCAN performs one pass of a network and finds all structure-connected clusters for a given parameter setting. At the beginning all vertices are labeled as unclassified. The SCAN algorithm classifies each vertex either a member of a cluster or a non-member. For each vertex that is not yet classified, SCAN checks whether this vertex is a core (STEP 1). If the vertex is a core, a new cluster is expanded from this vertex (STEP 2.1). Otherwise, the vertex is labeled as a non-member (STEP 2.2). To find a new cluster, SCAN starts with an arbitrary core <italic>v </italic>and search for all vertices that are structure-reachable from <italic>v </italic>in STEP 2.1. This is sufficient to find the complete cluster containing vertex <italic>v</italic>, due to given definitions. In STEP 2.1, a new cluster ID is generated which will be assigned to all vertices found in STEP 2.1. SCAN begins by inserting all vertices in <italic>ε</italic>-neighborhood of vertex <italic>v </italic>into a queue. For each vertex in the queue, it computes all directly structure-reachable vertices and inserts those vertices into the queue which are not yet classified. This is repeated until the queue is empty.</p> <p>The non-member vertices can be further classified as hubs or outliers in STEP 3. If an isolated vertex has edges to two or more clusters, it is classified as a hub. Otherwise, it is an outlier. This final classification is done according to what is appropriate for the network. As mentioned earlier, the more clusters in which an outlier has neighbors, the more strongly that vertex acts as a hub between those clusters. Likewise, a vertex might bridge only two clusters, but how strongly it is viewed as a hub may depend on how aggressively it bridges them.</p> <p>As discussed before, the results of SCAN do not depend on the order of processed vertices, i.e. the obtained clustering of network (number of clusters and association of cores to clusters) is determinate.</p> <title>Complexity analysis</title> <p>In this section, we present an analysis of the computation complexity of the algorithm SCAN. Given a graph with <italic>m </italic>edges and <italic>n </italic>vertices, SCAN first finds all structure-connected clusters w.r.t. a given parameter setting by checking each vertex of the graph (STEP 1). This entails retrieval of all the vertex's neighbors. Using an adjacency list, a data structure where each vertex has a list of which vertices it is adjacent to, the cost of a neighborhood query is proportional to the number of neighbors, that is, the degree of the query vertex. Therefore, the total cost is <italic>O(deg(v</italic><sub>1</sub><italic>)+deg(v</italic><sub>2</sub><italic>)+...deg(v</italic><sub><italic>n</italic></sub><italic>))</italic>, where <italic>deg(v</italic><sub><italic>i</italic></sub><italic>), i = 1,2,..., n </italic>is the degree of vertex <italic>v</italic><sub><italic>i</italic></sub>. If we sum all the vertex degrees in <italic>G</italic>, we count each edge exactly twice: once from each end. Thus the running time is <italic>O(m)</italic>.</p> <p>We also derive the running time in terms of the number of vertices, should the number of edges be unknown. In the worst case, each vertex connects to all the other vertices for a complete graph. The worst case total cost, in terms of the number of vertices, is <italic>O(n(n-1))</italic>, or <italic>O(n2)</italic>. However, real networks generally have sparser degree distributions. In the following we derive the complexity for an average case, for which we know the probability distribution of the degrees. One type of network is the random graph, studied by Erdös and Rényi [##UREF##9##25##]. Random graphs are generated by placing edges randomly between vertices. Random graphs have been employed extensively as models of real world networks of various types, particularly in epidemiology. The degree of a random graph has a poisson distribution:</p> <p></p> <p>which indicates that most nodes have approximately the same number of links (close to the average degree <italic>E(k) = z</italic>). In the case of random graphs the complexity of SCAN is <italic>O(n)</italic>.</p> <p>Many real networks, such as social networks, biological networks and the WWW follow a power-law degree distribution. The probability that a node has <italic>k </italic>edges, <italic>P(k)</italic>, is on the order k-<italic>α</italic>, where <italic>α </italic>is the degree exponent. A value between 2 and 3 was observed for the degree exponent for most biological and non-biological networks studied by the Faloutsos brothers [##UREF##10##26##] and Barabási and Oltvai [##REF##11258382##5##]. The expected value of degree is <italic>E(k) = α/(α-1)</italic>. In this case the average cost of SCAN is again <italic>O(n)</italic>.</p> <p>Therefore, the complexity in terms of the number of edges in the graph for SCAN algorithm is in general linear. The complexity in terms of the number of vertices is quadratic in the worst case of a complete graph. For real networks like biological networks, social networks, and computer networks, SCAN expects linear complexity with respect to the number of vertices as well.</p>
<title>Results and discussion</title> <title>Protein-Protein Interaction Network</title> <p>Hand-curated databases of PPI in <italic>Saccharomyces cerevisiae </italic>have been studied earlier in the literature [##REF##15048975##16##, ####REF##15374873##17##, ##REF##12089522##18####12089522##18##] and are proven to be invaluable resources for bioinformatics research. For this study, PPI network is downloaded from the <italic>Saccharomyces </italic>Genome Database (SGD) [##UREF##6##19##] on January 21, 2008. After cleaning unrelated interaction, we chose only Affinity Capture-MS and Affinity Capture-Western proteins, which account for 26751 interactions between 4030 proteins.</p> <title>Validation metric based on Gene Ontology</title> <p>The Gene Ontology (GO) database provides controlled vocabularies for the description of the 1) molecular function, 2) biological process, and 3) cellular component of gene products. The ontologies are continuously updated by GO Consortium, and new versions are made available on monthly basis. Of three ontologies, molecular function describes the tasks performed by individual gene products, such as enzyme activator activity and RNA binding; biological process refers broad biological goals, such as chromatin remodeling or mRNA capping; and cellular component covers subcellular structures, locations, and macromolecular complexes, such as intracellular or cytoplasm.</p> <p>The ontologies of GO database are manually created by many scientists. GO database is accepted as ground-truth and used for comparison and validation purposes. Thus, in our analysis we used GO ontologies to test if the resulting clusters are related to any known functional modules. Simply relying on number of proteins that have same annotation will be misleading since distributions of genes among various GO categories are not uniform.</p> <p>P-value is the probability that a given set of proteins is enriched by a given functional group by random chance. It is usually used as a criteria to assign each cluster to a known function [##REF##15180928##20##,##REF##14960460##21##]. The smaller the p-value, the more evidence the clustering is not random. In terms of GO annotations, a group of genes with smaller p-value is more significant than the one with a higher p-value.</p> <p>Consider a cluster with size n, m proteins sharing a particular annotation <italic>A</italic>. Also assume that there are <italic>N </italic>proteins in the PPI database, and <italic>M </italic>of them are known to have annotation <italic>A</italic>. Given that, the probability of observing m or more proteins that are annotated with <italic>A </italic>out of <italic>n </italic>protein is:</p> <p></p> <p>Based on above formulation, p-value is calculated for each of three ontologies. However we cannot find always three p-values for a cluster since it is not guaranteed that each cluster has at least one member associated with each of ontology. For instance, protein trm2 does not have any association for cellular component, whereas protein mms1 has two entries which are both from biological process ontology. Assuming a cluster has only two members, trm2 and mms1, we cannot calculate a p-value of the cluster for cellular component ontology. Therefore, it would be correct to claim that we calculate at least one p-value for each cluster. In the case of multiple annotations from same ontology, the one with the smaller p-value is assigned to the cluster as functional annotation. That being said, the p-value without any restriction is not enough to label clusters as significant. Hence we use the recommended cutoff value of <italic>0.05 </italic>in order to select significant clusters within each ontology.</p> <p>Let <italic>C </italic>be a cluster including k annotations, and <italic>A</italic><sup><italic>C </italic></sup>denote proteins having annotation <italic>A </italic>in cluster <italic>C</italic>. The cluster  is labeled with a functional annotation , 1 ≤ <italic>t </italic>≤ <italic>k</italic>, iff p-value of  is the smallest one among others in cluster <italic>C </italic>and less than cutoff value. After all, we call a cluster insignificant if it has no functional annotation.</p> <p>While functional annotations, backed by the statistical evidence, are good interpretation for a single cluster, they do not have much impact to quantify the overall clustering accuracy. Therefore we employ a measure called clustering score [##UREF##7##22##] to compare two clustering layouts.</p> <p></p> <p>where <italic>n</italic><sub><italic>s </italic></sub>and <italic>n</italic><sub><italic>i </italic></sub>denotes the number of significant and insignificant clusters, respectively and min(p<sub><italic>i</italic></sub>) represents the smallest p-value of a significant cluster. Note that <italic>min(p</italic><sub><italic>i</italic></sub><italic>) </italic>equals to the p-value of functional annotation at the same time. Clustering score is calculated for three different categories of the GO Ontology, molecular function, biological process, and cell component. In Figure ##FIG##0##1## clustering scores are shown for SCAN and CNM. Please refer Additional file ##SUPPL##0##1## for annotation of each cluster.</p> <p>Furthermore, to show how SCAN clearly outperforms CNM, we listed top-10 clusters having the smallest p-values with corresponding GO categories in Table ##TAB##0##1## and Table ##TAB##1##2##. For the category of biological process, SCAN finds clusters with smaller p-values. Also note that p-values of clusters in SCAN are increasing gradually from first to tenth cluster (4.45E-98 to 9.29E-28). In contrast, CNM results start with greater p-value (2.10E-61) and spot clusters with larger size. Recall that the smaller p-value is the better to annotate a cluster with certain function. However, some clusters of CNM with smaller p-values are still hard-to-interpret because of their enormous size, such as cluster 14 having 220 proteins, cluster 12 with 919 proteins, and cluster 48 with 549 proteins.</p> <p>For molecular function, similar to biological process, there is a significant difference between two algorithms in terms of both p-values and size of clusters. While SCAN clusters have p-values between 5.64E-71 and 1.37E-17 and average cluster-size of 44, CNM yields clusters with p-values ranging between 1.71E-26 and 2.52E-09 and average size of 329 (10 to 1408). Size problem for molecular function seems even worse than biological process.</p> <p>In the category of cellular component, group of top-10 clusters starts with cluster 10, p-value 3.67E-66, size of 107. It is good start against SCAN, however, p-values of CNM do not show regular increase as seen in SCAN clusters. Additionally, regarding CNM results, fluctuation in clustering size arises once again and makes the evaluation intricate. Thus, we randomly picked a few clusters and analyzed the accuracy manually.</p> <title>Validation based on manual comparisons</title> <p>To judge the significance of a cluster, we manually analyzed whether the function of each member corresponds to cluster's assigned function from three different GO Ontologies, biological processes, cellular components, and molecular functions. We chose cluster sizes ranging from 10 to 30 members since most functional complexes contain the comparable numbers of protein components.</p> <p>For biological process, SCAN assigned all the anaphase promoting complex proteins (apc1; apc11; apc2; apc4; apc5; apc9; cdc16; cdc23; cdc26; cdc27; doc1; mnd2; swm1) into one cluster. The clustering result is shown in Figure ##FIG##1##2##. In this graph, interactions only for cluster members are shown to keep the network visually readable. Proteins that are members of found cluster are denoted in different color. Although SCAN identified most subunits of the APC/C complex, it missed a few key components such as cdc20 and cdh1. This is due to the multi-valent interactions of these proteins. SCAN assigned these two proteins in the hub category. Unlike SCAN, CNM merged these proteins into a big cluster with 75 members, which also includes proteins involved in translation initiation, ergosterol synthesis, and other cellular processes. SCAN also identified the vacuolar H+- ATPase complex (rav1, rav2, vma10, vph1, etc) and grouped them into a cluster with 16 members. In this cluster, there are three proteins that have not been reported to directly function in the assembly of the vacuolar H+-ATPase. Xdj1p is a chaperone-like protein. Yig1p is involved in anaerobic glycerol production, which may indirectly affect the cytosolic proton homeostasis. Ymr027wp is a protein with unknown function so far. From our clustering results, we predict that xdj1p and ymr027wp are also involved in the assembly of the vacuolar H+-ATPase. Contrary to the SCAN results, CNM grouped these vacuolar H+-ATPase proteins into a huge cluster with 1416 members, which is not insightful for any predictions.</p> <p>For cellular components, SCAN accurately identified the exocyst complex (exo70, exo84, sec3, sec15, etc, please refer Figure ##FIG##2##3##), and the DNA replication preinitiation complex (cdc45, dpb11, mcm10 etc). On the contrary, CNM put the exocyst complex into a group with 551 members and the DNA replication preinitiation complex into a group with 919 members. Although SCAN missed protein Sld2p in the DNA replication preinitiation complex and included two extra proteins (srp101p, srp102p), SCAN predicted a new function for erv2p. Erv2p is an ER lumen protein required for the formation of disulfide bonds. Our clustering result suggests that erv2p helps the proper folding of the proteins required for DNA replication. Both SCAN and CNM detected the peroxisome membrane protein complex (SCAN cluster-176 with 9 members; CNM cluster-19 with 11 members). Please refer Additional file ##SUPPL##1##2## and ##SUPPL##2##3## for detailed clustering results. The two extra proteins (pex3, pex19) in CNM cluster 19 are also members of the peroxisomal membrane complex.</p> <p>For molecular functions, SCAN found translation initiation complex (cluster-105 with 10 members; gcd1, gcd11, ist1, mrf1, etc). The found clustering result is depicted in Figure ##FIG##3##4##. CNM again assigned these proteins into a huge cluster with 1416 members. The function of protein glycosylation is achieved by many proteins in multiple subcellular locations including the lumen of ER and golgi. After glycosylation, the proteins will be transported to their right locations by secretion or other sub-cellular transport systems. SCAN assigned 35 proteins to one cluster. This cluster contains the oligosaccharyltransferase complex proteins (ost1, ost2, ost3, etc) of the ER lumen, the golgi mannosyltransferase complex proteins (mnn9, mnn10, mnn11), and secretion proteins (sec61, sec62, sec63, etc). Grouping these proteins into one cluster emphasizes the potential of applying SCAN in analysis of dynamic biological networks.</p> <p>With regard to assigning proteins with similar functions to a cluster, SCAN out-weighted CNM in 6 out of 7 clusters we analyzed manually. Moreover, smaller size clusters found by SCAN enable us to predict the function of each cluster more accurately.</p>
<title>Results and discussion</title> <title>Protein-Protein Interaction Network</title> <p>Hand-curated databases of PPI in <italic>Saccharomyces cerevisiae </italic>have been studied earlier in the literature [##REF##15048975##16##, ####REF##15374873##17##, ##REF##12089522##18####12089522##18##] and are proven to be invaluable resources for bioinformatics research. For this study, PPI network is downloaded from the <italic>Saccharomyces </italic>Genome Database (SGD) [##UREF##6##19##] on January 21, 2008. After cleaning unrelated interaction, we chose only Affinity Capture-MS and Affinity Capture-Western proteins, which account for 26751 interactions between 4030 proteins.</p> <title>Validation metric based on Gene Ontology</title> <p>The Gene Ontology (GO) database provides controlled vocabularies for the description of the 1) molecular function, 2) biological process, and 3) cellular component of gene products. The ontologies are continuously updated by GO Consortium, and new versions are made available on monthly basis. Of three ontologies, molecular function describes the tasks performed by individual gene products, such as enzyme activator activity and RNA binding; biological process refers broad biological goals, such as chromatin remodeling or mRNA capping; and cellular component covers subcellular structures, locations, and macromolecular complexes, such as intracellular or cytoplasm.</p> <p>The ontologies of GO database are manually created by many scientists. GO database is accepted as ground-truth and used for comparison and validation purposes. Thus, in our analysis we used GO ontologies to test if the resulting clusters are related to any known functional modules. Simply relying on number of proteins that have same annotation will be misleading since distributions of genes among various GO categories are not uniform.</p> <p>P-value is the probability that a given set of proteins is enriched by a given functional group by random chance. It is usually used as a criteria to assign each cluster to a known function [##REF##15180928##20##,##REF##14960460##21##]. The smaller the p-value, the more evidence the clustering is not random. In terms of GO annotations, a group of genes with smaller p-value is more significant than the one with a higher p-value.</p> <p>Consider a cluster with size n, m proteins sharing a particular annotation <italic>A</italic>. Also assume that there are <italic>N </italic>proteins in the PPI database, and <italic>M </italic>of them are known to have annotation <italic>A</italic>. Given that, the probability of observing m or more proteins that are annotated with <italic>A </italic>out of <italic>n </italic>protein is:</p> <p></p> <p>Based on above formulation, p-value is calculated for each of three ontologies. However we cannot find always three p-values for a cluster since it is not guaranteed that each cluster has at least one member associated with each of ontology. For instance, protein trm2 does not have any association for cellular component, whereas protein mms1 has two entries which are both from biological process ontology. Assuming a cluster has only two members, trm2 and mms1, we cannot calculate a p-value of the cluster for cellular component ontology. Therefore, it would be correct to claim that we calculate at least one p-value for each cluster. In the case of multiple annotations from same ontology, the one with the smaller p-value is assigned to the cluster as functional annotation. That being said, the p-value without any restriction is not enough to label clusters as significant. Hence we use the recommended cutoff value of <italic>0.05 </italic>in order to select significant clusters within each ontology.</p> <p>Let <italic>C </italic>be a cluster including k annotations, and <italic>A</italic><sup><italic>C </italic></sup>denote proteins having annotation <italic>A </italic>in cluster <italic>C</italic>. The cluster  is labeled with a functional annotation , 1 ≤ <italic>t </italic>≤ <italic>k</italic>, iff p-value of  is the smallest one among others in cluster <italic>C </italic>and less than cutoff value. After all, we call a cluster insignificant if it has no functional annotation.</p> <p>While functional annotations, backed by the statistical evidence, are good interpretation for a single cluster, they do not have much impact to quantify the overall clustering accuracy. Therefore we employ a measure called clustering score [##UREF##7##22##] to compare two clustering layouts.</p> <p></p> <p>where <italic>n</italic><sub><italic>s </italic></sub>and <italic>n</italic><sub><italic>i </italic></sub>denotes the number of significant and insignificant clusters, respectively and min(p<sub><italic>i</italic></sub>) represents the smallest p-value of a significant cluster. Note that <italic>min(p</italic><sub><italic>i</italic></sub><italic>) </italic>equals to the p-value of functional annotation at the same time. Clustering score is calculated for three different categories of the GO Ontology, molecular function, biological process, and cell component. In Figure ##FIG##0##1## clustering scores are shown for SCAN and CNM. Please refer Additional file ##SUPPL##0##1## for annotation of each cluster.</p> <p>Furthermore, to show how SCAN clearly outperforms CNM, we listed top-10 clusters having the smallest p-values with corresponding GO categories in Table ##TAB##0##1## and Table ##TAB##1##2##. For the category of biological process, SCAN finds clusters with smaller p-values. Also note that p-values of clusters in SCAN are increasing gradually from first to tenth cluster (4.45E-98 to 9.29E-28). In contrast, CNM results start with greater p-value (2.10E-61) and spot clusters with larger size. Recall that the smaller p-value is the better to annotate a cluster with certain function. However, some clusters of CNM with smaller p-values are still hard-to-interpret because of their enormous size, such as cluster 14 having 220 proteins, cluster 12 with 919 proteins, and cluster 48 with 549 proteins.</p> <p>For molecular function, similar to biological process, there is a significant difference between two algorithms in terms of both p-values and size of clusters. While SCAN clusters have p-values between 5.64E-71 and 1.37E-17 and average cluster-size of 44, CNM yields clusters with p-values ranging between 1.71E-26 and 2.52E-09 and average size of 329 (10 to 1408). Size problem for molecular function seems even worse than biological process.</p> <p>In the category of cellular component, group of top-10 clusters starts with cluster 10, p-value 3.67E-66, size of 107. It is good start against SCAN, however, p-values of CNM do not show regular increase as seen in SCAN clusters. Additionally, regarding CNM results, fluctuation in clustering size arises once again and makes the evaluation intricate. Thus, we randomly picked a few clusters and analyzed the accuracy manually.</p> <title>Validation based on manual comparisons</title> <p>To judge the significance of a cluster, we manually analyzed whether the function of each member corresponds to cluster's assigned function from three different GO Ontologies, biological processes, cellular components, and molecular functions. We chose cluster sizes ranging from 10 to 30 members since most functional complexes contain the comparable numbers of protein components.</p> <p>For biological process, SCAN assigned all the anaphase promoting complex proteins (apc1; apc11; apc2; apc4; apc5; apc9; cdc16; cdc23; cdc26; cdc27; doc1; mnd2; swm1) into one cluster. The clustering result is shown in Figure ##FIG##1##2##. In this graph, interactions only for cluster members are shown to keep the network visually readable. Proteins that are members of found cluster are denoted in different color. Although SCAN identified most subunits of the APC/C complex, it missed a few key components such as cdc20 and cdh1. This is due to the multi-valent interactions of these proteins. SCAN assigned these two proteins in the hub category. Unlike SCAN, CNM merged these proteins into a big cluster with 75 members, which also includes proteins involved in translation initiation, ergosterol synthesis, and other cellular processes. SCAN also identified the vacuolar H+- ATPase complex (rav1, rav2, vma10, vph1, etc) and grouped them into a cluster with 16 members. In this cluster, there are three proteins that have not been reported to directly function in the assembly of the vacuolar H+-ATPase. Xdj1p is a chaperone-like protein. Yig1p is involved in anaerobic glycerol production, which may indirectly affect the cytosolic proton homeostasis. Ymr027wp is a protein with unknown function so far. From our clustering results, we predict that xdj1p and ymr027wp are also involved in the assembly of the vacuolar H+-ATPase. Contrary to the SCAN results, CNM grouped these vacuolar H+-ATPase proteins into a huge cluster with 1416 members, which is not insightful for any predictions.</p> <p>For cellular components, SCAN accurately identified the exocyst complex (exo70, exo84, sec3, sec15, etc, please refer Figure ##FIG##2##3##), and the DNA replication preinitiation complex (cdc45, dpb11, mcm10 etc). On the contrary, CNM put the exocyst complex into a group with 551 members and the DNA replication preinitiation complex into a group with 919 members. Although SCAN missed protein Sld2p in the DNA replication preinitiation complex and included two extra proteins (srp101p, srp102p), SCAN predicted a new function for erv2p. Erv2p is an ER lumen protein required for the formation of disulfide bonds. Our clustering result suggests that erv2p helps the proper folding of the proteins required for DNA replication. Both SCAN and CNM detected the peroxisome membrane protein complex (SCAN cluster-176 with 9 members; CNM cluster-19 with 11 members). Please refer Additional file ##SUPPL##1##2## and ##SUPPL##2##3## for detailed clustering results. The two extra proteins (pex3, pex19) in CNM cluster 19 are also members of the peroxisomal membrane complex.</p> <p>For molecular functions, SCAN found translation initiation complex (cluster-105 with 10 members; gcd1, gcd11, ist1, mrf1, etc). The found clustering result is depicted in Figure ##FIG##3##4##. CNM again assigned these proteins into a huge cluster with 1416 members. The function of protein glycosylation is achieved by many proteins in multiple subcellular locations including the lumen of ER and golgi. After glycosylation, the proteins will be transported to their right locations by secretion or other sub-cellular transport systems. SCAN assigned 35 proteins to one cluster. This cluster contains the oligosaccharyltransferase complex proteins (ost1, ost2, ost3, etc) of the ER lumen, the golgi mannosyltransferase complex proteins (mnn9, mnn10, mnn11), and secretion proteins (sec61, sec62, sec63, etc). Grouping these proteins into one cluster emphasizes the potential of applying SCAN in analysis of dynamic biological networks.</p> <p>With regard to assigning proteins with similar functions to a cluster, SCAN out-weighted CNM in 6 out of 7 clusters we analyzed manually. Moreover, smaller size clusters found by SCAN enable us to predict the function of each cluster more accurately.</p>
<title>Conclusion and research directions</title> <p>We devised a new methodology called SCAN (Structural Clustering Algorithm for Networks) that can efficiently find clusters or functional modules in complex biological networks as well as hubs and outliers [##UREF##5##15##]. We showed the effectiveness of our methodology using the budding yeast (Saccharomyces cerevisiae) protein-protein interaction network.</p> <p>To validate our clustering results, we compared our clusters with the known functions of each protein. Additionally, we compared our algorithm with well-known modularity based clustering algorithm, CNM [##UREF##2##12##]. We successfully showed that SCAN can detect functional groups that are annotated with GO terms. Top-10 clusters with minimum p-values demonstrated that clusters of the newly proposed algorithm are more accurate than those of CNM. Manual interpretations of functional groups found by the new algorithm also showed superior performance over CNM.</p> <p>Furthermore, a computational complexity analysis demonstrated a linear running-time of the algorithm, which makes it, to our knowledge, the fastest approach for finding clusters in networks.</p>
<p>This is an open access article distributed under the terms of the Creative Commons Attribution License (<ext-link ext-link-type="uri" xlink:href="http://creativecommons.org/licenses/by/2.0"/>), which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.</p> <title>Background</title> <p>Biological systems can be modeled as complex network systems with many interactions between the components. These interactions give rise to the function and behavior of that system. For example, the protein-protein interaction network is the physical basis of multiple cellular functions. One goal of emerging systems biology is to analyze very large complex biological networks such as protein-protein interaction networks, metabolic networks, and regulatory networks to identify functional modules and assign functions to certain components of the system. Network modules do not occur by chance, so identification of modules is likely to capture the biologically meaningful interactions in large-scale PPI data. Unfortunately, existing computer-based clustering methods developed to find those modules are either not so accurate or too slow.</p> <title>Results</title> <p>We devised a new methodology called SCAN (Structural Clustering Algorithm for Networks) that can efficiently find clusters or functional modules in complex biological networks as well as hubs and outliers. More specifically, we demonstrated that we can find functional modules in complex networks and classify nodes into various roles based on their structures. In this study, we showed the effectiveness of our methodology using the budding yeast (Saccharomyces cerevisiae) protein-protein interaction network. To validate our clustering results, we compared our clusters with the known functions of each protein. Our predicted functional modules achieved very high purity comparing with state-of-the-art approaches. Additionally the theoretical and empirical analysis demonstrated a linear running-time of the algorithm, which is the fastest approach for networks.</p> <title>Conclusion</title> <p>We compare our algorithm with well-known modularity based clustering algorithm CNM. We successfully detect functional groups that are annotated with putative GO terms. Top-10 clusters with minimum p-value theoretically prove that newly proposed algorithm partitions network more accurately then CNM. Furthermore, manual interpretations of functional groups found by SCAN show superior performance over CNM.</p>
<title>Competing interests</title> <p>The authors declare that they have no competing interests.</p> <title>Authors' contributions</title> <p>XX and FT have conceived the study. XX is the inventor of the algorithm SCAN used for this study. NY and MM developed the software and performed data analysis, algorithm testing, and benchmarking. FT interpreted clustering results found by the above mentioned algorithms. MM, FT, XX and NY wrote the manuscript.</p> <title>Supplementary Material</title>
<title>Acknowledgements</title> <p>This publication was made possible by NIH Grant # P20 RR-16460 from the IDeA Networks of Biomedical Research Excellence (INBRE) Program of the National Center for Research Resources.</p> <p>This article has been published as part of <italic>BMC Bioinformatics </italic>Volume 9 Supplement 9, 2008: Proceedings of the Fifth Annual MCBIOS Conference. Systems Biology: Bridging the Omics. The full contents of the supplement are available online at <ext-link ext-link-type="uri" xlink:href="http://www.biomedcentral.com/1471-2105/9?issue=S9"/></p>
<fig position="float" id="F1"><label>Figure 1</label><caption><p>Comparison of clustering scores for three GO categories.</p></caption></fig> <fig position="float" id="F2"><label>Figure 2</label><caption><p>Cluster of anaphase promoting complex proteins.</p></caption></fig> <fig position="float" id="F3"><label>Figure 3</label><caption><p>Cluster of exocyst complex.</p></caption></fig> <fig position="float" id="F4"><label>Figure 4</label><caption><p>Cluster of translation initiation complex.</p></caption></fig> <fig position="float" id="F5"><label>Figure 5</label><caption><p>A small network demonstrating two clusters, a hub (vertex 6), and an outlier (vertex 13).</p></caption></fig> <fig position="float" id="F6"><label>Figure 6</label><caption><p>A toy network demonstrating structural reachability. Similarities between vertices are given.</p></caption></fig> <fig position="float" id="F7"><label>Figure 7</label><caption><p>Pseudocode of SCAN Algorithm.</p></caption></fig> <fig position="float" id="F8"><label>Figure 8</label><caption><p>Graphic diagram of the main body of algorithm SCAN.</p></caption></fig> <fig position="float" id="F9"><label>Figure 9</label><caption><p>Graphic diagram of Find Hubs and Outliers, a subprocedure of algorithm SCAN.</p></caption></fig>
<table-wrap position="float" id="T1"><label>Table 1</label><caption><p>Top-10 SCAN clusters with highest p-values</p></caption><table frame="hsides" rules="groups"><thead><tr><td/><td align="center"><bold>Cluster ID</bold></td><td align="center"><bold>P -value</bold></td><td align="center"><bold>GO Term</bold></td><td align="center"><bold>Term Freq. in Network</bold></td><td align="center"><bold>Term Freq. in Cluster</bold></td><td align="center"><bold>Cluster Size</bold></td></tr></thead><tbody><tr><td align="center"><bold>Biological Process</bold></td><td align="center">1</td><td align="center">4.45E-98</td><td align="left">nuclear mrna splicing, via spliceosome</td><td align="center">66</td><td align="center">58</td><td align="center">88</td></tr><tr><td/><td align="center">89</td><td align="center">1.01E-65</td><td align="left">translation</td><td align="center">252</td><td align="center">58</td><td align="center">64</td></tr><tr><td/><td align="center">5</td><td align="center">1.16E-52</td><td align="left">ubiquitin-dependent protein catabolic process</td><td align="center">60</td><td align="center">34</td><td align="center">56</td></tr><tr><td/><td align="center">2</td><td align="center">9.04E-40</td><td align="left">transcription from rna polymerase ii promoter</td><td align="center">50</td><td align="center">41</td><td align="center">288</td></tr><tr><td/><td align="center">15</td><td align="center">8.58E-38</td><td align="left">anaphase-promoting complex-dependent proteasomal ubiquitin-dependent protein catabolic process</td><td align="center">13</td><td align="center">13</td><td align="center">13</td></tr><tr><td/><td align="center">22</td><td align="center">1.36E-30</td><td align="left">chromatin remodeling</td><td align="center">46</td><td align="center">20</td><td align="center">40</td></tr><tr><td/><td align="center">192</td><td align="center">5.46E-29</td><td align="left">vacuolar acidification</td><td align="center">23</td><td align="center">13</td><td align="center">16</td></tr><tr><td/><td align="center">13</td><td align="center">6.36E-29</td><td align="left">chromosome segregation</td><td align="center">36</td><td align="center">16</td><td align="center">25</td></tr><tr><td/><td align="center">24</td><td align="center">2.14E-28</td><td align="left">regulation of microtubule polymerization or depolymerization</td><td align="center">10</td><td align="center">10</td><td align="center">12</td></tr><tr><td/><td align="center">30</td><td align="center">9.29E-28</td><td align="left">regulation of cell growth</td><td align="center">10</td><td align="center">10</td><td align="center">13</td></tr><tr><td colspan="7"><hr/></td></tr><tr><td align="center"><bold>Cellular Components</bold></td><td align="center">7</td><td align="center">6.81E-53</td><td align="left">cytosolic large ribosomal subunit</td><td align="center">80</td><td align="center">55</td><td align="center">222</td></tr><tr><td/><td align="center">89</td><td align="center">1.50E-51</td><td align="left">mitochondrial small ribosomal subunit</td><td align="center">33</td><td align="center">29</td><td align="center">64</td></tr><tr><td/><td align="center">1</td><td align="center">2.53E-41</td><td align="left">u4/u6 × u5 tri-snrnp complex</td><td align="center">27</td><td align="center">25</td><td align="center">88</td></tr><tr><td/><td align="center">15</td><td align="center">9.01E-36</td><td align="left">anaphase-promoting complex</td><td align="center">15</td><td align="center">13</td><td align="center">13</td></tr><tr><td/><td align="center">22</td><td align="center">7.15E-31</td><td align="left">rsc complex</td><td align="center">16</td><td align="center">15</td><td align="center">40</td></tr><tr><td/><td align="center">24</td><td align="center">2.14E-28</td><td align="left">dash complex</td><td align="center">10</td><td align="center">10</td><td align="center">12</td></tr><tr><td/><td align="center">38</td><td align="center">2.14E-28</td><td align="left">trapp complex</td><td align="center">10</td><td align="center">10</td><td align="center">12</td></tr><tr><td/><td align="center">185</td><td align="center">7.18E-26</td><td align="left">ribonuclease mrp complex</td><td align="center">9</td><td align="center">9</td><td align="center">11</td></tr><tr><td/><td align="center">155</td><td align="center">5.84E-25</td><td align="left">smc5-smc6 complex</td><td align="center">8</td><td align="center">8</td><td align="center">8</td></tr><tr><td/><td align="center">53</td><td align="center">4.93E-24</td><td align="left">dna replication preinitiation complex</td><td align="center">21</td><td align="center">12</td><td align="center">22</td></tr><tr><td colspan="7"><hr/></td></tr><tr><td align="center"><bold>Molecular Functions</bold></td><td align="center">89</td><td align="center">5.64E-71</td><td align="left">structural constituent of ribosome</td><td align="center">210</td><td align="center">58</td><td align="center">64</td></tr><tr><td/><td align="center">5</td><td align="center">2.75E-45</td><td align="left">endopeptidase activity</td><td align="center">26</td><td align="center">24</td><td align="center">56</td></tr><tr><td/><td align="center">1</td><td align="center">7.12E-45</td><td align="left">contributes_to rna splicing factor activity, transesterification mechanism</td><td align="center">29</td><td align="center">27</td><td align="center">88</td></tr><tr><td/><td align="center">37</td><td align="center">6.44E-41</td><td align="left">snap receptor activity</td><td align="center">24</td><td align="center">23</td><td align="center">74</td></tr><tr><td/><td align="center">192</td><td align="center">4.65E-28</td><td align="left">hydrogen ion transporting atpase activity, rotational mechanism</td><td align="center">12</td><td align="center">11</td><td align="center">16</td></tr><tr><td/><td align="center">185</td><td align="center">7.18E-26</td><td align="left">contributes_to ribonuclease mrp activity</td><td align="center">9</td><td align="center">9</td><td align="center">11</td></tr><tr><td/><td align="center">22</td><td align="center">6.60E-23</td><td align="left">contributes_to dna-dependent atpase activity</td><td align="center">15</td><td align="center">12</td><td align="center">40</td></tr><tr><td/><td align="center">34</td><td align="center">1.30E-22</td><td align="left">protein transporter activity</td><td align="center">24</td><td align="center">14</td><td align="center">46</td></tr><tr><td/><td align="center">15</td><td align="center">2.25E-18</td><td align="left">ubiquitin-protein ligase activity</td><td align="center">44</td><td align="center">10</td><td align="center">13</td></tr><tr><td/><td align="center">8</td><td align="center">1.37E-17</td><td align="left">dolichyl-diphosphooligosaccharide-protein glycotransferase activity</td><td align="center">8</td><td align="center">8</td><td align="center">35</td></tr></tbody></table></table-wrap> <table-wrap position="float" id="T2"><label>Table 2</label><caption><p>Top-10 CNM clusters with highest p-values</p></caption><table frame="hsides" rules="groups"><thead><tr><td/><td align="center"><bold>Cluster ID</bold></td><td align="center"><bold>P -value</bold></td><td align="center"><bold>GO Term</bold></td><td align="center"><bold>Term Freq. in Network</bold></td><td align="center"><bold>Term Freq. in Cluster</bold></td><td align="center"><bold>Cluster Size</bold></td></tr></thead><tbody><tr><td align="center"><bold>Biological Process</bold></td><td align="center">15</td><td align="center">2.10E-61</td><td align="left">nuclear mrna splicing, via spliceosome</td><td align="center">66</td><td align="center">55</td><td align="center">220</td></tr><tr><td/><td align="center">17</td><td align="center">5.00E-40</td><td align="left">transposition, rna-mediated</td><td align="center">33</td><td align="center">19</td><td align="center">22</td></tr><tr><td/><td align="center">13</td><td align="center">5.11E-31</td><td align="left">rna elongation from rna polymerase ii promoter</td><td align="center">53</td><td align="center">51</td><td align="center">919</td></tr><tr><td/><td align="center">49</td><td align="center">4.30E-25</td><td align="left">ribosomal large subunit assembly and maintenance</td><td align="center">39</td><td align="center">34</td><td align="center">549</td></tr><tr><td/><td align="center">16</td><td align="center">1.09E-23</td><td align="left">anaphase-promoting complex-dependent proteasomal ubiquitin-dependent protein catabolic process</td><td align="center">13</td><td align="center">13</td><td align="center">75</td></tr><tr><td/><td align="center">58</td><td align="center">2.78E-22</td><td align="left">microtubule nucleation</td><td align="center">22</td><td align="center">16</td><td align="center">98</td></tr><tr><td/><td align="center">53</td><td align="center">7.86E-20</td><td align="left">trna processing</td><td align="center">14</td><td align="center">8</td><td align="center">10</td></tr><tr><td/><td align="center">45</td><td align="center">8.35E-18</td><td align="left">negative regulation of gluconeogenesis</td><td align="center">9</td><td align="center">7</td><td align="center">12</td></tr><tr><td/><td align="center">56</td><td align="center">3.15E-17</td><td align="left">ubiquitin-dependent protein catabolic process via the multivesicular body pathway</td><td align="center">13</td><td align="center">11</td><td align="center">91</td></tr><tr><td/><td align="center">63</td><td align="center">1.73E-13</td><td align="left">mrna polyadenylation</td><td align="center">17</td><td align="center">13</td><td align="center">241</td></tr><tr><td colspan="7"><hr/></td></tr><tr><td align="center"><bold>Cellular Components</bold></td><td align="center">11</td><td align="center">3.67E-66</td><td align="left">mitochondrial large ribosomal subunit</td><td align="center">43</td><td align="center">41</td><td align="center">107</td></tr><tr><td/><td align="center">49</td><td align="center">4.72E-42</td><td align="left">cytosolic large ribosomal subunit</td><td align="center">80</td><td align="center">64</td><td align="center">549</td></tr><tr><td/><td align="center">17</td><td align="center">5.00E-40</td><td align="left">retrotransposon nucleocapsid</td><td align="center">33</td><td align="center">19</td><td align="center">22</td></tr><tr><td/><td align="center">58</td><td align="center">1.28E-30</td><td align="left">condensed nuclear chromosome kinetochore</td><td align="center">30</td><td align="center">22</td><td align="center">98</td></tr><tr><td/><td align="center">16</td><td align="center">2.48E-24</td><td align="left">anaphase-promoting complex</td><td align="center">15</td><td align="center">14</td><td align="center">75</td></tr><tr><td/><td align="center">20</td><td align="center">1.58E-23</td><td align="left">peroxisomal membrane</td><td align="center">12</td><td align="center">9</td><td align="center">11</td></tr><tr><td/><td align="center">37</td><td align="center">9.63E-23</td><td align="left">smc5-smc6 complex</td><td align="center">8</td><td align="center">8</td><td align="center">11</td></tr><tr><td/><td align="center">53</td><td align="center">2.36E-22</td><td align="left">ribonuclease mrp complex</td><td align="center">9</td><td align="center">8</td><td align="center">10</td></tr><tr><td/><td align="center">63</td><td align="center">5.21E-18</td><td align="left">mrna cleavage and polyadenylation specificity factor complex</td><td align="center">14</td><td align="center">14</td><td align="center">241</td></tr><tr><td/><td align="center">65</td><td align="center">3.13E-15</td><td align="left">alpha-1,6-mannosyltransferase complex</td><td align="center">6</td><td align="center">6</td><td align="center">18</td></tr><tr><td colspan="7"><hr/></td></tr><tr><td align="center"><bold>Molecular Functions</bold></td><td align="center">17</td><td align="center">1.71E-26</td><td align="left">rna binding</td><td align="center">130</td><td align="center">19</td><td align="center">22</td></tr><tr><td/><td align="center">58</td><td align="center">2.34E-24</td><td align="left">structural constituent of cytoskeleton</td><td align="center">47</td><td align="center">22</td><td align="center">98</td></tr><tr><td/><td align="center">53</td><td align="center">2.36E-22</td><td align="left">contributes_to ribonuclease mrp activity</td><td align="center">9</td><td align="center">8</td><td align="center">10</td></tr><tr><td/><td align="center">13</td><td align="center">9.16E-19</td><td align="left">dna-directed rna polymerase activity</td><td align="center">31</td><td align="center">30</td><td align="center">919</td></tr><tr><td/><td align="center">49</td><td align="center">6.52E-17</td><td align="left">snorna binding</td><td align="center">21</td><td align="center">20</td><td align="center">549</td></tr><tr><td/><td align="center">48</td><td align="center">5.97E-13</td><td align="left">contributes_to protein transporter activity</td><td align="center">7</td><td align="center">5</td><td align="center">10</td></tr><tr><td/><td align="center">30</td><td align="center">1.24E-10</td><td align="left">nad-independent histone deacetylase activity</td><td align="center">4</td><td align="center">4</td><td align="center">15</td></tr><tr><td/><td align="center">65</td><td align="center">2.79E-10</td><td align="left">contributes_to alpha-1,6-mannosyltransferase activity</td><td align="center">4</td><td align="center">4</td><td align="center">18</td></tr><tr><td/><td align="center">33</td><td align="center">1.34E-09</td><td align="left">endopeptidase activity</td><td align="center">26</td><td align="center">24</td><td align="center">1408</td></tr><tr><td/><td align="center">63</td><td align="center">2.52E-09</td><td align="left">contributes_to histone lysine n-methyltransferase activity (h3-k4 specific)</td><td align="center">7</td><td align="center">7</td><td align="center">241</td></tr></tbody></table></table-wrap>
<disp-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M1" name="1471-2105-9-S9-S19-i1" overflow="scroll">
                     <mml:semantics>
                        <mml:mrow>
                           <mml:mi>p</mml:mi>
                           <mml:mo>−</mml:mo>
                           <mml:mi>v</mml:mi>
                           <mml:mi>a</mml:mi>
                           <mml:mi>l</mml:mi>
                           <mml:mi>u</mml:mi>
                           <mml:mi>e</mml:mi>
                           <mml:mo>=</mml:mo>
                           <mml:mfrac>
                              <mml:mrow>
                                 <mml:mrow>
                                    <mml:mo>(</mml:mo>
                                    <mml:mrow>
                                       <mml:mtable>
                                          <mml:mtr>
                                             <mml:mtd>
                                                <mml:mi>M</mml:mi>
                                             </mml:mtd>
                                          </mml:mtr>
                                          <mml:mtr>
                                             <mml:mtd>
                                                <mml:mi>i</mml:mi>
                                             </mml:mtd>
                                          </mml:mtr>
                                       </mml:mtable>
                                    </mml:mrow>
                                    <mml:mo>)</mml:mo>
                                 </mml:mrow>
                                 <mml:mrow>
                                    <mml:mo>(</mml:mo>
                                    <mml:mrow>
                                       <mml:mtable>
                                          <mml:mtr>
                                             <mml:mtd>
                                                <mml:mrow>
                                                   <mml:mi>N</mml:mi>
                                                   <mml:mo>−</mml:mo>
                                                   <mml:mi>M</mml:mi>
                                                </mml:mrow>
                                             </mml:mtd>
                                          </mml:mtr>
                                          <mml:mtr>
                                             <mml:mtd>
                                                <mml:mrow>
                                                   <mml:mi>n</mml:mi>
                                                   <mml:mo>−</mml:mo>
                                                   <mml:mi>i</mml:mi>
                                                </mml:mrow>
                                             </mml:mtd>
                                          </mml:mtr>
                                       </mml:mtable>
                                    </mml:mrow>
                                    <mml:mo>)</mml:mo>
                                 </mml:mrow>
                              </mml:mrow>
                              <mml:mrow>
                                 <mml:mrow>
                                    <mml:mo>(</mml:mo>
                                    <mml:mrow>
                                       <mml:mtable>
                                          <mml:mtr>
                                             <mml:mtd>
                                                <mml:mi>N</mml:mi>
                                             </mml:mtd>
                                          </mml:mtr>
                                          <mml:mtr>
                                             <mml:mtd>
                                                <mml:mi>n</mml:mi>
                                             </mml:mtd>
                                          </mml:mtr>
                                       </mml:mtable>
                                    </mml:mrow>
                                    <mml:mo>)</mml:mo>
                                 </mml:mrow>
                              </mml:mrow>
                           </mml:mfrac>
                        </mml:mrow>
                        
                     </mml:semantics>
                  </mml:math></disp-formula> <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M2" name="1471-2105-9-S9-S19-i2" overflow="scroll"><mml:semantics><mml:mrow><mml:mi>C</mml:mi><mml:mo>=</mml:mo><mml:mo>{</mml:mo><mml:msubsup><mml:mi>A</mml:mi><mml:mn>1</mml:mn><mml:mi>C</mml:mi></mml:msubsup><mml:mo>∩</mml:mo><mml:msubsup><mml:mi>A</mml:mi><mml:mn>2</mml:mn><mml:mi>C</mml:mi></mml:msubsup><mml:mo>∩</mml:mo><mml:mn>...</mml:mn><mml:mo>∩</mml:mo><mml:msubsup><mml:mi>A</mml:mi><mml:mi>k</mml:mi><mml:mi>C</mml:mi></mml:msubsup><mml:mo>}</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M3" name="1471-2105-9-S9-S19-i3" overflow="scroll"><mml:semantics><mml:mrow><mml:msubsup><mml:mi>A</mml:mi><mml:mi>t</mml:mi><mml:mi>C</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> <inline-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M4" name="1471-2105-9-S9-S19-i3" overflow="scroll"><mml:semantics><mml:mrow><mml:msubsup><mml:mi>A</mml:mi><mml:mi>t</mml:mi><mml:mi>C</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> <disp-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M5" name="1471-2105-9-S9-S19-i4" overflow="scroll">
                     <mml:semantics>
                        <mml:mrow>
                           <mml:mi>C</mml:mi>
                           <mml:mi>l</mml:mi>
                           <mml:mi>u</mml:mi>
                           <mml:mi>s</mml:mi>
                           <mml:mi>t</mml:mi>
                           <mml:mi>e</mml:mi>
                           <mml:mi>r</mml:mi>
                           <mml:mi>i</mml:mi>
                           <mml:mi>n</mml:mi>
                           <mml:mi>g</mml:mi>
                           <mml:mtext> </mml:mtext>
                           <mml:mi>S</mml:mi>
                           <mml:mi>c</mml:mi>
                           <mml:mi>o</mml:mi>
                           <mml:mi>r</mml:mi>
                           <mml:mi>e</mml:mi>
                           <mml:mo>=</mml:mo>
                           <mml:mn>1</mml:mn>
                           <mml:mo>−</mml:mo>
                           <mml:mfrac>
                              <mml:mrow>
                                 <mml:mstyle displaystyle="true">
                                    <mml:munderover>
                                       <mml:mo>∑</mml:mo>
                                       <mml:mrow>
                                          <mml:mi>i</mml:mi>
                                          <mml:mo>=</mml:mo>
                                          <mml:mn>1</mml:mn>
                                       </mml:mrow>
                                       <mml:mrow>
                                          <mml:msub>
                                             <mml:mi>n</mml:mi>
                                             <mml:mi>s</mml:mi>
                                          </mml:msub>
                                       </mml:mrow>
                                    </mml:munderover>
                                    <mml:mrow>
                                       <mml:mi>min</mml:mi>
                                       <mml:mo>⁡</mml:mo>
                                       <mml:mo stretchy="false">(</mml:mo>
                                       <mml:msub>
                                          <mml:mi>p</mml:mi>
                                          <mml:mi>i</mml:mi>
                                       </mml:msub>
                                       <mml:mo stretchy="false">)</mml:mo>
                                    </mml:mrow>
                                 </mml:mstyle>
                                 <mml:mo>+</mml:mo>
                                 <mml:mo stretchy="false">(</mml:mo>
                                 <mml:msub>
                                    <mml:mi>n</mml:mi>
                                    <mml:mi>i</mml:mi>
                                 </mml:msub>
                                 <mml:mo>*</mml:mo>
                                 <mml:mi>c</mml:mi>
                                 <mml:mi>u</mml:mi>
                                 <mml:mi>t</mml:mi>
                                 <mml:mi>o</mml:mi>
                                 <mml:mi>f</mml:mi>
                                 <mml:mi>f</mml:mi>
                                 <mml:mo stretchy="false">)</mml:mo>
                              </mml:mrow>
                              <mml:mrow>
                                 <mml:mo stretchy="false">(</mml:mo>
                                 <mml:msub>
                                    <mml:mi>n</mml:mi>
                                    <mml:mi>i</mml:mi>
                                 </mml:msub>
                                 <mml:mo>+</mml:mo>
                                 <mml:msub>
                                    <mml:mi>n</mml:mi>
                                    <mml:mi>s</mml:mi>
                                 </mml:msub>
                                 <mml:mo stretchy="false">)</mml:mo>
                                 <mml:mo>*</mml:mo>
                                 <mml:mi>c</mml:mi>
                                 <mml:mi>u</mml:mi>
                                 <mml:mi>t</mml:mi>
                                 <mml:mi>o</mml:mi>
                                 <mml:mi>f</mml:mi>
                                 <mml:mi>f</mml:mi>
                              </mml:mrow>
                           </mml:mfrac>
                           <mml:mo>,</mml:mo>
                        </mml:mrow>
                        
                     </mml:semantics>
                  </mml:math></disp-formula> <disp-formula><italic>Γ </italic><italic>(v) = {w ∈ V | (v, w) ∈ E} ∪ {v}</italic></disp-formula> <disp-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M6" name="1471-2105-9-S9-S19-i5" overflow="scroll">
                        <mml:semantics>
                           <mml:mrow>
                              <mml:mi>σ</mml:mi>
                              <mml:mo stretchy="false">(</mml:mo>
                              <mml:mi>v</mml:mi>
                              <mml:mo>,</mml:mo>
                              <mml:mi>w</mml:mi>
                              <mml:mo stretchy="false">)</mml:mo>
                              <mml:mo>=</mml:mo>
                              <mml:mfrac>
                                 <mml:mrow>
                                    <mml:mo>|</mml:mo>
                                    <mml:mi>Γ</mml:mi>
                                    <mml:mo stretchy="false">(</mml:mo>
                                    <mml:mi>v</mml:mi>
                                    <mml:mo stretchy="false">)</mml:mo>
                                    <mml:mo>∩</mml:mo>
                                    <mml:mi>Γ</mml:mi>
                                    <mml:mo stretchy="false">(</mml:mo>
                                    <mml:mi>w</mml:mi>
                                    <mml:mo stretchy="false">)</mml:mo>
                                    <mml:mo>|</mml:mo>
                                 </mml:mrow>
                                 <mml:mrow>
                                    <mml:msqrt>
                                       <mml:mrow>
                                          <mml:mo>|</mml:mo>
                                          <mml:mi>Γ</mml:mi>
                                          <mml:mo stretchy="false">(</mml:mo>
                                          <mml:mi>v</mml:mi>
                                          <mml:mo stretchy="false">)</mml:mo>
                                          <mml:mo>|</mml:mo>
                                          <mml:mo>|</mml:mo>
                                          <mml:mi>Γ</mml:mi>
                                          <mml:mo stretchy="false">(</mml:mo>
                                          <mml:mi>w</mml:mi>
                                          <mml:mo stretchy="false">)</mml:mo>
                                          <mml:mo>|</mml:mo>
                                       </mml:mrow>
                                    </mml:msqrt>
                                 </mml:mrow>
                              </mml:mfrac>
                           </mml:mrow>
                           
                        </mml:semantics>
                     </mml:math></disp-formula> <disp-formula><italic>N</italic><sub><italic>ε </italic></sub>(<italic>v</italic>) = {<italic>w </italic>∈ <italic>Γ </italic>(<italic>v</italic>)|<italic>σ </italic>(<italic>v</italic>, <italic>w</italic>) ≥ <italic>ε</italic>}</disp-formula> <disp-formula><mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" id="M7" name="1471-2105-9-S9-S19-i6" overflow="scroll">
                     <mml:semantics>
                        <mml:mrow>
                           <mml:mi>p</mml:mi>
                           <mml:mo stretchy="false">(</mml:mo>
                           <mml:mi>k</mml:mi>
                           <mml:mo stretchy="false">)</mml:mo>
                           <mml:mo>=</mml:mo>
                           <mml:mrow>
                              <mml:mo>(</mml:mo>
                              <mml:mrow>
                                 <mml:mtable>
                                    <mml:mtr>
                                       <mml:mtd>
                                          <mml:mi>n</mml:mi>
                                       </mml:mtd>
                                    </mml:mtr>
                                    <mml:mtr>
                                       <mml:mtd>
                                          <mml:mi>k</mml:mi>
                                       </mml:mtd>
                                    </mml:mtr>
                                 </mml:mtable>
                              </mml:mrow>
                              <mml:mo>)</mml:mo>
                           </mml:mrow>
                           <mml:msup>
                              <mml:mi>p</mml:mi>
                              <mml:mi>k</mml:mi>
                           </mml:msup>
                           <mml:msup>
                              <mml:mrow>
                                 <mml:mo stretchy="false">(</mml:mo>
                                 <mml:mn>1</mml:mn>
                                 <mml:mo>−</mml:mo>
                                 <mml:mi>p</mml:mi>
                                 <mml:mo stretchy="false">)</mml:mo>
                              </mml:mrow>
                              <mml:mrow>
                                 <mml:mi>n</mml:mi>
                                 <mml:mo>−</mml:mo>
                                 <mml:mi>k</mml:mi>
                              </mml:mrow>
                           </mml:msup>
                           <mml:mo>≈</mml:mo>
                           <mml:mfrac>
                              <mml:mrow>
                                 <mml:msup>
                                    <mml:mi>z</mml:mi>
                                    <mml:mi>k</mml:mi>
                                 </mml:msup>
                                 <mml:msup>
                                    <mml:mi>e</mml:mi>
                                    <mml:mi>z</mml:mi>
                                 </mml:msup>
                              </mml:mrow>
                              <mml:mrow>
                                 <mml:mi>k</mml:mi>
                                 <mml:mo>!</mml:mo>
                              </mml:mrow>
                           </mml:mfrac>
                        </mml:mrow>
                        
                     </mml:semantics>
                  </mml:math></disp-formula>
<supplementary-material content-type="local-data" id="S1"><caption><title>Additional File 1</title><p>Cluster annotations for SCAN and CNM.</p></caption></supplementary-material> <supplementary-material content-type="local-data" id="S2"><caption><title>Additional File 2</title><p>Clustering result of CNM for PPI network.</p></caption></supplementary-material> <supplementary-material content-type="local-data" id="S3"><caption><title>Additional File 3</title><p>Clustering result of SCAN for PPI network.</p></caption></supplementary-material>
<graphic xlink:href="1471-2105-9-S9-S19-1"/> <graphic xlink:href="1471-2105-9-S9-S19-2"/> <graphic xlink:href="1471-2105-9-S9-S19-3"/> <graphic xlink:href="1471-2105-9-S9-S19-4"/> <graphic xlink:href="1471-2105-9-S9-S19-5"/> <graphic xlink:href="1471-2105-9-S9-S19-6"/> <graphic xlink:href="1471-2105-9-S9-S19-7"/> <graphic xlink:href="1471-2105-9-S9-S19-8"/> <graphic xlink:href="1471-2105-9-S9-S19-9"/>
<media xlink:href="1471-2105-9-S9-S19-S1.pdf" mimetype="application" mime-subtype="pdf"><caption><p>Click here for file</p></caption></media> <media xlink:href="1471-2105-9-S9-S19-S2.pdf" mimetype="application" mime-subtype="pdf"><caption><p>Click here for file</p></caption></media> <media xlink:href="1471-2105-9-S9-S19-S3.xls" mimetype="application" mime-subtype="vnd.ms-excel"><caption><p>Click here for file</p></caption></media>
[{"surname": ["Wagner", "Fell"], "given-names": ["A", "DA"], "article-title": ["The small world inside large metabolic networks"], "source": ["Proc R Soc Lond B"], "year": ["2001"], "volume": ["268"], "fpage": ["1803"], "lpage": ["1810"]}, {"surname": ["Newman", "Girvan"], "given-names": ["MEJ", "M"], "article-title": ["\"Finding and evaluating community structure in networks\""], "source": ["Phys Rev E"], "year": ["2004"], "volume": ["69"], "fpage": ["026113"]}, {"surname": ["Clauset", "Newman", "Moore"], "given-names": ["A", "M", "C"], "article-title": ["Finding community structure in very large networks"], "source": ["Phys Rev E"], "year": ["2004"], "volume": ["70"], "fpage": ["066111"]}, {"surname": ["Ding", "He", "Zha", "Gu", "Simon"], "given-names": ["C", "X", "H", "M", "H"], "article-title": ["\"A min-max cut algorithm for graph partitioning and data clustering\""], "source": ["Proc of ICDM"], "year": ["2001"]}, {"surname": ["Shi", "Malik"], "given-names": ["J", "J"], "article-title": ["\"Normalized cuts and image segmentation\", IEEE Trans"], "source": ["On Pattern Analysis and Machine Intelligence"], "year": ["2001"], "volume": ["22"]}, {"surname": ["Xu", "Yuruk", "Feng", "Schweiger"], "given-names": ["X", "N", "Z", "TA"], "article-title": ["SCAN: a structural clustering algorithm for networks"], "source": ["Proceedings of the 13th ACM SIGKDD international Conference on Knowledge Discovery and Data Mining (San Jose, California, USA, August 12 \u2013 15, 2007) KDD '07"], "year": ["2007"], "publisher-name": ["ACM, New York, NY"], "fpage": ["824"], "lpage": ["833"], "comment": ["DOI= "]}, {}, {"surname": ["Ucar", "Asur", "Catalyurek", "Parthasarathy"], "given-names": ["D", "S", "U", "S"], "article-title": ["Improving functional modularity in protein-protein interactions graphs using hub-induced subgraphs"], "source": ["PKDD"], "year": ["2006"]}, {"surname": ["Ester", "Kriegel", "Sander", "Xu"], "given-names": ["M", "H-P", "J", "X"], "article-title": ["\"A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise\""], "source": ["Proc 2nd Int Conf on Knowledge Discovery and Data Mining (KDD'96), Portland, OR"], "year": ["1996"], "publisher-name": ["AAAI Press"], "fpage": ["291"], "lpage": ["316"]}, {"surname": ["Erd\u00f6s", "R\u00e9nyi"], "given-names": ["P", "A"], "source": ["Publ Math (Debrecen)"], "year": ["1959"], "volume": ["6"], "fpage": ["290"]}, {"surname": ["Faloutsos", "Faloutsos", "Faloutsos"], "given-names": ["M", "P", "C"], "article-title": ["On Power-Law Relationships of the Internet Topology"], "source": ["SIGCOMM"], "year": ["1999"]}]
BMC Bioinformatics. 2008 Aug 12; 9(Suppl 9):S19