ergm.allstats {ergm} | R Documentation |
ergm.allstats
produces a matrix of network statistics for an arbitrary
statnet
exponential-family random graph model. One possible use for this function is to
calculate the exact loglikelihood function for a small network via the
ergm.exact
function.
ergm.allstats (formula, zeroobs = TRUE, force = FALSE, maxNumChangeStatVectors = 2^16, ...)
formula |
an R |
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? |
maxNumChangeStatVectors |
Maximum possible number of distinct values of the vector of statistics. It's good to use a power of 2 for this. |
... |
further arguments; not currently used. |
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
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 directed network of more than 6 nodes or
an undirected network of more than 8 nodes; use force=TRUE
to override
this error.
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. |
# Count by brute force all the edge statistics possible for a 7-node # undirected network mynw <- network(matrix(0,7,7),dir=FALSE) unix.time(a <- ergm.allstats(mynw~edges)) # Summarize results rbind(t(a$statmat),a$weights) # Each value of a$weights is equal to 21-choose-k, # where k is the corresponding statistic (and 21 is # the number of dyads in an 7-node undirected network). # Here's a check of that fact: as.vector(a$weights - choose(21, t(a$statmat))) # Simple ergm.exact outpuf for this network. # We know that the loglikelihood for my empty 7-node 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)