Random DAG Generation
Generating random directed acyclic graphs (DAGs) with fixed expected
number of neighbours. Several different methods are provided, each
intentionally biased towards certain properties. The methods are based
on the analogue *.game
functions in the igraph package.
randDAG(n, d, method ="er", par1=NULL, par2=NULL, DAG = TRUE, weighted = TRUE, wFUN = list(runif, min=0.1, max=1))
n |
integer, at least |
d |
a positive number, corresponding to the expected number of neighbours per node, more precisely the expected sum of the in- and out-degree. |
method |
a string, specifying the method used for generating the random graph. See details below. |
par1, par2 |
optional additional arguments, dependent on the method. See details. |
DAG |
logical, if |
weighted |
logical indicating if edge weights are computed according to |
wFUN |
a |
A (weighted) random graph with n
nodes and expected number of
neighbours d
is constructed. For DAG=TRUE
, the graph is
oriented to a DAG. There are eight different random graph models
provided, each selectable by the parameters method
,
par1
and par2
, with method
, a string,
taking one of the following values:
regular
:Graph where every node has exactly d
incident edges. par1
and par2
are not used.
watts
:Watts-Strogatz graph that interpolates between
the regular (par1->0
) and Erdoes-Renyi graph
(par1->1
). The parameter par1
is per default
0.5
and has to be in (0,1)
. par2
is not used.
er
:Erdoes-Renyi graph where every edge is present
independently. par1
and par2
are not used.
power
:A graph with power-law degree distribution with
expectation d
.par1
and par2
are not used.
bipartite
:Bipartite graph with at least par1*n
nodes in group 1 and at most (1-par1)*n
nodes in group 2.
The argument par1
has to be in [0,1]
and is per
default 0.5
. par2
is not used.
barabasi
:A graph with power-law degree distribution
and preferential attachement according to parameter par1
. It
must hold that par1 >= 1
and the default is
par1=1
. par2
is not used.
geometric
:A geometric random graph in dimension
par1
, where par1
can take values from
{2,3,4,5}
and is per default 2
. If par2="geo"
and weighted=TRUE
, then the weights are computed according to
the Euclidean distance. There are currently no other option for
par2
implemented.
interEr
:A graph with par1
islands of
Erdoes-Renyi graphs, every pair of those connected by a certain
number of edges proportional to par2
(fraction of
inter-connectivity). It is required that
n/s be integer and par2
in (0,1). Defaults are
par1=2
and par2=0.25
, respectively.
A graph object of class graphNEL
.
The output is not topologically sorted (as opposed to the
output of randomDAG
).
Markus Kalisch (kalisch@stat.math.ethz.ch) and Manuel Schuerch.
These methods are mainly based on the analogue functions in the igraph package.
the package igraph
, notably help pages such as
random.graph.game
or barabasi.game
;
unifDAG
from package unifDAG for generating uniform random DAGs.
set.seed(37) dag1 <- randDAG(10, 4, "regular") dag2 <- randDAG(10, 4, "watts") dag3 <- randDAG(10, 4, "er") dag4 <- randDAG(10, 4, "power") dag5 <- randDAG(10, 4, "bipartite") dag6 <- randDAG(10, 4, "barabasi") dag7 <- randDAG(10, 4, "geometric") dag8 <- randDAG(10, 4, "interEr", par2 = 0.5) ## require("Rgraphviz") par(mfrow=c(4,2)) plot(dag1,main="Regular graph") plot(dag2,main="Watts-Strogatz graph") plot(dag3,main="Erdoes-Renyi graph") plot(dag4,main="Power-law graph") plot(dag5,main="Bipartite graph") plot(dag6,main="Barabasi graph") plot(dag7,main="Geometric random graph") plot(dag8,main="Interconnected island graph") set.seed(45) dag0 <- randDAG(6,3) dag1 <- randDAG(6,3, weighted=FALSE) dag2 <- randDAG(6,3, DAG=FALSE) par(mfrow=c(1,2)) plot(dag1) plot(dag2) ## undirected graph dag0@edgeData ## note the uniform weights between 0.1 and 1 dag1@edgeData ## note the constant weights wFUN <- function(m,lB,uB) { runif(m,lB,uB) } dag <- randDAG(6,3,wFUN=list(wFUN,1,4)) dag@edgeData ## note the uniform weights between 1 and 4
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.