R: Calculate the exact loglikelihood for an ERGM

ergm.exact {ergm} | R Documentation

## Calculate the exact loglikelihood for an ERGM

### Description

`ergm.exact` calculates the exact loglikelihood, evaluated at `eta`, for the `statnet` exponential-family random graph model represented by `formula`.

### Usage

    ergm.exact(eta, formula, statmat = NULL, weights = NULL, ...)

### Arguments

`eta` | vector of canonical parameter values at which the loglikelihood should be evaluated.
`formula` | an `link{formula}` object of the form `y ~ <model terms>`, where `y` is a network object or a matrix that can be coerced to a `network` object. For the details on the possible `<model terms>`, see `ergmTerm`. To create a `network` object in , use the `network()` function, then add nodal attributes to it using the `%v%` operator if necessary.
`statmat` | if NULL, call `ergm.allstats` to generate all possible graph statistics for the networks in this model.
`weights` | In case `statmat` is not `NULL`, this should be the vector of counts corresponding to the rows of `statmat`. If `statmat` is `NULL`, this is generated by the call to `ergm.allstats`.
`...` | further arguments; not currently used.

### Details

`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 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 this function 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.

### Value

Returns the value of the exact loglikelihood, evaluated at `eta`, for the `statnet` exponential-family random graph model represented by `formula`.

### See Also

`ergm.allstats`

### Examples

    # Count by brute force all the edge statistics possible for a 7-node
    # undirected network
    mynw <- network(matrix(0,7,7),dir=FALSE)
    system.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)

[Package ergm version 4.2.1 Index]