---
title: "Simulation"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Simulation}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

The `sim()` function will combine the model, the parameters, and the regimen, and simulate out the ODE system. It will return a `data.frame` in the long format, i.e. one observation per row, and split by compartment and individual. The command for `sim()` looks e.g. like this:

```{r load-lib, echo=FALSE}
library("PKPDsim")
```

```{r sim, eval=FALSE}
dat <- sim(
  ode = model,              # created using new_ode_model()
  parameters = parameters,  # a named list of parameter values
  regimen = regimen         # created using new_regimen
)
```

Here is a minimal example using real code:

```{r sim-real-example}
model <- new_ode_model("pk_1cmt_iv")
parameters <- list(CL = 5, V = 50)
regimen <- new_regimen(
  amt = 100,
  n = 3,
  interval = 12,
  type = "infusion",
  t_inf = 2
)

dat1 <- sim(
  ode = model,
  parameters = parameters,
  regimen = regimen
)
head(dat1)
```

By default, the observation times will include an observation every 1 hour. However, you can specify a vector of observation times to get only those observations:

```{r obs-times}
dat2 <- sim(
  ode = model,
  parameters = parameters,
  regimen = regimen,
  t_obs = c(0.5, 2, 4, 8, 12, 16, 24)
)
head(dat2)
```
