Last chance! 50% off unlimited learning
Sale ends in
ergmm
is used to fit latent space and latent space cluster random network models,
as described in Hoff, Raftery and Handcock (2002) and
Handcock, Raftery and tantrum (2005).
ergmm
can return either a Bayesian model fit
or an approximate MLE based on a Monte Carlo scheme.ergmm(formula, theta0=NULL,
burnin=1000, MCMCsamplesize=1000, interval=100, maxit=5,
latent.control=list(maxit=40,penalty.sigma=c(10,0.5),MLEonly=FALSE),
returnMCMCstats=TRUE, randseed=NULL,
verbose=FALSE, ...)
g ~ + ...
,
where g
is a network object or a matrix that can be coerced to a
network object, and
,
, etc, are each
terms chosenstartatMPLE=TRUE
).burnin
should be set to a fairly large number.latent
term is included in the model. maxit
sets the maximum number of iterations to use in the
Quasi-Newton-RapTRUE
the matrix of change
statistics from the MCMC run is returned as component $sample
.
This matrix is actually an object of class mcmc
and can be
used directly in the CODA
package tosample(10000000, size=1)
.TRUE
, we will print out more information as
we run the program, including (currently) some goodness of fit
statistics.ergmm
returns an object of class ergmm
that is a list
consisting of the following elements:$sample
is roughly a random sample from the distribution
of network statistics specified by the model with the parameter equal
to $MCMCtheta
. In the current version, if startatMPLE is
TRUE
, then $MCMCtheta
equals the MPLE.ergmm
function.$returnMCMCstats=TRUE
, this is
the the matrix of change statistics from the MCMC run.print.ergmm
for details on how
an ergmm
object is printed. Note that we have written a
function, summary.ergmm
that returns a summary of the
relevant parts of the ergmm
object in concise summary
format.latentnet
package itself allows only three type of terms:
latent
, latentcluster
and latentcov
.
The umbrella ergm
package allows the user to explore a large number
of potential models for their network data in addition to these terms. The
terms currently supported by the program,
and a brief description of each is given in the documentation
terms.ergm
for the ergm
package.
In the formula for the model, the model terms are various function-like
calls, some of which require arguments, separated by +
signs.
The current options are:
latent(k=2, ...)
k
is the dimension of the latent space. For information on the
other arguments look for help on latent
.
}
latentcluster(k=2, ngroups, ...)
k
is the dimension of the latent space
and ngroups
is the number of clusters in the latent space.
For information on the other arguments look for help on
latentcluster
.
}
latentcov(cv, attrname=NULL)
cv
is either a matrix of
covariates on each pair of vertices, or a network;
if the latter, optional argument
attrname
provides the name of the edge attribute to
use for edge values. This option adds one statistic to the
model, representing the effect of the given covariate on
the appearance of edges. edgecov
can be called more
than once, to model the effects of multiple covariates.
}Mark S. Handcock, Adrian E. Raftery and Jeremy Tantrum. Model-Based Clustering for Social Networks. Working Paper Number 46, Center for Statistics and the Social Sciences, University of Washington, April 2005.
#
# See http://www.csde.washington.edu/statnet
# for examples
#
# load the Florentine marriage data matrix
#
data(flo)
#
# attach the sociomatrix for the Florentine marriage data
# This is not yet a network object.
#
flo
#
# Create a network object out of the adjacency matrix
#
flomarriage <- network(flo,directed=FALSE)
flomarriage
#
# print out the sociomatrix for the Florentine marriage data
#
sociomatrix(flomarriage)
#
# create a vector indicating the wealth of each family (in thousands of lira)
# and add it as a covariate to the network object
#
flomarriage <- set.vertex.attribute(flomarriage,"wealth",
c(10,36,27,146,55,44,20,8,42,103,48,49,10,48,32,3))
flomarriage
#
# create a plot of the social network
#
plot(flomarriage)
#
# now make the vertex size proportional to their wealth
#
plot(flomarriage, vertex.cex="wealth", main="Marriage Ties")
#
# Use 'data(package = "latentnet")' to list the data sets in a
#
data(package="latentnet")
#
# Using Sampson's Monk data, lets fit a
# simple latent position model
#
data(sampson)
#
# Get the group labels
#
group <- get.vertex.attribute(samplike,"group")
samp.labs <- substr(group,1,1)
#
samp.fit <- ergmm(samplike ~ latent(k=2), burnin=10000,
MCMCsamplesize=2000, interval=30)
#
# See if we have convergence in the MCMC
mcmc.diagnostics(samp.fit)
#
# Plot the fit
#
plot(samp.fit,label=samp.labs, vertex.col="group")
#
# Using Sampson's Monk data, lets fit a latent clustering model
#
samp.fit <- ergmm(samplike ~ latentcluster(k=2, ngroups=3), burnin=10000,
MCMCsamplesize=2000, interval=30)
#
# See if we have convergence in the MCMC
mcmc.diagnostics(samp.fit)
#
# Lets look at the goodness of fit:
#
plot(samp.fit,label=samp.labs, vertex.col="group")
plot(samp.fit,pie=TRUE,label=samp.labs)
plot(samp.fit,density=c(2,2))
plot(samp.fit,contours=5,contour.color="red")
plot(samp.fit,density=TRUE,drawarrows=TRUE)
#
# Add contours
#
ergmm.add.contours(samp.fit,nlevels=8,lwd=2)
points(samp.fit$Z.mkl,pch=19,col=samp.fit$class)
#
# Try a covariate on the group
#
samegroup <- outer(group, group, "==")
diag(samegroup) <- 0
samp.fit <- ergmm(samplike ~ latentcov(samegroup) + latent(k=2))
summary(samp.fit)
Run the code above in your browser using DataLab