This function simulates a time series from the distribution estimated by the given covlmc object.

## Usage

```
# S3 method for covlmc
simulate(object, nsim = 1, seed = NULL, covariate, init = NULL, ...)
```

## Arguments

- object
a fitted covlmc object.

- nsim
length of the simulated time series (defaults to 1).

- seed
an optional random seed (see the dedicated section).

- covariate
values of the covariates.

- init
an optional initial sequence for the time series.

- ...
additional arguments.

## Value

a simulated discrete time series of the same type as the one used to
build the covlmc with a `seed`

attribute (see the Random seed section). The
results has also the `dts`

class to hide the `seed`

attribute when using
`print`

or similar function.

## Details

A VLMC with covariates model needs covariates to compute its transition
probabilities. The covariates must be submitted as a data frame using the
`covariate`

argument. In addition, the time series can be initiated by a
fixed sequence specified via the `init`

parameter.

## Extended contexts

As explained in details in `loglikelihood.covlmc()`

documentation and in
the dedicated `vignette("likelihood", package = "mixvlmc")`

, the first
initial values of a time series do not in general have a proper context for
a COVLMC with a non zero order. In order to simulate something meaningful
for those values, we rely on the notion of extended context defined in the
documents mentioned above. This follows the same logic as using
`loglikelihood.covlmc()`

with the parameter `initial="extended"`

. All
covlmc functions that need to manipulate initial values with no proper
context use the same approach.

## Random seed

This function reproduce the behaviour of `stats::simulate()`

. If `seed`

is
`NULL`

the function does not change the random generator state and returns
the value of .Random.seed as a `seed`

attribute in the return value. This
can be used to reproduce exactly the simulation results by setting
.Random.seed to this value. Notice that if the random seed has not be
initialised by R so far, the function issues a call to `runif(1)`

to
perform this initialisation (as is done in `stats::simulate()`

).

It `seed`

is an integer, it is used in a call to `set.seed()`

before the
simulation takes place. The integer is saved as a `seed`

attribute in the
return value. The integer seed is completed by an attribute `kind`

which
contains the value `as.list([RNGkind()])`

exactly as with
`stats::simulate()`

. The random generator state is reset to its original
value at the end of the call.

## See also

`stats::simulate()`

for details and examples on the random number generator setting

## Examples

```
pc <- powerconsumption[powerconsumption$week == 5, ]
dts <- cut(pc$active_power, breaks = c(0, quantile(pc$active_power, probs = c(0.5, 1))))
dts_cov <- data.frame(day_night = (pc$hour >= 7 & pc$hour <= 17))
m_cov <- covlmc(dts, dts_cov, min_size = 5)
# new week with day light from 6:00 to 18:00
new_cov <- data.frame(day_night = rep(c(rep(FALSE, 59), rep(TRUE, 121), rep(FALSE, 60)), times = 7))
new_dts <- simulate(m_cov, nrow(new_cov), seed = 0, covariate = new_cov)
new_dts_2 <- simulate(m_cov, nrow(new_cov), seed = 0, covariate = new_cov, init = dts[1:10])
```