cpCommunitySizeDistribution {CliquePercolation}R Documentation

Plotting Clique Percolation Community Size Distribution


Function for plotting the frequency distribution of community sizes from clique percolation community detection and testing for power-law.


  color.line = "#bc0031",
  test.power.law = FALSE



List object taken from results of cpAlgorithm function; see also cpAlgorithm


string indicating the color of the line in the plot as described in par; default is "#bc0031"


Logical indicating whether fit of power-law should be tested; default is FALSE; see Details


The function takes the results of cpAlgorithm (see also cpAlgorithm), that is, either the list.of.communities.numbers or the list.of.communities.labels and plots the community size distribution. If there are no communities, no plot can be generated. An error is printed indicating this.

If test.power.law = TRUE, test of a fit of a power-law is performed with the function fit_power_law (see also fit_power_law). Fit is tested for the entire distribution from the smallest community size onward (i.e., typically k as specified in cpAlgorithm). Moreover, test uses the plfit implementation of fit_power_law. For other arguments, default values are used.


The function primarily plots the community size distribution. Additionally, it returns a list with a data frame containing all community sizes and their frequencies (size.distribution). If test.power.law = TRUE, a test of fit of a power-law distribution is also returned as a list object with results from fit_power_law (see also fit_power_law).


Jens Lange, lange.jens@outlook.com


## Example with fictitious data

# create qgraph object; 150 nodes; 1/7 of all edges are different from zero
W <- matrix(c(0), nrow = 150, ncol = 150, byrow = TRUE)
W[upper.tri(W)] <- sample(c(rep(0,6),1), length(W[upper.tri(W)]), replace = TRUE)
rand_w <- stats::rnorm(length(which(W == 1)), mean = 0.3, sd = 0.1)
W[which(W == 1)] <- rand_w
W <- Matrix::forceSymmetric(W)
W <- qgraph::qgraph(W, DoNotPlot = TRUE)

# run clique percolation for weighted networks
cp.results <- cpAlgorithm(W, k = 3, method = "weighted", I = 0.38)

# plot community size distribution with blue line
cp.size.dist <- cpCommunitySizeDistribution(cp.results$list.of.communities.numbers,
                                            color.line = "#0000ff")
# test for power-law distribution
cp.size.dist <- cpCommunitySizeDistribution(cp.results$list.of.communities.numbers,
                                            color.line = "#0000ff",
                                            test.power.law = TRUE)

## Example with Obama data set (see ?Obama)

# get data

# estimate network
net <- qgraph::EBICglasso(qgraph::cor_auto(Obama), n = nrow(Obama))

# run clique percolation algorithm with specific k and I
cpk3I.16 <- cpAlgorithm(net, k = 3, I = 0.16, method = "weighted")

# plot community size distribution
#the distribution is not very informative with four equally-sized communities
Obama.size.dist <- cpCommunitySizeDistribution(cpk3I.16$list.of.communities.numbers)

[Package CliquePercolation version 0.3.0 Index]