Exploring Community Structure

library(nett)
library(Matrix)

Let us create a simple degree-corrected planted parition (DCPP) model:

set.seed(1)
n = 1000 # the number of nodes
Ktru = 4 # the number of true communties
lambda = 15 # the average degree
oir = 0.1 # the out-in ratio
pri = rep(1,Ktru)/Ktru
theta <- EnvStats::rpareto(n, 2/3, 3) # node conn. propensity parameter

B = pp_conn(n, oir, lambda, pri, theta)$B  # create connectivity matrix
z =  sample(Ktru, n, replace=T, prob=pri)  # sample node labels
A = sample_dcsbm(z, B, theta) # sample the adjacency matrix

Check to see if the average degree matches the target:

mean(rowSums(A))
#> [1] 15.118

Compute and plot the community profile based on SNAC+ test statistic:

tstat = snac_resample(A, nrep = 10, ncores = 1)
#> Warning: did not converge in 10 iterations
plot_smooth_profile(tstat, "A DCPP network")
#> Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
#> ℹ Please use `linewidth` instead.
#> ℹ The deprecated feature was likely used in the nett package.
#>   Please report the issue at <https://github.com/aaamini/nett/issues>.
#> This warning is displayed once per session.
#> Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
#> generated.

See the article Adjusted chi-square test for degree-corrected block models, Zhang and Amini for how these profiles are constructed.