A function to apply a given series of changes to a network.
Gives the network a series of timed proposals it can't refuse. Returns the statistics of the network, and, optionally, the final network.
tergm.godfather( formula, changes = NULL, toggles = changes[, -4, drop = FALSE], start = NULL, end = NULL, end.network = FALSE, stats.start = FALSE, verbose = FALSE, control = control.tergm.godfather() )
formula |
An |
changes |
A matrix with four columns: time, tail, head, and
new value, describing the changes to be made. Can only be used if
LHS of |
toggles |
A matrix with three columns: time, tail, and head,
giving the dyads which had changed. Can only be used if LHS of
|
start |
Time from which to start applying changes. Note that
the first set of changes will take effect at
|
end |
Time from which to finish applying changes. Defaults to the last time point at which a change occurs. |
end.network |
Whether to return a network that
results. Defaults to |
stats.start |
Whether to return the network statistics at
|
verbose |
Whether to print progress messages. |
control |
A control list generated by
|
If end.network==FALSE (the default), an
mcmc object with the requested network statistics
associed with the network series produced by applying the
specified changes. Its mcmc attributes encode the
timing information: so start(out) gives the time
point associated with the first row returned, and
end(out) out the last. The "thinning interval" is
always 1.
If end.network==TRUE, return a network object with
lasttoggle "extension", representing the final network, with a
matrix of statistics described in the previous paragraph attached to it as
an attr-style attribute "stats".
simulate.stergm, simulate.network, simulate.networkDynamic
g1 <- network.initialize(10, dir=FALSE)
g1[1,2] <- 1
g1[3,4] <- 1
g1 %n% "time" <- 0
g1 %n% "lasttoggle" <- -1-rgeom(network.dyadcount(g1),1/4)
dc <- matrix(rnorm(100),10,10); dc <- dc+t(dc)
# Simulate a network, tracking its statistics.
simnet <- simulate(g1, formation=~edges, dissolution=~edges, coef.form=-1, coef.diss=1,
time.slices=50, monitor=~degree(1)+mean.age+degree.mean.age(1)+
mean.age(log=TRUE)+degree.mean.age(1,log=TRUE)+
degrange(1,3)+mean.age+degrange.mean.age(1,3)+
mean.age(log=TRUE)+degrange.mean.age(1,3,log=TRUE)+
edge.ages+edgecov(dc)+edgecov.ages(dc),
output="networkDynamic")
sim.stats <- attr(simnet, "stats")
print(head(sim.stats))
sim.stats <- as.matrix(sim.stats)
# Replay the simulation using a networkDynamic, monitoring a potentially different set of
# statistics (but same in this case).
gf1.stats <- tergm.godfather(simnet~degree(1)+mean.age+degree.mean.age(1)+
mean.age(log=TRUE)+degree.mean.age(1,log=TRUE)+
degrange(1,3)+mean.age+degrange.mean.age(1,3)+
mean.age(log=TRUE)+degrange.mean.age(1,3,log=TRUE)+
edge.ages+edgecov(dc)+edgecov.ages(dc),
start=0, end=50)
print(head(gf1.stats))
gf1.stats <- as.matrix(gf1.stats)
# Replay the simulation using the initial network + list of changes.
gf2.stats <- tergm.godfather(g1~degree(1)+mean.age+degree.mean.age(1)+
mean.age(log=TRUE)+degree.mean.age(1,log=TRUE)+
degrange(1,3)+mean.age+degrange.mean.age(1,3)+
mean.age(log=TRUE)+degrange.mean.age(1,3,log=TRUE)+
edge.ages+edgecov(dc)+edgecov.ages(dc),
start=0, end=50, changes=attr(simnet,"changes"))
print(head(gf2.stats))
gf2.stats <- as.matrix(gf2.stats)
# We can also compare them to the network statistics summarized.
summ.stats <- summary(simnet~degree(1)+mean.age+degree.mean.age(1)+
mean.age(log=TRUE)+degree.mean.age(1,log=TRUE)+
degrange(1,3)+mean.age+degrange.mean.age(1,3)+
mean.age(log=TRUE)+degrange.mean.age(1,3,log=TRUE)+
edge.ages+edgecov(dc)+edgecov.ages(dc), at=1:50)
print(head(summ.stats))
tol <- sqrt(.Machine$double.eps)
# If they aren't all identical, we are in trouble.
stopifnot(all.equal(sim.stats,gf1.stats),
all.equal(sim.stats,gf2.stats),
all.equal(sim.stats,summ.stats))Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.