sample_fitness(no.of.edges, fitness.out, fitness.in = NULL, loops = FALSE,
multiple = FALSE)
NULL
(the default), the generated graph will be
undirected. If not NULL
, then it should be a numeric vector and it
specifies the in-fitness of each vertex.If this argument is not NULL
, then a directed graph is g
The generation process goes as follows. We start from $N$ disconnected nodes (where $N$ is given by the length of the fitness vector). Then we randomly select two vertices $i$ and $j$, with probabilities proportional to their fitnesses. (When the generated graph is directed, $i$ is selected according to the out-fitnesses and $j$ is selected according to the in-fitnesses). If the vertices are not connected yet (or if multiple edges are allowed), we connect them; otherwise we select a new pair. This is repeated until the desired number of links are created.
It can be shown that the expected degree of each vertex will be
proportional to its fitness, although the actual, observed degree will not
be. If you need to generate a graph with an exact degree sequence, consider
sample_degseq
instead.
This model is commonly used to generate static scale-free networks. To
achieve this, you have to draw the fitness scores from the desired power-law
distribution. Alternatively, you may use sample_fitness_pl
which generates the fitnesses for you with a given exponent.
N <- 10000
g <- sample_fitness(5*N, sample((1:50)^-2, N, replace=TRUE))
degree_distribution(g)
plot(degree_distribution(g, cumulative=TRUE), log="xy")
Run the code above in your browser using DataLab