# How to generate a Minimal Working Example

# Please report any issue

The only think that can help is to create a Minimal Working Example (MWE). And we provide here a set of MWE you can modify to obtain yours.

Feel free to ask question here: New Issue for morse R package

Below is reported a set of minimal examples where each chunk (piece of `R` code in grey area) work on its own.

## Loading `morse` and its dependencies (JAGS, C++)

Use the two classical `R` commands:

    install.packages(morse) # install the package
    library(morse) # load the package

Recently, a lot of warning messages have appeared when downloading the `morse` package due to an update in its dependencies. We fix these warnings and we’ll try to do so as soon as possible when new ones will appear.

Again, feel free to report such messages if they disturb your data processing: New Issue for morse R package

The `morse` package is linked to JAGS and C++.

## JAGS

JAGS is the Bayesian sampler used to make inference with survival models.

1. Download JAGS: https://sourceforge.net/projects/mcmc-jags/

2. Test and find JAGS

Once installed, JAGS can be lost in the PATH. To help solving this issue, you can use package `runjags` which is not within `morse` so you have to install it.

    install.packages("runjags")
    library("runjags")
    testjags()

We assume hereafter that the `morse` package is already installed.

The output should look like this:

    You are using R version 4.0.2 (2020-06-22) on a windows machine, with the RStudio GUI
    JAGS version 4.3.0 found successfully using the command 'C:/Program Files/JAGS/JAGS-4.3.0/x64/bin/jags-terminal.exe'
    The rjags package is installed

Otherwise, you can tell your system where JAGS executable is (somewhere in `'C:/Program Files/JAGS/JAGS-4.3.0/x64/bin/jags-terminal.exe'` on windows machines):

    testjags(jags=runjags.getOption('jagspath')) # replace jagspath by the PATH to JAGS
    # FOR INSTANCE, on the current machine I do:
    testjags(jags=runjags.getOption('C:/Program Files/JAGS/JAGS-4.3.0/x64/bin/jags-terminal.exe'))

## C++

C++ is used for running simulations. In R, you should not have issue with C++ requirement since it is very well integrated (many R functions are simple interfaces to C++ functions).

For now, we do not have any trouble reported on this use. But feel free to report if there is one: New Issue for morse R package

# Survival analysis

## Fit

    library(morse)
    data("propiconazole")
    survData_PRZ = survData(propiconazole)
    fit_cstSD = survFit(survData_PRZ, model_type = "SD")

### … with plot

    library(morse)
    data("propiconazole")
    survData_PRZ = survData(propiconazole)
    fit_cstSD = survFit(survData_PRZ, model_type = "SD")
    plot(fit_cstSD)

## LCx

    library(morse)
    data("propiconazole")
    survData_PRZ = survData(propiconazole)
    fit_cstSD = survFit(survData_PRZ, model_type = "SD")
    LCx(fit_cstSD, X = 50)

### … with plot

    library(morse)
    data("propiconazole")
    survData_PRZ = survData(propiconazole)
    fit_cstSD = survFit(survData_PRZ, model_type = "SD")
    LCX_cstSD = LCx(fit_cstSD, X = 50)
    plot(LCX_cstSD)

### MFX

    library(morse)
    data("propiconazole")
    survData_PRZ = survData(propiconazole)
    fit_cstSD = survFit(survData_PRZ, model_type = "SD")
    data_4MFx <- data.frame(time = 1:10,
                            conc = c(0,0.5,8,3,0,0,0.5,8,3.5,0))
    MFx_PRZ_cstSD <- MFx(object = fit_cstSD, data_predict = data_4MFx, ode = TRUE)

### … with plot

    library(morse)
    data("propiconazole")
    survData_PRZ = survData(propiconazole)
    fit_cstSD = survFit(survData_PRZ, model_type = "SD")
    data_4MFx <- data.frame(time = 1:10,
                            conc = c(0,0.5,8,3,0,0,0.5,8,3.5,0))
    MFx_PRZ_cstSD <- MFx(object = fit_cstSD, data_predict = data_4MFx, ode = TRUE)
    plot(MFx_PRZ_cstSD)

### Predict survival probability

    library(morse)
    data("propiconazole")
    survData_PRZ = survData(propiconazole)
    fit_cstSD = survFit(survData_PRZ, model_type = "SD")
    data_example <- data.frame(
       time = c(1,1.9,2,15,15.1,20),
       conc = c(0,0,20,20,0,0),
       replicate = rep("example", 6)
    )
    predict_example_NULL = predict_ode(
      object = fit_cstSD,
      data_predict = data_example,
      mcmc_size = 10,
      interpolate_length = NULL)

### … with plot

with few exposure profile time points:

    plot(predict_example_NULL)

test option `interpolate_length`

    predict_example_100 = predict_ode(
      object = fit_cstSD,
      data_predict = data_example,
      mcmc_size = 10,
      interpolate_length = 100)
    plot(predict_example_100)

and with a very detailed exposure profile

    data("FOCUSprofile")
    predict_FOCUS = predict_ode(
      object = fit_cstSD,
      data_predict = FOCUSprofile,
      mcmc_size = 10,
      interpolate_length = NULL)
    plot(predict_FOCUS)

### Predict number of survival

    library(morse)
    data("propiconazole")
    survData_PRZ = survData(propiconazole)
    fit_cstSD = survFit(survData_PRZ, model_type = "SD")
    data("propiconazole_pulse_exposure")
    predict_Nsurv = predict_Nsurv_ode(
      object = fit_cstSD,
      data_predict = propiconazole_pulse_exposure
    )

### … with plot

    library(morse)
    data("propiconazole")
    survData_PRZ = survData(propiconazole)
    fit_cstSD = survFit(survData_PRZ, model_type = "SD")
    data("propiconazole_pulse_exposure")
    predict_Nsurv = predict_Nsurv_ode(
      object = fit_cstSD,
      data_predict = propiconazole_pulse_exposure
    )
    plot(predict_Nsurv)