Generates a scale-free random graph based on Bollabas et al. (2001), also know as
Linearized Chord Diagram (LCD) which has nice mathematical propoerties.
And also scale-free homophilic networks when an vertex attribute eta
is
passed.
rgraph_ba(m0 = 1L, m = 1L, t = 10L, graph = NULL, self = TRUE, eta = NULL)
Integer scalar. Number of initial vertices in the graph.
Integer scalar. Number of new edges per vertex added.
Integer scalar. Number of time periods (steps).
Any class of accepted graph format (see netdiffuseR-graphs
).
Logical scalar. When TRUE
autolinks (loops, self edges) are allowed (see details).
Numeric vector of length t+m0
. When specified, it generates
a scale-free homophilic network (see details).
If graph
is not provided, a static graph, otherwise an expanded
graph (t
aditional vertices) of the same class as graph
.
The resulting graph will have graph$meta$undirected = FALSE
if it is of
class diffnet
and attr(graph, "undirected")=FALSE
otherwise.
Based on Ballobás et al. (2001) creates a directed random graph of size
t + m0
. A big difference with B-A model
is that this allows for loops (self/auto edges) and further multiple links,
nevertheless, as \(t\) increases, the number of such cases reduces.
By default, the degree of the first m0
vertices is set to be 2 (loops).
When m>1
, as described in the paper, each new link from the new vertex
is added one at a time
“counting ‘outward half’ of the edge being added as already contributing to the degrees”.
When self=FALSE
, the generated graph is created without autolinks. This
means that at the beginning, if the number of links equals zero, all vertices
have the same probability of receiving a new link.
When eta
is passed, it implements the model specified in De Almeida et al.
(2013), a scale-free homophilic network. To do so eta
is rescaled to
be between 0 and 1 and the probability that the node \(i\) links to node \(j\)
is as follows:
$$ \frac{(1-A_{ij})k_j}{\sum_j (1-A_{ij})k_j} $$
Where \(A_{ij} = |\eta_i - \eta_j|\) and \(k_j\) is the degree of the \(j\)-th vertex.
Bollobás, B´., Riordan, O., Spencer, J., & Tusnády, G. (2001). The degree sequence of a scale-free random graph process. Random Structures & Algorithms, 18(3), 279–290. doi:10.1002/rsa.1009
Albert-László Barabási, & Albert, R. (1999). Emergence of Scaling in Random Networks. Science, 286(5439), 509–512. doi:10.1126/science.286.5439.509
Albert-László Barabási. (2016). Network Science: (1st ed.). Cambridge University Press. Retrieved from https://barabasi.com/book/network-science
De Almeida, M. L., Mendes, G. A., Madras Viswanathan, G., & Da Silva, L. R. (2013). Scale-free homophilic network. European Physical Journal B, 86(2). doi:10.1140/epjb/e2012-30802-x
Other simulation functions:
permute_graph()
,
rdiffnet()
,
rewire_graph()
,
rgraph_er()
,
rgraph_ws()
,
ring_lattice()
# Using another graph as a base graph ---------------------------------------
graph <- rgraph_ba()
graph
#> 11 x 11 sparse Matrix of class "dgCMatrix"
#> [[ suppressing 11 column names ‘1’, ‘2’, ‘3’ ... ]]
#>
#> 1 1 . . . . . . . . . .
#> 2 1 . . . . . . . . . .
#> 3 1 . . . . . . . . . .
#> 4 . . 1 . . . . . . . .
#> 5 1 . . . . . . . . . .
#> 6 . . 1 . . . . . . . .
#> 7 1 . . . . . . . . . .
#> 8 . . 1 . . . . . . . .
#> 9 1 . . . . . . . . . .
#> 10 . . . . 1 . . . . . .
#> 11 1 . . . . . . . . . .
graph <- rgraph_ba(graph=graph)
# Generating a scale-free homophilic graph (no loops) -----------------------
set.seed(112)
eta <- rep(c(1,1,1,1,2,2,2,2), 20)
ans <- rgraph_ba(t=length(eta) - 1, m=3, self=FALSE, eta=eta)
# Converting it to igraph (so we can plot it)
ig <- igraph::graph_from_adjacency_matrix(ans)
# Neat plot showing the output
oldpar <- par(no.readonly = TRUE)
par(mfrow=c(1,2))
plot(ig, vertex.color=c("red","blue")[factor(eta)], vertex.label=NA,
vertex.size=5, main="Scale-free homophilic graph")
suppressWarnings(plot(dgr(ans), main="Degree distribution"))
par(oldpar)