Simulates a discretized Euler-Maruyama approximation to the true SDE trajectory.
sde.sim( model, x0, theta, dt, dt.sim, nobs, burn = 0, nreps = 1, max.bad.draws = 5000, verbose = TRUE )
| model | An |
|---|---|
| x0 | A vector or a matrix of size |
| theta | A vector or matrix of size |
| dt | Scalar interobservation time. |
| dt.sim | Scalar interobservation time for simulation. That is, interally the interobservation time is |
| nobs | The number of SDE observations per trajectory to generate. |
| burn | Scalar burn-in value. Either an integer giving the number of burn-in steps, or a value between 0 and 1 giving the fraction of burn-in relative to |
| nreps | The number of SDE trajectories to generate. |
| max.bad.draws | The maximum number of times that invalid forward steps are proposed. See Details. |
| verbose | Whether or not to display information on the simulation. |
A list with elements:
dataAn array of size nobs x ndims x nreps containing the simulated SDE trajectories.
paramsThe vector or matrix of parameter values used to generate the data.
dt, dt.simThe actual and internal interobservation times.
nbadThe total number of bad draws.
The simulation algorithm is a Markov process with \(Y_0 = x_0\) and
$$
Y_{t+1} \sim \mathcal{N}(Y_t + \mathrm{dr}(Y_t, \theta) dt_{\mathrm{sim}}, \mathrm{df}(Y_t, \theta) dt_{\mathrm{sim}}),
$$
where \(\mathrm{dr}(y, \theta)\) is the SDE drift function and \(\mathrm{df}(y, \theta)\) is the diffusion function on the variance scale. At each step, a while-loop is used until a valid SDE draw is produced. The simulation algorithm terminates after nreps trajectories are drawn or once a total of max.bad.draws are reached.
# load pre-compiled model hmod <- sde.examples("hest") # initial values x0 <- c(X = log(1000), Z = 0.1) theta <- c(alpha = 0.1, gamma = 1, beta = 0.8, sigma = 0.6, rho = -0.8) # simulate data dT <- 1/252 nobs <- 2000 burn <- 500 hsim <- sde.sim(model = hmod, x0 = x0, theta = theta, dt = dT, dt.sim = dT/10, nobs = nobs, burn = burn)#>#>#>#>par(mfrow = c(1,2)) plot(hsim$data[,"X"], type = "l", xlab = "Time", ylab = "", main = expression(X[t])) plot(hsim$data[,"Z"], type = "l", xlab = "Time", ylab = "", main = expression(Z[t]))