---
title: "Adapt your parameters"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Adapt your parameters}
  %\VignetteEncoding{UTF-8}
  %\VignetteEngine{knitr::rmarkdown}
editor_options: 
  chunk_output_type: console
---

```{r, echo=FALSE, warning=FALSE, message=FALSE, results='hide'}
EXPORT_PNG <- FALSE
```

### Prerequisite

The examples below require the package `campismod`.

```{r echo=TRUE, warning=FALSE, message=FALSE}
library(campsismod)
```

### Retrieve your parameters

The examples below are illustrated based on the reference 2-compartment PK model that you find in the built-in library. This model has 5 parameters. All these parameters have inter-individual variability defined.

```{r}
model <- model_suite$pk$`2cpt_fo`
model
```

To retrieve a parameter by its name, just call the method `find` as follows:

```{r}
model %>% find(Theta("CL"))
model %>% find(Omega("KA"))
model %>% find(Sigma("RUV_FIX"))
```

These parameters can also alternatively be retrieved by their index(es). Use the specific method `get_by_index` created for that purpose:

```{r}
model@parameters %>% get_by_index(Theta(index=5))
model@parameters %>% get_by_index(Omega(index=1, index2=1))
model@parameters %>% get_by_index(Sigma(index=1, index2=1))
```

### Access parameter values

Accessing parameter values is straightforward. Parameters have a slot `value` that may be accessed.

```{r}
thetaCL <- model %>% find(Theta("CL"))
thetaCL@value
```

For OMEGA and SIGMA parameters, be careful; the interpretation of this value depends on the `type` of the parameter. It may be `var` (for a variance), `covar` (for a covariance), `sd` (for standard deviation), `cv` (value expressed as coefficient of variation), `cv%` (value expressed as coefficient of variation in percentage).  
For a quick access to the value as variance or covariance, the method `standardise` can be called first on the parameter itself. This is especially useful for values expressed in CV or in standard deviation.

```{r}
theta <- Omega(name="TEST", index=1, index2=1, value=15, type="cv%")
theta@value # 15 is returned

theta_standardised <- theta %>% standardise() # Conversion to variance
theta_standardised 
theta_standardised@value
```

### Replace parameters

Parameters can be replaced easily. Here are a few examples:

```{r}
model <- model %>% replace(Theta("KA", value=2)) # Previous value for KA was 1
model <- model %>% replace(Omega("CL", value=20, type="cv%")) # Previous value was a 25% CV
model
```

### Delete parameters

Parameters can be deleted. Please note that it does not do anything to the equations. Also, the indexes won't be re-adjusted. Here are a few examples:

```{r}
model <- model %>% delete(Theta("KA"))
model <- model %>% delete(Omega("CL"))
model
```

As expected, this model will not be valid anymore:
```{r}
tryCatch({validObject(model, complete=TRUE)}, error=function(msg) {
  print(msg)
})
```
