rgbn {sna} | R Documentation |
Produces a series of draws from a Skvoretz-Fararo biased net process using a Gibbs sampler or exact sampling procedure.
rgbn(n, nv, param = list(pi=0, sigma=0, rho=0, d=0.5), burn = nv*nv*5*100, thin = nv*nv*5, maxiter = 1e7, method = c("mcmc","cftp"), return.as.edgelist = FALSE)
n |
number of draws to take. |
nv |
number of vertices in the graph to be simulated. |
param |
a list containing the biased net parameters. |
burn |
for the Gibbs sampler, the number of burn-in draws to take (and discard). |
thin |
the thinning parameter for the Gibbs sampler. |
maxiter |
for the CFTP method, the number of iterations to try before giving up. |
method |
|
return.as.edgelist |
logical; should the simulated draws be returned in edgelist format? |
The biased net model stems from early work by Rapoport, who attempted to model networks via a hypothetical “tracing” process. This process may be described loosely as follows. One begins with a small “seed” set of vertices, each member of which is assumed to nominate (generate ties to) other members of the population with some fixed probability. These members, in turn, may nominate new members of the population, as well as members who have already been reached. Such nominations may be “biased” in one fashion or another, leading to a non-uniform growth process.
While the original biased net model depends upon the tracing process, a local interpretation has been put forward by Skvoretz and colleagues in recent years. Using the standard four-parameter process, the conditional probability of an (i,j) edge given all other edges in a random graph G can be written as
Pr(i->j) = 1 - (1-rho)^z (1-sigma)^y (1-pi)^x (1-d)
where x=1 iff j \to i (and 0 otherwise), y is the number of vertices k!=i,j such that k->i, k->j, and z=1 iff x=1 and y>0 (and 0 otherwise). Thus, x is the number of parent bias events, y is the number of sibling bias events, and z is the number of double role bias events. d is the probability of the baseline edge event; note that an edge arises if the baseline event or any bias event occurs, and all events are assumed conditionally independent. Written in this way, it is clear that the edges of G are conditionally independent if they share no endpoint. Thus, the above model is a subfamily of the Markov graphs.
It should be noted that the above process is not entirely consistent with the tracing-based model, which is itself not uniformly well-specified in the literature. For this reason, the local model is referred to here as a Skvoretz-Fararo graph process. One significant advantage of this process is that it is well-defined, and easily simulated: the above equation can be used to form the basis of a Gibbs sampler, which is used by rgbn to take draws from the (local) biased net model. Burn-in and thinning are controlled by the corresponding arguments; since degeneracy is common with models of this type, it is advisable to check for adequate mixing. An alternative simulation strategy is the exact sampling procedure of Butts (2008), which employs a form of coupling from the past (CFTP). The CFTP method generates exact, independent draws (up to numerical limits), but can be slow to attain coalescence. Setting maxiter
to smaller values limits the search depth employed, at the possible cost of biasing the resulting sample.
An adjacency array containing the simulated graphs.
Carter T. Butts buttsc@uci.edu
Butts, C.T. (2009). “A Perfect Sampling Method for Exponential Random Graph Models”. Working paper, University of California, Irvine.
Rapoport, A. (1957). “A Contribution to the Theory of Random and Biased Nets.” Bulletin of Mathematical Biophysics, 15, 523-533.
Skvoretz, J.; Fararo, T.J.; and Agneessens, F. (2004). “Advances in Biased Net Theory: Definitions, Derivations, and Estimations.” Social Networks, 26, 113-139.
#Generate draws with low density and no biases g1<-rgbn(50,10,param=list(pi=0, sigma=0, rho=0, d=0.17)) apply(dyad.census(g1),2,mean) #Examine the dyad census #Add a reciprocity bias g2<-rgbn(50,10,param=list(pi=0.5, sigma=0, rho=0, d=0.17)) apply(dyad.census(g2),2,mean) #Compare with g1 #Alternately, add a sibling bias g3<-rgbn(50,10,param=list(pi=0.0, sigma=0.3, rho=0, d=0.17)) mean(gtrans(g3)) #Compare transitivity scores mean(gtrans(g1))