`R/generalize-userfunction.R`

`mlvsbm_simulate_generalized_network.Rd`

Create a simulate a generalized multilevel network (GenMLVSBM object)

```
mlvsbm_simulate_generalized_network(
n,
Q,
pi,
gamma,
alpha,
directed,
affiliation = "uniform",
distribution,
no_empty_org = FALSE,
no_isolated_node = FALSE
)
```

- n
A vector of L positive integers where L is the number of levels from the upper level to the lower level.

- Q
A vector of L positive integers, the number of clusters for each level.

- pi
A list of length L, with vectors of probabilities of length Q[l], the mixture parameters. pi[[1]] must be a probability, pi[[l]] can be set to

`NULL`

for a given level if all nodes of this level have an affiliation.- gamma
A list of size \(L-1\) of \(Q[l+1] \times Q[l]\) matrix with each column summing to one, the mixture parameters given the affiliation

- alpha
A list of L matrices, of size \(Q[l] \times Q[l]\) matrix giving the connectivity probabilities.

- directed
A vector of L logical. Is level l a directed network ?

- affiliation
The distribution under which the affiliation matrix is simulated in c("uniform", "preferential", "diagonal"). "diagonal" is a special case where all affiliation matrix are diagonal (individuals are the same on each levels, for temporal networks e.g.). It requires

`n`

to be constant.- distribution
A list for the distribution of X, only "bernoulli" is implemented.

- no_empty_org
A logical with FALSE as default, should every nodes have at least one affiliated node on the level below? Needs to have \(n[l] \geq n[l+1]\).

- no_isolated_node
A logical, if TRUE then the network is simulated again until all nodes are connected.

An GenMLVSBM object, a simulated multilevel network with levels, affiliations and memberships.

```
my_genmlvsbm <- MLVSBM::mlvsbm_simulate_generalized_network(
n = c(10, 20), # Number of nodes for each level
Q = c(2, 2), # Number of blocks for each level
pi = list(c(.3, .7), NULL), # Block proportion for the upper level, must sum to one
gamma = list(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(matrix(c(.8, .2,
.2, .1),
nrow = 2, ncol = 2, byrow = TRUE), # Connection matrix
matrix(c(.99, .3,
.3, .1),
nrow = 2, ncol = 2, byrow = TRUE)),# between blocks
directed = c(FALSE, FALSE),
distribution = rep("bernoulli", 2)) # Are the upper and lower level directed
```