randDAG {pcalg} | R Documentation |
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.
randomDAG
a limited and soon deprecated version of randDAG
;
rmvDAG
for generating multivariate data according to a DAG.
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