View source: R/ergm.allstats.R
ergm.allstats  R Documentation 
ergm.allstats
calculates the sufficient statistics of an
ERGM over the network's sample space.
ergm.exact()
uses ergm.allstats()
to calculate the exact loglikelihood, evaluated at
eta
.
ergm.allstats(formula, constraints = ~., zeroobs = TRUE, force = FALSE, ...)
ergm.exact(eta, formula, constraints = ~., statmat = NULL, weights = NULL, ...)
formula , constraints 
An ERGM formula and
(optionally) a constraint specification formulas. See

zeroobs 
Logical: Should the vectors be centered so that the network
passed in the 
force 
Logical: Should the algorithm be run even if it is determined that the problem may be very large, thus bypassing the warning message that normally terminates the function in such cases? 
... 
further arguments, passed to 
eta 
vector of canonical parameter values at which the loglikelihood should be evaluated. 
statmat , weights 
outputs from 
The mechanism for doing this is a recursive algorithm, where the number of
levels of recursion is equal to the number of possible dyads that can be
changed from 0 to 1 and back again. The algorithm starts with the network
passed in formula
, then recursively toggles each edge twice so that
every possible network is visited.
ergm.allstats()
and ergm.exact()
should only be used for small
networks, since the number of possible networks grows extremely
fast with the number of nodes. An error results if it is used on a
network with more than 31 free dyads, which corresponds to a
directed network of more than 6 nodes or an undirected network of
more than 8 nodes; use force=TRUE
to override this error.
In case ergm.exact()
is to be called repeatedly, for instance by an
optimization routine, it is preferable to call ergm.allstats()
first, then pass statmat
and weights
explicitly to avoid
repeatedly calculating these objects.
ergm.allstats()
returns a list object with these two elements:
weights 
integer of counts, one for each row of 
statmat 
matrix in which each row is a unique vector of statistics. 
ergm.exact()
returns the exact value of the loglikelihood, evaluated at
eta
.
# Count by brute force all the edge statistics possible for a 7node
# undirected network
mynw < network.initialize(7, dir = FALSE)
system.time(a < ergm.allstats(mynw~edges))
# Summarize results
rbind(t(a$statmat), .freq. = a$weights)
# Each value of a$weights is equal to 21choosek,
# where k is the corresponding statistic (and 21 is
# the number of dyads in an 7node undirected network).
# Here's a check of that fact:
as.vector(a$weights  choose(21, t(a$statmat)))
# Dyadindependent constraints are also supported:
system.time(a < ergm.allstats(mynw~edges, constraints = ~fixallbut(cbind(1:2,2:3))))
rbind(t(a$statmat), .freq. = a$weights)
# Simple ergm.exact output for this network.
# We know that the loglikelihood for my empty 7node network
# should simply be 21*log(1+exp(eta)), so we may check that
# the following two values agree:
21*log(1+exp(.1234))
ergm.exact(.1234, mynw~edges, statmat=a$statmat, weights=a$weights)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.