R/user_function.R
mlvsbm_estimate_network.Rd
The inference use a greedy algorithm to navigate between model size. For a given model size, the inference is done via a variational EM algorithm. The returned model is the one with the highest ICL criterion among all visited models.
By default the algorithm fits a single level SBM for each level, before
inferring the multilevel network. This step can be skipped by specifying an
initial clustering with the init_clustering
. Also, a given model size
can be force by setting the parameters nb_clusters
to a given value.
mlvsbm_estimate_network(
mlv,
nb_clusters = NULL,
init_clustering = NULL,
nb_cores = NULL,
init_method = "hierarchical"
)
A MLVSBM object, the network to be inferred.
A list of 2 integers, the model size.
If left to NULL
, the algorithm
will navigate freely. Otherwise it will navigate between the specified model
size and its neighbors.
A list of 2 vectors of integers of the same length as the number of node of each level. If specified, the algorithm will start from this clustering, then navigate freely.
An integer, the number of cores to use. Default to 1
for Windows and detectCores()/2
for Linux and MacOS
One of "hierarchical" (the default) or "spectral", "spectral" might be more efficient but can lead to some numeric errors. Not used when int_clustering is given.
A FitMLVSBM object, the best inference of the network
my_mlvsbm <- MLVSBM::mlvsbm_simulate_network(
n = list(I = 10, O = 20), # Number of nodes for the lower level and the upper level
Q = list(I = 2, O = 2), # Number of blocks for the lower level and the upper level
pi = c(.3, .7), # Block proportion for the upper level, must sum to one
gamma = matrix(c(.9, .2, # Block proportion for the lower level,
.1, .8), # each column must sum to one
nrow = 2, ncol = 2, byrow = TRUE),
alpha = list(I = matrix(c(.8, .2,
.2, .1),
nrow = 2, ncol = 2, byrow = TRUE), # Connection matrix
O = matrix(c(.99, .3,
.3, .1),
nrow = 2, ncol = 2, byrow = TRUE)),# between blocks
directed = list(I = FALSE, O = FALSE), # Are the upper and lower level directed or not ?
affiliation = "preferential") # How the affiliation matrix is generated
fit <- MLVSBM::mlvsbm_estimate_network(mlv = my_mlvsbm, nb_cores = 1)
#>
#>
[1] "Infering lower level :"
#> [1] "# blocks: 1, ICL = -30.5464688181517 !"
#>
#>
[1] "Infering upper level :"
#> [1] "# blocks: 1, ICL = -94.8607031904538 !"
#> [1] "======= # Individual clusters : 1 , # Organisation clusters 1, ICL : -125.407172008605========"
#> [1] "======= # Individual blocks : 1 , # Organizational blocks 2, ICL : -124.4436233372========"
#> [1] "======= # Individual blocks : 2 , # Organizational blocks 2, ICL : -121.813050465274========"
#> [1] "======= # Individual blocks : 2 , # Organizational blocks 2, ICL : -121.813050465274========"
#> [1] "ICL for independent levels : -125.407172008605"
#> [1] "ICL for interdependent levels : -121.813050465274"
#> [1] "=====Interdependence is detected between the two levels!====="