Finding communities based on propagating labels
This is a fast, nearly linear time algorithm for detecting community structure in networks. In works by labeling the vertices with unique labels and then updating the labels by majority voting in the neighborhood of the vertex.
label.propagation.community (graph, weights = NULL, initial = NULL, fixed = NULL)
- The input graph, should be undirected to make sense.
- An optional weight vector. It should contain a positive
weight for all the edges. The
weightedge attribute is used if present. Supply here if you want to ignore the
- The initial state. If
NULL, every vertex will have a different label at the beginning. Otherwise it must be a vector with an entry for each vertex. Non-negative values denote different labels, negative entries denote vertices with
- Logical vector denoting which labels are fixed. Of course this makes sense only if you provided an initial state, otherwise this element will be ignored. Also note that vertices without labels cannot be fixed.
This function implements the community detection method described in: Raghavan, U.N. and Albert, R. and Kumara, S.: Near linear time algorithm to detect community structures in large-scale networks. Phys Rev E 76, 036106. (2007). This version extends the original method by the ability to take edge weights into consideration and also by allowing some labels to be fixed.
From the abstract of the paper:
- A numeric vector giving the final label (=community) of each vertex.
Raghavan, U.N. and Albert, R. and Kumara, S.: Near linear time algorithm to detect community structures in large-scale networks. Phys Rev E 76, 036106. (2007)
g <- erdos.renyi.game(10, 5/10) %du% erdos.renyi.game(9, 5/9) g <- add.edges(g, c(0, 11)) label.propagation.community(g)