simulate
is used to draw from separable temporal
exponential family random network models in their natural parameterizations.
See stergm
for more information on these models.
# S3 method for stergm
simulate(object, nsim = 1, seed = NULL,
coef.form = object$formation.fit$coef,
coef.diss = object$dissolution.fit$coef,
constraints = object$constraints, monitor = object$targets,
time.slices = 1, time.start = NULL, time.burnin = 0,
time.interval = 1, control = control.simulate.stergm(),
statsonly = NULL, output = c("networkDynamic", "stats", "changes",
"final"), nw.start = NULL, stats.form = FALSE, stats.diss = FALSE,
duration.dependent = NULL, verbose = FALSE, ...)# S3 method for network
simulate(object, nsim = 1, seed = NULL, formation,
dissolution, coef.form, coef.diss, constraints = ~., monitor = NULL,
time.slices = 1, time.start = NULL, time.burnin = 0,
time.interval = 1, time.offset = 1,
control = control.simulate.network(), statsonly = NULL,
output = c("networkDynamic", "stats", "changes", "final"),
stats.form = FALSE, stats.diss = FALSE, duration.dependent = NULL,
verbose = FALSE, ...)
# S3 method for networkDynamic
simulate(object, nsim = 1, seed = NULL,
formation = attr(object, "formation"), dissolution = attr(object,
"dissolution"), coef.form = attr(object, "coef.form"),
coef.diss = attr(object, "coef.diss"), constraints = NVL(attr(object,
"constraints"), ~.), monitor = attr(object, "monitor"),
time.slices = 1, time.start = NULL, time.burnin = 0,
time.interval = 1, time.offset = 1,
control = control.simulate.network(), statsonly = NULL,
output = c("networkDynamic", "stats", "changes"), stats.form = FALSE,
stats.diss = FALSE, duration.dependent = NULL, verbose = FALSE,
...)
an object of type stergm
giving a model fit or
of type network
giving the initial network.
simulate.network
understands the lasttoggle
"API".
Number of replications (separate chains of networks) of the
process to run and return. The networkDynamic
method only
supports nsim=1
.
Random number integer seed. See set.seed
.
Parameters for the model from which the post-formation network is drawn.
As coef.form
, but for the post-dissolution network.
A one-sided formula specifying one or more constraints on
the support of the distribution of the networks being modeled, using syntax
similar to the formula
argument. Multiple constraints may be given,
separated by “+” operators. Together with the model terms in the
formula and the reference measure, the constraints define the distribution
of networks being modeled.
It is also possible to specify a proposal function directly by passing a
string with the function's name. In that case, arguments to the proposal
should be specified through the prop.args
argument to
control.ergm
.
The default is ~.
, for an unconstrained model.
See the ERGM constraints documentation for the constraints implemented in the ergm package. Other packages may add their own constraints.
For STERGMs in particular, the constraints apply to the post-formation and the post-dissolution network, rather than the final network. This means, for example, that if the degree of all vertices is constrained to be less than or equal to three, and a vertex begins a time step with three edges, then, even if one of its edges is dissolved during its time step, it won't be able to form another edge until the next time step. This behavior may change in the future.
Note that not all possible combinations of constraints are supported.
Either a one-sided formula specifying one or more terms whose
value is to be monitored, or a string containing "formation"
or
"dissolution"
, to monitor their respective terms, or "all"
to
monitor distinct terms from both.
Number of time slices (or statistics) to return from each
replication of the dynamic process. See below for return types. Defaults to
1, which, if time.burnin==0
and time.interval==1
(the
defaults), advances the process one time step.
An optional argument specifying the time point at which the simulation is to start. See Details for further information.
Number of time steps to discard before starting to
collect network statistics. Actual network will only be returned if
time.burnin==0
.
Number of time steps between successive recordings of
network statistics. Actual network will only be returned if
time.interval==1
.
A list of control parameters for algorithm tuning.
Constructed using control.simulate.stergm
or
control.simulate.network
.
Deprecated in favor of output
.
A character vector specifying output type: one of "networkDynamic" (the default), "stats", and "changes", with partial matching allowed. See Value section for details.
A specification for the starting network to be used by
simulate.stergm
, optional for EGMME fits, but required for CMLE and
CMPLE fits:
use i
th time-point's
network, where the first network in the series used to fit the model is
defined to be at the first time point;
i
use i
th
time-point's network, where the first network in the series used to fit the
model is defined to be at the first time point;
"first"
or "last"
the first or last time point used in fitting the model; or
network
specify the network directly.
networkDynamic
s
cannot be used as starting networks for simulate.stergm
at this time.
(They can be used as starting networks for simulate.networkDynamic
,
of course.)
Logical: Whether to return
formation/dissolution model statistics. This is not the recommended method:
use monitor
argument instead.
Logical: Whether the model terms in formula or model are duration dependent. E.g., if a duration-dependent term is used in estimation/simulation model, the probability of forming or dissolving a tie may dependent on the age the dyad status.
Logical: If TRUE, extra information is printed as the Markov chain progresses.
Further arguments passed to or used by methods.
One-sided ergm
-style formulas for
the formation and dissolution models, respectively.
Argument specifying the offset between the point when the
state of the network is sampled (time.start
) and the the beginning of
the spell that should be recorded for the newly simulated network state.
Depends on the output
argument:
If stats.form==FALSE
and
stats.diss==FALSE
, an mcmc
matrix with
monitored statistics, and if either of them is TRUE
, a
list containing elements stats
for statistics specified in the
monitor
argument, and stats.form
and stats.diss
for the respective formation and dissolution statistics.
If stats.form==FALSE
and
stats.diss==FALSE
and no monitored statistics are specified,
an empty list is returned, with a warning.
When nsim>1
, an mcmc.list
(or list of them) of
the statistics is returned instead.
A networkDynamic
object representing the simulated process, with ties present in the
initial network having onset -Inf
and ties present at the end
of the simulation having terminus +Inf
. The method for
networkDynamic
returns the initial
networkDynamic
with simulated changes
applied to it. The net.obs.period
network attribute is
updated (or added if not existing) to reflect the time period that was
simulated. If the network does not have any persistent.ids
defined for vertices, a vertex.pid will be attached in a vertex attribute
named 'tergm_pid'
to facilitate 'bookkeeping' between the networkDynamic
argument and the simulated network time step.
Additionally, attributes (attr
, not network
attributes) are attached as follows:
formation
, dissolution
, monitor
:Formation, dissolution, and monitoring formulas used in the simulation, respectively.
stats
, stats.form
, stats.diss
:Network statistics as above.
coef.form
, coef.diss
:Coefficients used in the simulation.
changes
:A four-column matrix summarizing the changes in the
"changes"
output. (This may be removed in the future.)
nsim>1
, a network.list
of these
networkDynamic
s is returned.An integer matrix with four columns (time
,
tail
, head
, and to
), giving the time-stamped
changes relative to the current network. to
is 1
if
a tie was formed and 0
if a tie was dissolved. The
convention for time
is that it gives the time point during
which the change is effective. For example, a row
c(5,2,3,1)
indicates that between time \(4\) and \(5\),
a tie from node \(2\) to node \(3\) was formed, so that it was
absent at time point \(4\) and present at time point \(5\);
while a row c(5,2,3,0)
indicates that in that time, that
tie was dissolved, so that it is was present at time point \(4\)
and absent at time point \(5\).
Additionally, same attributes (attr
, not network
attributes) as with output=="networkDynamic"
are attached.
When nsim>1
, a list of these change matrices is returned.
A network
object representing the last network in the series generated. This
is not implemented in the method for
networkDynamic
.
lasttoggle
attributes are also included.
Additionally, attributes (attr
, not network
attributes) are attached as follows:
Formation, dissolution, and monitoring formulas used in the simulation, respectively.
Network statistics as above.
Coefficients used in the simulation.
A four-column matrix summarizing the changes in the
"changes"
output. (This may be removed in the future.)
nsim>1
, a network.list
of these
network
s is returned.The dynamic process is run forward and the results are returned. For the
method for networkDynamic
, the simulation is resumed from the
last generated time point of object
, by default with the same model
and parameters.
The starting network for the stergm
object method
(simulate.stergm
) is determined by the nw.start
argument.
If time.start
is specified, it is used as the initial
time index of the simulation.
If time.start
is not specified (is NULL
), then
if the object
carries a time stamp from which to start
or resume the simulation, either in the form
of a "time"
network attribute (for the
network
method --- see the
lasttoggle
"API") or
in the form of an net.obs.period
network attribute (for the
networkDynamic
method), this attribute will be used. (If
specified, time.start
will override it with a warning.)
Othewise, the simulation starts at 0.
# NOT RUN {
logit<-function(p)log(p/(1-p))
coef.form.f<-function(coef.diss,density) -log(((1+exp(coef.diss))/(density/(1-density)))-1)
# Construct a network with 20 nodes and 20 edges
n<-20
target.stats<-edges<-20
g0<-network.initialize(n,dir=TRUE)
g1<-san(g0~edges,target.stats=target.stats,verbose=TRUE)
S<-10
# To get an average duration of 10...
duration<-10
coef.diss<-logit(1-1/duration)
# To get an average of 20 edges...
dyads<-network.dyadcount(g1)
density<-edges/dyads
coef.form<-coef.form.f(coef.diss,density)
# ... coefficients.
print(coef.form)
print(coef.diss)
# Simulate a networkDynamic
dynsim<-simulate(g1,formation=~edges,dissolution=~edges,
coef.form=coef.form,coef.diss=coef.diss,
time.slices=S,verbose=TRUE)
# "Resume" the simulation.
dynsim2<-simulate(dynsim,time.slices=S,verbose=TRUE)
# }
Run the code above in your browser using DataLab