Function calculates the fuzzy modularity of a (disjoint or non-disjoint division) of a graph into subgraphs.
FuzzyMod(graph, membership, abs = TRUE)
A numeric scalar, the fuzzy modularity score of the given configuration.
The input graph.
Numeric vector or list indicating the membership structure.
Should fuzzy modularity be calculated based on absolute values of network edges? Default is TRUE.
Pedro Henrique Ribeiro Santiago, phrs16@gmail.edu.au [ctb]
Gustavo Hermes Soares, [rev]
Adrian Quintero, [rev]
Lisa Jamieson, [rev]
The modularity of a graph with respect to some division is a measure of how good the division is. The traditional modularity Q was proposed by Newman and Girvan (2004):
$$Q=\frac{1}{2m} \sum_{c\epsilon_C} \sum_{u,v\epsilon_V} (A_{uv}-\frac{k_{u}k_{v}}{2m}) \delta_{cu} \delta_{cv}$$
where m is the total number of edges, C is the set of communities corresponding to a partition, V is the set of vertices (i.e. nodes) in the network, \(A_{uv}\) is the element of the A adjacency matrix in row \(i\) and column \(j\), and \(k_{u}\) and \(k_{v}\) are the node degrees of nodes \(u\) and \(v\), respectively. \(\delta_{cu}\) indicates whether node \(u\) belongs to community \(c\), which equals 1 if u and v belongs to community c and 0 otherwise. The product \(\delta_{cu}*\delta_{cv}\) is a Kronecker delta function which equals 1 if \(u\) and \(v\) belongs to community \(c\) and 0 otherwise.
In the case of weighted networks, Fan, Li, Zhang, Wu, and Di (2007) proposed that to calculate modularity Q, m should be the total edge weights, and \(k_{u}\) and \(k_{v}\) should be the node strengths of nodes \(u\) and \(v\), respectively.
One limitation of modularity Q proposed by Newman and Girvan (2004) was that modularity could not be calculated for non-disjoint community partitions (i.e. networks in which a node is assigned to more than one community). As such, Chen, Shang, Lv, and Fu (2010) proposed a generalisation in terms of fuzzy modularity:
$$Q=\frac{1}{2m} \sum_{c\epsilon_C} \sum_{u,v\epsilon_V} \alpha_{cu} \alpha_{cv} (A_{uv}-\frac{k_{u}k_{v}}{2m})$$
where \(\alpha_{cu}\) is the belonging coefficient. The belonging coefficient reflects how much the node \(u\) belongs to community \(c\). The belonging coefficient is calculated as:
$$\alpha_{cu} = \frac{k_{cu}}{\sum_{c\epsilon_C}k_{cu}}$$
In case of a disjoint solution, the fuzzy modularity Q proposed by Chen, Shang, Lv, and Fu (2010) reduces to the modularity Q proposed by Newman and Girvan (2004).
Newman, M. E., & Girvan, M. (2004). Finding and evaluating community structure in networks. Physical review E, 69(2), 026113.
Fan, Y., Li, M., Zhang, P., Wu, J., & Di, Z. (2007). Accuracy and precision of methods for community identification in weighted networks. Physica A: Statistical Mechanics and its Applications, 377(1), 363-372.
Chen, D., Shang, M., Lv, Z., & Fu, Y. (2010). Detecting overlapping communities of weighted networks via a local algorithm. Physica A: Statistical Mechanics and its Applications, 389(19), 4177-4187.
g <- igraph::disjoint_union(igraph::make_full_graph(5),igraph::make_full_graph(4))
g <- igraph::add_edges(g, c(2,6, 2,7, 2,8, 2,9))
wc <- list(c(1,2,3,4,5),c(2,6,7,8,9))
FuzzyMod(graph=g, membership=wc, abs=TRUE)
Run the code above in your browser using DataLab