This function calculates how modular is a given division of a graph into subgraphs.
# S3 method for igraph
modularity(x, membership, weights = NULL, ...)modularity_matrix(graph, membership, weights = NULL)
The input graph.
Numeric vector, for each vertex it gives its community. The communities are numbered from one.
If not NULL
then a numeric vector giving edge weights.
Additional arguments, none currently.
For modularity
a numeric scalar, the modularity score of the
given configuration.
For modularity_matrix
a numeic square matrix, its order is the number of
vertices in the graph.
modularity
calculates the modularity of a graph with respect to the
given membership
vector.
The modularity of a graph with respect to some division (or vertex types) measures how good the division is, or how separated are the different vertex types from each other. It defined as $$Q=\frac{1}{2m} \sum_{i,j} (A_{ij}-\frac{k_ik_j}{2m})\delta(c_i,c_j),$$ here \(m\) is the number of edges, \(A_{ij}\) is the element of the \(A\) adjacency matrix in row \(i\) and column \(j\), \(k_i\) is the degree of \(i\), \(k_j\) is the degree of \(j\), \(c_i\) is the type (or component) of \(i\), \(c_j\) that of \(j\), the sum goes over all \(i\) and \(j\) pairs of vertices, and \(\delta(x,y)\) is 1 if \(x=y\) and 0 otherwise.
If edge weights are given, then these are considered as the element of the \(A\) adjacency matrix, and \(k_i\) is the sum of weights of adjacent edges for vertex \(i\).
modularity_matrix
calculates the modularity matrix. This is a dense matrix,
and it is defined as the difference of the adjacency matrix and the
configuration model null model matrix. In other words element
\(M_{ij}\) is given as \(A_{ij}-d_i
d_j/(2m)\), where \(A_{ij}\) is the (possibly
weighted) adjacency matrix, \(d_i\) is the degree of vertex \(i\),
and \(m\) is the number of edges (or the total weights in the graph, if it
is weighed).
Clauset, A.; Newman, M. E. J. & Moore, C. Finding community structure in very large networks, Phyisical Review E 2004, 70, 066111
cluster_walktrap
,
cluster_edge_betweenness
,
cluster_fast_greedy
, cluster_spinglass
for
various community detection methods.
# NOT RUN {
g <- make_full_graph(5) %du% make_full_graph(5) %du% make_full_graph(5)
g <- add_edges(g, c(1,6, 1,11, 6, 11))
wtc <- cluster_walktrap(g)
modularity(wtc)
modularity(g, membership(wtc))
# }
Run the code above in your browser using DataLab