Title: | User-specified Terms for the statnet Suite of Packages |
---|---|
Description: | A template package to demonstrate the use of user-specified statistics for use in 'ergm' models as part of the Statnet suite of packages. |
Authors: | Mark S. Handcock [aut], David R. Hunter [aut], Carter T. Butts [aut], Steven M. Goodreau [aut], Pavel N. Krivitsky [aut, cre] , Martina Morris [aut] |
Maintainer: | Pavel N. Krivitsky <[email protected]> |
License: | GPL-3 + file LICENSE |
Version: | 3.10.0-111 |
Built: | 2024-11-04 03:02:52 UTC |
Source: | https://github.com/statnet/ergm.userterms |
This package contains template code for user defined (change) statistics that can be used with the statnet suite of packages (and ergm in particular). To use this package the statnet packages ergm and network are required.
As background,
statnet is a suite of software packages for statistical network analysis.
The packages implement recent advances in network modeling based on
exponential-family random graph models (ERGM). The components of the package
provide a comprehensive framework for ERGM-based network modeling: tools for
model estimation, for model evaluation, for model-based network simulation, and
for network visualization. This broad functionality is powered by a central
Markov chain Monte Carlo (MCMC) algorithm. The coding is optimized for speed
and robustness.
For detailed information on how to download and install the software,
go to the ergm
website:
statnet.org.
A tutorial, support newsgroup, references and links to further
resources are provided there.
When publishing results obtained using this package the original authors are to be cited as:
Mark S. Handcock, David R. Hunter, Carter T. Butts, Steven M. Goodreau,
and Martina Morris. 2003
statnet: Software tools for the Statistical Modeling of Network Data
statnet.org.
We have invested a lot of time and effort in creating the
statnet
suite of packages for use by other researchers.
Please cite it in all papers where it is used.
For complete citation information, usecitation(package="statnet")
.
The statnet suite of packages allows the
user to explore a large number of potential models
for their network data. These can be seen by typing
help("ergm-terms",package="ergm")
(once the package
ergm has been installed). For more information on
the models and terms see Morris, Handcock, and Hunter (2008).
The purpose of the package is to allow additional terms can be coded up by users (you!) and be used at native speeds with statnet. So the suite of packages can be extended with minimal work by the user. In addition the core packages are not altered and so the new packages benefit from improvements to the core suite.
The process of creating new terms is explained in depth by the document entitled by Hunter, Goodreau, and Handcock (2010) that is found in the inst/doc directory of this package.
In brief, to add a new term you need to (all file references are relative to the package directory).:
1. Download the source version of this package. For example, in R use
download.packages("ergm.userterms", destdir=".", type="source")
where destdir
is the directory to save the source
(e.g., ergm.userterms_3.0.tar.gz
) in.
2. Unpack the source into a directory
(e.g., on Linux or the Mac
tar -vzxf ergm.userterms_3.0.tar.gz
).
3. Optionally, rename the package name from
ergm.userterms
to some something
more evocative of its use (e.g., myergm
).
This can be done using a global change to the files in the
directory. Optionally, edit the DESCRIPTION
file to reflect the
use of the package.
4. Edit R/InitErgmTerm.users.R
to add
R InitErgmTerm
functions for the new terms.
5. Edit src/changestats.users.c
to add C
functions (like the example already in that file) to compute the
new change statistics.
6. Compile the package using the usual R
tools (e.g., R CMD build myergm
and
R CMD INSTALL myergm
).
7. Run it! It depends on ergm and network, of course. See the example below.
Hunter DR, Goodreau SM, Handcock MS (2013). ergm.userterms: A Template Package for Extending statnet, Journal of Statistical Software 52(2), 1-25, URL http://www.jstatsoft.org/v52/i02/.
statnet, network, ergm, ergm-terms
data(faux.mesa.high) summary(faux.mesa.high~mindegree(2)) fit <- ergm(faux.mesa.high~mindegree(2), estimate="MPLE") summary(fit)
data(faux.mesa.high) summary(faux.mesa.high~mindegree(2)) fit <- ergm(faux.mesa.high~mindegree(2), estimate="MPLE") summary(fit)
ergm.userterms
prior to 3.1Explanation and instructions for updating custom ERGM terms
developed prior to the release of ergm
version 3.1 (including 3.0–999 preview release) to be used with versions 3.1 or later.
ergm.userterms
— Statnet's
mechanism enabling users to write their own ERGM terms — comes in a
form of an R package containing files for the user to put their own
statistics into (i.e., changestats.user.h
,
changestats.user.c
, and InitErgmTerm.user.R
), as well as
some boilerplate to support them (e.g., edgetree.h
,
edgetree.c
, changestat.h
, changestat.c
, etc.).
Although the ergm.userterms
API
is stable, recent developments in ergm have necessitated the
boilerplate files in ergm.userterms to be updated. To reiterate, the
user-written statistic source code (changestats.user.h
,
changestats.user.c
, and InitErgmTerm.user.R
) can be used
without modification, but other files that came with the package need
to be changed.
To make things easier in the future, we have implemented a mechanism (using R's LinkingTo API, in case you are wondering) that will keep things in sync in releases after the upcoming one. However, for the upcoming release, we need to transition to this new mechanism.
The transition entails the following steps. They only need to be done once for a package. Future releases will keep up to date automatically.
Download the up-to-date ergm.userterms
source from CRAN
using, e.g., download.packages
and unpack it.
Copy the R and C files defining the user-written terms
(usually changestats.user.h
, changestats.user.c
, and
InitErgmTerm.user.R
) and only those files from the old
ergm.userterms
source code to
the new. Do not copy the boilerplate files that you did not
modify.
If you have customized the package DESCRIPTION
file
(e.g., to change the package name) or zzz.R
(e.g., to change
the startup message), modify them as needed in the updated
ergm.userterms
, but do
not simply overwrite them with their old versions.
Make sure that your ergm
installation is up to date, and rebuild
ergm.userterms
.
This is a new term for the ergm
package
that counts the number of nodes in the network with at least
a given degree.
The function ergm
is used to fit linear
exponential
random graph models, in which
the probability of a given network, , on a set of nodes
is
, where
is a vector of network statistics for
,
is a parameter vector of the same
length and
is the
normalizing constant for the distribution.
The network statistics are entered as terms in the
function call to
ergm
.
The ergm
package contains a wide range of terms.
For the details on the possible
<model terms>
, see ergm-terms
.
The ergm.userterms
package provides a template for
adding new terms.
The terms can be used throughout the ergm
package
and behave identically to the supplied terms.
mindegree(mindeg, by=NULL)
Minimum Degree:
The mindeg
argument is an integer. This
term adds one
network statistic to the model being the
number of nodes in the network of at least degree mindeg
.
That is, the statistic equals the number of nodes in the
network with mindeg
or more edges.
The optional argument
by
specifies a vertex attribute (see Specifying Vertex
Attributes and Levels
for details).
If this is specified,
then degrees are calculated using the subnetwork consisting
of only
edges whose endpoints have the same value of the by
attribute.
This term can only be used with undirected networks.
Hunter DR, Goodreau SM, Handcock MS (2013). ergm.userterms: A Template Package for Extending statnet, Journal of Statistical Software 52(2), 1-25, URL http://www.jstatsoft.org/v52/i02/.
statnet, network, ergm, ergm-terms
data(florentine) summary(flomarriage~mindegree(3)) summary(flomarriage~mindegree(1,by="priorates")) fit <- ergm(flomarriage~edges+mindegree(1,by="priorates")) summary(fit)
data(florentine) summary(flomarriage~mindegree(3)) summary(flomarriage~mindegree(1,by="priorates")) fit <- ergm(flomarriage~edges+mindegree(1,by="priorates")) summary(fit)