diff --git a/.github/.gitignore b/.github/.gitignore
new file mode 100644
index 0000000..2d19fc7
--- /dev/null
+++ b/.github/.gitignore
@@ -0,0 +1 @@
+*.html
diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml
new file mode 100644
index 0000000..19a0619
--- /dev/null
+++ b/.github/workflows/R-CMD-check.yaml
@@ -0,0 +1,66 @@
+# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples
+# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help
+on:
+ push:
+ branches: main
+ pull_request:
+ branches: main
+
+name: R-CMD-check
+
+jobs:
+ R-CMD-check:
+ runs-on: ${{ matrix.config.os }}
+
+ name: ${{ matrix.config.os }} (${{ matrix.config.r }})
+
+ strategy:
+ fail-fast: false
+ matrix:
+ config:
+ - {os: macos-latest, r: 'release'}
+ - {os: windows-latest, r: 'release'}
+ - {os: ubuntu-latest, r: 'devel', http-user-agent: 'release'}
+ - {os: ubuntu-latest, r: 'release'}
+
+ env:
+ R_REMOTES_NO_ERRORS_FROM_WARNINGS: true
+ RSPM: ${{ matrix.config.rspm }}
+ GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
+ _R_CHECK_FORCE_SUGGESTS_: false
+
+ steps:
+ - name: Install deps on MacOS
+ if: runner.os == 'macOS'
+ run: |
+ brew install --cask xquartz
+ brew install cairo
+ brew install udunits
+ shell: bash
+
+ - uses: actions/checkout@v3
+
+ - uses: r-lib/actions/setup-pandoc@v2
+
+ - uses: r-lib/actions/setup-r@v2
+ with:
+ r-version: ${{ matrix.config.r }}
+ http-user-agent: ${{ matrix.config.http-user-agent }}
+ use-public-rspm: true
+
+ - uses: r-lib/actions/setup-r-dependencies@v2
+ with:
+ pak-version: devel
+ extra-packages: |
+ any::rcmdcheck
+ nlmixr2/lotri
+ nlmixr2/dparser-R
+ nlmixr2/rxode2ll
+ nlmixr2/rxode2parse
+ nlmixr2/rxode2random
+ nlmixr2/rxode2et
+ nlmixr2/rxode2
+ needs: check
+ - uses: r-lib/actions/check-r-package@v2
+ with:
+ upload-snapshots: true
diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml
new file mode 100644
index 0000000..16e7759
--- /dev/null
+++ b/.github/workflows/pkgdown.yaml
@@ -0,0 +1,62 @@
+# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples
+# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help
+on:
+ push:
+ branches: [main, master]
+ pull_request:
+ branches: [main, master]
+ release:
+ types: [published]
+ workflow_dispatch:
+
+name: pkgdown
+
+jobs:
+ pkgdown:
+ runs-on: ubuntu-latest
+ # Only restrict concurrency for non-PR jobs
+ concurrency:
+ group: pkgdown-${{ github.event_name != 'pull_request' || github.run_id }}
+ env:
+ GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
+ steps:
+ - uses: actions/checkout@v3
+
+ - uses: r-lib/actions/setup-pandoc@v2
+
+ - uses: r-lib/actions/setup-r@v2
+ with:
+ use-public-rspm: true
+
+ - uses: r-lib/actions/setup-r-dependencies@v2
+ with:
+ extra-packages: |
+ any::pkgdown
+ nlmixr2/lotri
+ nlmixr2/dparser-R
+ nlmixr2/rxode2ll
+ nlmixr2/rxode2parse
+ nlmixr2/rxode2random
+ nlmixr2/rxode2et
+ nlmixr2/rxode2
+ nlmixr2/nlmixr2est
+ nlmixr2/nlmixr2extra
+ nlmixr2/nlmixr2plot
+ nlmixr2/nlmixr2
+ nlmixr2/babelmixr2
+ nlmixr2/nlmixr2rpt
+ lixoftConnectors=?ignore
+ local::.
+ needs: website
+
+ - name: Build site
+ run: pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE)
+ shell: Rscript {0}
+
+ - name: Deploy to GitHub pages 🚀
+ if: github.event_name != 'pull_request'
+ uses: JamesIves/github-pages-deploy-action@v4.4.1
+ with:
+ clean: false
+ branch: gh-pages
+ folder: docs
diff --git a/.github/workflows/test-coverage.yaml b/.github/workflows/test-coverage.yaml
new file mode 100644
index 0000000..1acd02c
--- /dev/null
+++ b/.github/workflows/test-coverage.yaml
@@ -0,0 +1,59 @@
+# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples
+# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help
+on:
+ push:
+ branches: [main, master]
+ pull_request:
+ branches: [main, master]
+
+name: test-coverage
+
+jobs:
+ test-coverage:
+ runs-on: ubuntu-latest
+ env:
+ GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - uses: r-lib/actions/setup-r@v2
+ with:
+ use-public-rspm: true
+
+ - uses: r-lib/actions/setup-r-dependencies@v2
+ with:
+ pak-version: devel
+ extra-packages: |
+ any::covr
+ nlmixr2/lotri
+ nlmixr2/dparser-R
+ nlmixr2/rxode2ll
+ nlmixr2/rxode2parse
+ nlmixr2/rxode2random
+ nlmixr2/rxode2et
+ nlmixr2/rxode2
+ needs: coverage
+
+ - name: Test coverage
+ run: |
+ covr::codecov(
+ quiet = FALSE,
+ clean = FALSE,
+ install_path = file.path(Sys.getenv("RUNNER_TEMP"), "package")
+ )
+ shell: Rscript {0}
+
+ - name: Show testthat output
+ if: always()
+ run: |
+ ## --------------------------------------------------------------------
+ find ${{ runner.temp }}/package -name 'testthat.Rout*' -exec cat '{}' \; || true
+ shell: bash
+
+ - name: Upload test results
+ if: failure()
+ uses: actions/upload-artifact@v3
+ with:
+ name: coverage-test-failures
+ path: ${{ runner.temp }}/package
diff --git a/README.Rmd b/README.Rmd
index acfbb21..a66d8f9 100644
--- a/README.Rmd
+++ b/README.Rmd
@@ -16,6 +16,17 @@ knitr::opts_chunk$set(
# monolix2rx
+[![R-CMD-check](https://github.com/nlmixr2/monolix2rx/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/nlmixr2/monolix2rx/actions/workflows/R-CMD-check.yaml)
+[![Codecov test
+coverage](https://codecov.io/gh/nlmixr2/monolix2rx/branch/main/graph/badge.svg)](https://app.codecov.io/gh/nlmixr2/monolix2rx?branch=main)
+[![CRAN
+version](http://www.r-pkg.org/badges/version/monolix2rx)](https://cran.r-project.org/package=monolix2rx)
+[![CRAN total
+downloads](https://cranlogs.r-pkg.org/badges/grand-total/monolix2rx)](https://cran.r-project.org/package=monolix2rx)
+[![CRAN total
+downloads](https://cranlogs.r-pkg.org/badges/monolix2rx)](https://cran.r-project.org/package=monolix2rx)
+[![CodeFactor](https://www.codefactor.io/repository/github/nlmixr2/monolix2rx/badge)](https://www.codefactor.io/repository/github/nlmixr2/monolix2rx)
+![r-universe](https://nlmixr2.r-universe.dev/badges/monolix2rx)
The goal of monolix2rx is to convert `Monolix` to `rxode2` to use for
@@ -33,11 +44,33 @@ devtools::install_github("nlmixr2/monolix2rx")
## Example
-This is a basic example which shows you how to solve a common problem:
+If you are trying to convert a Monolix to a rxode2 model you simply
+need the path to the `mlxtran` file. For example, the classic demo of
+theophylline is included in `monolix2rx` and can be imported below:
```{r example}
library(monolix2rx)
-## basic example code
+# First load in the model; in this case the theo model
+# This is modified from the Monolix demos by saving the model
+# file as a text file (hence you can access without model library).
+# Additionally some of the file paths were shortened so they could
+# be included with monolix2rx
+
+pkgTheo <- system.file("theo", package="monolix2rx")
+mlxtranFile <- file.path(pkgTheo, "theophylline_project.mlxtran")
+
+rx <- monolix2rx(mlxtranFile)
+
+rx
+
+# If you are only interseted in the parsing you can use `mlxtran`
+
+mlx <- mlxtran(mlxtranFile)
+
+mlx
+
+# this can be converted to a list
+head(as.list(mlx))
```
## Translating models from the Monolix model library
diff --git a/README.md b/README.md
index fa314dd..654c434 100644
--- a/README.md
+++ b/README.md
@@ -5,6 +5,17 @@
+[![R-CMD-check](https://github.com/nlmixr2/monolix2rx/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/nlmixr2/monolix2rx/actions/workflows/R-CMD-check.yaml)
+[![Codecov test
+coverage](https://codecov.io/gh/nlmixr2/monolix2rx/branch/main/graph/badge.svg)](https://app.codecov.io/gh/nlmixr2/monolix2rx?branch=main)
+[![CRAN
+version](http://www.r-pkg.org/badges/version/monolix2rx)](https://cran.r-project.org/package=monolix2rx)
+[![CRAN total
+downloads](https://cranlogs.r-pkg.org/badges/grand-total/monolix2rx)](https://cran.r-project.org/package=monolix2rx)
+[![CRAN total
+downloads](https://cranlogs.r-pkg.org/badges/monolix2rx)](https://cran.r-project.org/package=monolix2rx)
+[![CodeFactor](https://www.codefactor.io/repository/github/nlmixr2/monolix2rx/badge)](https://www.codefactor.io/repository/github/nlmixr2/monolix2rx)
+![r-universe](https://nlmixr2.r-universe.dev/badges/monolix2rx)
The goal of monolix2rx is to convert `Monolix` to `rxode2` to use for
@@ -22,11 +33,495 @@ devtools::install_github("nlmixr2/monolix2rx")
## Example
-This is a basic example which shows you how to solve a common problem:
+If you are trying to convert a Monolix to a rxode2 model you simply need
+the path to the `mlxtran` file. For example, the classic demo of
+theophylline is included in `monolix2rx` and can be imported below:
``` r
library(monolix2rx)
-## basic example code
+#> Loading required namespace: rxode2
+# First load in the model; in this case the theo model
+# This is modified from the Monolix demos by saving the model
+# file as a text file (hence you can access without model library).
+# Additionally some of the file paths were shortened so they could
+# be included with monolix2rx
+
+pkgTheo <- system.file("theo", package="monolix2rx")
+mlxtranFile <- file.path(pkgTheo, "theophylline_project.mlxtran")
+
+rx <- monolix2rx(mlxtranFile)
+#> ℹ updating model values to final parameter estimates
+#> ℹ done
+#> ℹ reading run info (# obs, doses, Monolix Version, etc) from summary.txt
+#> ℹ done
+#> ℹ reading covariance from FisherInformation/covarianceEstimatesLin.txt
+#> ℹ done
+#> ℹ imported monolix and translated to rxode2 compatible data ($monolixData)
+#> ℹ imported monolix ETAS (_SAEM) imported to rxode2 compatible data ($etaData)
+#> ℹ imported monolix pred/ipred data to compare ($predIpredData)
+#> ℹ solving ipred problem
+#> ℹ done
+#> ℹ solving pred problem
+#> ℹ done
+
+rx
+#> ── rxode2-based free-form 2-cmt ODE model ──────────────────────────────────────
+#> ── Initalization: ──
+#> Fixed Effects ($theta):
+#> ka_pop V_pop Cl_pop a b
+#> 0.42699448 -0.78635157 -3.21457598 0.43327956 0.05425953
+#>
+#> Omega ($omega):
+#> omega_ka omega_V omega_Cl
+#> omega_ka 0.4503145 0.00000000 0.00000000
+#> omega_V 0.0000000 0.01594701 0.00000000
+#> omega_Cl 0.0000000 0.00000000 0.07323701
+#>
+#> States ($state or $stateDf):
+#> Compartment Number Compartment Name
+#> 1 1 depot
+#> 2 2 central
+#> ── μ-referencing ($muRefTable): ──
+#> theta eta level
+#> 1 ka_pop omega_ka id
+#> 2 V_pop omega_V id
+#> 3 Cl_pop omega_Cl id
+#>
+#> ── Model (Normalized Syntax): ──
+#> function() {
+#> description <- "The administration is extravascular with a first order absorption (rate constant ka).\nThe PK model has one compartment (volume V) and a linear elimination (clearance Cl).\nThis has been modified so that it will run without the model library"
+#> thetaMat <- lotri({
+#> ka_pop + V_pop + Cl_pop ~ c(0.09785, 0.00082606, 0.00041937,
+#> -4.2833e-05, -6.7957e-06, 1.1318e-05)
+#> a + b ~ c(0.015333, -0.0026458, 0.00056232)
+#> })
+#> validation <- c("ipred relative difference compared to Monolix ipred: 0.04%; 95% percentile: (0%,0.52%); rtol=0.00038",
+#> "ipred absolute difference compared to Monolix ipred: 95% percentile: (0.000362, 0.00848); atol=0.00254",
+#> "pred relative difference compared to Monolix pred: 0%; 95% percentile: (0%,0%); rtol=6.6e-07",
+#> "pred absolute difference compared to Monolix pred: 95% percentile: (1.6e-07, 1.27e-05); atol=3.66e-06",
+#> "iwres relative difference compared to Monolix iwres: 0%; 95% percentile: (0.06%,32.22%); rtol=0.0153",
+#> "iwres absolute difference compared to Monolix pred: 95% percentile: (0.000403, 0.0138); atol=0.00305")
+#> ini({
+#> ka_pop <- 0.426994483535611
+#> V_pop <- -0.786351566327091
+#> Cl_pop <- -3.21457597916301
+#> a <- c(0, 0.433279557549051)
+#> b <- c(0, 0.0542595276206251)
+#> omega_ka ~ 0.450314511978718
+#> omega_V ~ 0.0159470121255372
+#> omega_Cl ~ 0.0732370098834837
+#> })
+#> model({
+#> cmt(depot)
+#> cmt(central)
+#> ka <- exp(ka_pop + omega_ka)
+#> V <- exp(V_pop + omega_V)
+#> Cl <- exp(Cl_pop + omega_Cl)
+#> d/dt(depot) <- -ka * depot
+#> d/dt(central) <- +ka * depot - Cl/V * central
+#> Cc <- central/V
+#> CONC <- Cc
+#> CONC ~ add(a) + prop(b) + combined1()
+#> })
+#> }
+
+# If you are only interseted in the parsing you can use `mlxtran`
+
+mlx <- mlxtran(mlxtranFile)
+#> ℹ reading run info (# obs, doses, Monolix Version, etc) from summary.txt
+#> ℹ done
+#> ℹ reading covariance from FisherInformation/covarianceEstimatesLin.txt
+#> ℹ done
+
+mlx
+#> DESCRIPTION:
+#> The administration is extravascular with a first order absorption (rate constant ka).
+#> The PK model has one compartment (volume V) and a linear elimination (clearance Cl).
+#> This has been modified so that it will run without the model library
+#>
+#>
+#> [FILEINFO]
+#> ; parsed: $DATAFILE$FILEINFO$FILEINFO
+#> file = 'data/theophylline_data.txt'
+#> delimiter = tab
+#> header = {ID, AMT, TIME, CONC, WEIGHT, SEX}
+#>
+#> [CONTENT]
+#> ; parsed: $DATAFILE$CONTENT$CONTENT
+#> ID = {use=identifier}
+#> TIME = {use=time}
+#> AMT = {use=amount}
+#> CONC = {use=observation, name=CONC, type=continuous}
+#> WEIGHT = {use=covariate, type=continuous}
+#> SEX = {use=covariate, type=categorical}
+#>
+#>
+#> [INDIVIDUAL]
+#> ; parsed: $MODEL$INDIVIDUAL$INDIVIDUAL
+#> input = {ka_pop, omega_ka, V_pop, omega_V, Cl_pop, omega_Cl}
+#>
+#> DEFINITION:
+#> ; parsed: $MODEL$INDIVIDUAL$DEFINITION
+#> ka = {distribution=lognormal, typical=ka_pop, sd=omega_ka}
+#> V = {distribution=lognormal, typical=V_pop, sd=omega_V}
+#> Cl = {distribution=lognormal, typical=Cl_pop, sd=omega_Cl}
+#>
+#> [LONGITUDINAL]
+#> ; parsed: $MODEL$LONGITUDINAL$LONGITUDINAL
+#> input = {a, b, ka, V, Cl}
+#> file = 'oral1_1cpt_kaVCl.txt'
+#>
+#> DEFINITION:
+#> ; parsed: $MODEL$LONGITUDINAL$DEFINITION
+#> CONC = {distribution=normal, prediction=Cc, errorModel=combined1(a, b)}
+#>
+#> EQUATION:
+#>
+#> ; PK model definition
+#> Cc = pkmodel(ka, V, Cl)
+#>
+#> OUTPUT:
+#> ; parsed: $MODEL$LONGITUDINAL$OUTPUT
+#> output = Cc
+#>
+#>
+#> ; parsed: $FIT$FIT
+#> data = {CONC}
+#> model = {CONC}
+#>
+#>
+#> ; parsed: $PARAMETER$PARAMETER
+#> Cl_pop = {value=0.1, method=MLE}
+#> V_pop = {value=0.5, method=MLE}
+#> a = {value=1, method=MLE}
+#> b = {value=0.3, method=MLE}
+#> ka_pop = {value=1, method=MLE}
+#> omega_Cl = {value=1, method=MLE}
+#> omega_V = {value=1, method=MLE}
+#> omega_ka = {value=1, method=MLE}
+#>
+#>
+#> [TASKS]
+#> ; parsed: $MONOLIX$TASKS$TASKS
+#> populationParameters()
+#> individualParameters(method = {conditionalMean, conditionalMode})
+#> fim(method = Linearization)
+#> logLikelihood(method = Linearization)
+#> plotResult(method = {indfits, obspred, vpc, residualsscatter, residualsdistribution, parameterdistribution, covariatemodeldiagnosis, randomeffects, covariancemodeldiagnosis, saemresults})
+#>
+#> [SETTINGS]
+#> GLOBAL:
+#> ; parsed: $MONOLIX$SETTINGS$GLOBAL
+#> exportpath = 'tp'
+#>
+#> ; unparsed sections:
+#> ; $MODEL$LONGITUDINAL$EQUATION
+
+# this can be converted to a list
+head(as.list(mlx))
+#> $mlxtran
+#> [1] ""
+#>
+#> $DATAFILE
+#> $DATAFILE$DATAFILE
+#> list()
+#>
+#> $DATAFILE$FILEINFO
+#> $DATAFILE$FILEINFO$FILEINFO
+#> $DATAFILE$FILEINFO$FILEINFO$file
+#> [1] "data/theophylline_data.txt"
+#>
+#> $DATAFILE$FILEINFO$FILEINFO$header
+#> [1] "ID" "AMT" "TIME" "CONC" "WEIGHT" "SEX"
+#>
+#> $DATAFILE$FILEINFO$FILEINFO$delimiter
+#> [1] "tab"
+#>
+#>
+#>
+#> $DATAFILE$CONTENT
+#> $DATAFILE$CONTENT$CONTENT
+#> $DATAFILE$CONTENT$CONTENT$use1
+#> identifier time eventidentifier
+#> "ID" "TIME" NA
+#> amount interdoseinterval censored
+#> "AMT" NA NA
+#> limit observationtype administration
+#> NA NA NA
+#> steadystate observation occasion
+#> NA "CONC" NA
+#> rate additionaldose missingdependentvariable
+#> NA NA NA
+#>
+#> $DATAFILE$CONTENT$CONTENT$cont
+#> [1] "WEIGHT"
+#>
+#> $DATAFILE$CONTENT$CONTENT$cat
+#> $DATAFILE$CONTENT$CONTENT$cat$SEX
+#> $DATAFILE$CONTENT$CONTENT$cat$SEX$cat
+#> character(0)
+#>
+#> $DATAFILE$CONTENT$CONTENT$cat$SEX$quote
+#> logical(0)
+#>
+#>
+#>
+#> $DATAFILE$CONTENT$CONTENT$reg
+#> character(0)
+#>
+#> $DATAFILE$CONTENT$CONTENT$nbdoses
+#> [1] 7
+#>
+#> $DATAFILE$CONTENT$CONTENT$yname
+#> character(0)
+#>
+#> $DATAFILE$CONTENT$CONTENT$ynameQuote
+#> logical(0)
+#>
+#> $DATAFILE$CONTENT$CONTENT$ytype
+#> character(0)
+#>
+#> $DATAFILE$CONTENT$CONTENT$ytypeQuote
+#> logical(0)
+#>
+#> $DATAFILE$CONTENT$CONTENT$name
+#> [1] "CONC"
+#>
+#> $DATAFILE$CONTENT$CONTENT$type
+#> [1] "continuous"
+#>
+#>
+#>
+#>
+#> $MODEL
+#> $MODEL$MODEL
+#> list()
+#>
+#> $MODEL$INDIVIDUAL
+#> $MODEL$INDIVIDUAL$INDIVIDUAL
+#> $MODEL$INDIVIDUAL$INDIVIDUAL$input
+#> [1] "ka_pop" "omega_ka" "V_pop" "omega_V" "Cl_pop" "omega_Cl"
+#>
+#> $MODEL$INDIVIDUAL$INDIVIDUAL$cat
+#> NULL
+#>
+#> $MODEL$INDIVIDUAL$INDIVIDUAL$reg
+#> character(0)
+#>
+#> $MODEL$INDIVIDUAL$INDIVIDUAL$file
+#> character(0)
+#>
+#>
+#> $MODEL$INDIVIDUAL$DEFINITION
+#> $MODEL$INDIVIDUAL$DEFINITION$vars
+#> $MODEL$INDIVIDUAL$DEFINITION$vars$ka
+#> $MODEL$INDIVIDUAL$DEFINITION$vars$ka$distribution
+#> [1] "lognormal"
+#>
+#> $MODEL$INDIVIDUAL$DEFINITION$vars$ka$typical
+#> [1] "ka_pop"
+#>
+#> $MODEL$INDIVIDUAL$DEFINITION$vars$ka$sd
+#> [1] "omega_ka"
+#>
+#>
+#> $MODEL$INDIVIDUAL$DEFINITION$vars$V
+#> $MODEL$INDIVIDUAL$DEFINITION$vars$V$distribution
+#> [1] "lognormal"
+#>
+#> $MODEL$INDIVIDUAL$DEFINITION$vars$V$typical
+#> [1] "V_pop"
+#>
+#> $MODEL$INDIVIDUAL$DEFINITION$vars$V$sd
+#> [1] "omega_V"
+#>
+#>
+#> $MODEL$INDIVIDUAL$DEFINITION$vars$Cl
+#> $MODEL$INDIVIDUAL$DEFINITION$vars$Cl$distribution
+#> [1] "lognormal"
+#>
+#> $MODEL$INDIVIDUAL$DEFINITION$vars$Cl$typical
+#> [1] "Cl_pop"
+#>
+#> $MODEL$INDIVIDUAL$DEFINITION$vars$Cl$sd
+#> [1] "omega_Cl"
+#>
+#>
+#>
+#> $MODEL$INDIVIDUAL$DEFINITION$fixed
+#> numeric(0)
+#>
+#> $MODEL$INDIVIDUAL$DEFINITION$cor
+#> [1] level v1 v2 est
+#> <0 rows> (or 0-length row.names)
+#>
+#> $MODEL$INDIVIDUAL$DEFINITION$est
+#> type name fixed level
+#> 1 typical ka_pop FALSE pop
+#> 2 sd omega_ka FALSE id
+#> 3 typical V_pop FALSE pop
+#> 4 sd omega_V FALSE id
+#> 5 typical Cl_pop FALSE pop
+#> 6 sd omega_Cl FALSE id
+#>
+#> $MODEL$INDIVIDUAL$DEFINITION$rx
+#> [1] "ka <- exp(ka_pop + omega_ka)" "V <- exp(V_pop + omega_V)"
+#> [3] "Cl <- exp(Cl_pop + omega_Cl)"
+#>
+#>
+#>
+#> $MODEL$LONGITUDINAL
+#> $MODEL$LONGITUDINAL$LONGITUDINAL
+#> $MODEL$LONGITUDINAL$LONGITUDINAL$input
+#> [1] "a" "b" "ka" "V" "Cl"
+#>
+#> $MODEL$LONGITUDINAL$LONGITUDINAL$cat
+#> NULL
+#>
+#> $MODEL$LONGITUDINAL$LONGITUDINAL$reg
+#> character(0)
+#>
+#> $MODEL$LONGITUDINAL$LONGITUDINAL$file
+#> [1] "oral1_1cpt_kaVCl.txt"
+#>
+#>
+#> $MODEL$LONGITUDINAL$DEFINITION
+#> $MODEL$LONGITUDINAL$DEFINITION$endpoint
+#> $MODEL$LONGITUDINAL$DEFINITION$endpoint[[1]]
+#> $MODEL$LONGITUDINAL$DEFINITION$endpoint[[1]]$var
+#> [1] "CONC"
+#>
+#> $MODEL$LONGITUDINAL$DEFINITION$endpoint[[1]]$dist
+#> [1] "normal"
+#>
+#> $MODEL$LONGITUDINAL$DEFINITION$endpoint[[1]]$pred
+#> [1] "Cc"
+#>
+#> $MODEL$LONGITUDINAL$DEFINITION$endpoint[[1]]$err
+#> $MODEL$LONGITUDINAL$DEFINITION$endpoint[[1]]$err$errName
+#> [1] "combined1"
+#>
+#> $MODEL$LONGITUDINAL$DEFINITION$endpoint[[1]]$err$typical
+#> [1] "a" "b"
+#>
+#>
+#> $MODEL$LONGITUDINAL$DEFINITION$endpoint[[1]]$autocor
+#> character(0)
+#>
+#>
+#>
+#> $MODEL$LONGITUDINAL$DEFINITION$fixed
+#> numeric(0)
+#>
+#>
+#> $MODEL$LONGITUDINAL$EQUATION
+#> $MODEL$LONGITUDINAL$EQUATION[[1]]
+#> [1] "; PK model definition\nCc = pkmodel(ka, V, Cl)"
+#>
+#>
+#> $MODEL$LONGITUDINAL$OUTPUT
+#> $MODEL$LONGITUDINAL$OUTPUT$output
+#> [1] "Cc"
+#>
+#> $MODEL$LONGITUDINAL$OUTPUT$table
+#> character(0)
+#>
+#>
+#>
+#>
+#> $FIT
+#> $FIT$FIT
+#> data dataQuote model modelQuote
+#> 1 CONC FALSE CONC FALSE
+#>
+#>
+#> $PARAMETER
+#> $PARAMETER$PARAMETER
+#> name value method
+#> 1 Cl_pop 0.1 MLE
+#> 2 V_pop 0.5 MLE
+#> 3 a 1.0 MLE
+#> 4 b 0.3 MLE
+#> 5 ka_pop 1.0 MLE
+#> 6 omega_Cl 1.0 MLE
+#> 7 omega_V 1.0 MLE
+#> 8 omega_ka 1.0 MLE
+#>
+#>
+#> $MONOLIX
+#> $MONOLIX$MONOLIX
+#> list()
+#>
+#> $MONOLIX$TASKS
+#> $MONOLIX$TASKS$TASKS
+#> $MONOLIX$TASKS$TASKS$populationParameters
+#> list()
+#>
+#> $MONOLIX$TASKS$TASKS$individualParameters
+#> $MONOLIX$TASKS$TASKS$individualParameters$method
+#> $MONOLIX$TASKS$TASKS$individualParameters$method[[1]]
+#> [1] "conditionalMean"
+#>
+#> $MONOLIX$TASKS$TASKS$individualParameters$method[[2]]
+#> [1] "conditionalMode"
+#>
+#>
+#>
+#> $MONOLIX$TASKS$TASKS$fim
+#> $MONOLIX$TASKS$TASKS$fim$method
+#> [1] "Linearization"
+#>
+#>
+#> $MONOLIX$TASKS$TASKS$logLikelihood
+#> $MONOLIX$TASKS$TASKS$logLikelihood$method
+#> [1] "Linearization"
+#>
+#>
+#> $MONOLIX$TASKS$TASKS$plotResult
+#> $MONOLIX$TASKS$TASKS$plotResult$method
+#> $MONOLIX$TASKS$TASKS$plotResult$method[[1]]
+#> [1] "indfits"
+#>
+#> $MONOLIX$TASKS$TASKS$plotResult$method[[2]]
+#> [1] "obspred"
+#>
+#> $MONOLIX$TASKS$TASKS$plotResult$method[[3]]
+#> [1] "vpc"
+#>
+#> $MONOLIX$TASKS$TASKS$plotResult$method[[4]]
+#> [1] "residualsscatter"
+#>
+#> $MONOLIX$TASKS$TASKS$plotResult$method[[5]]
+#> [1] "residualsdistribution"
+#>
+#> $MONOLIX$TASKS$TASKS$plotResult$method[[6]]
+#> [1] "parameterdistribution"
+#>
+#> $MONOLIX$TASKS$TASKS$plotResult$method[[7]]
+#> [1] "covariatemodeldiagnosis"
+#>
+#> $MONOLIX$TASKS$TASKS$plotResult$method[[8]]
+#> [1] "randomeffects"
+#>
+#> $MONOLIX$TASKS$TASKS$plotResult$method[[9]]
+#> [1] "covariancemodeldiagnosis"
+#>
+#> $MONOLIX$TASKS$TASKS$plotResult$method[[10]]
+#> [1] "saemresults"
+#>
+#>
+#>
+#>
+#>
+#> $MONOLIX$SETTINGS
+#> $MONOLIX$SETTINGS$SETTINGS
+#> $MONOLIX$SETTINGS$SETTINGS[[1]]
+#> [1] ""
+#>
+#>
+#> $MONOLIX$SETTINGS$GLOBAL
+#> $MONOLIX$SETTINGS$GLOBAL$exportpath
+#> [1] "tp"
```
## Translating models from the Monolix model library
@@ -59,7 +554,7 @@ to `rxode2`:
``` r
monolix2rx("lib:bolus_1cpt_TlagVCl.txt")
-#> Loading required namespace: rxode2
+#> ℹ cannot find individual parameter estimates
#> ── rxode2-based free-form 1-cmt ODE model ──────────────────────────────────────
#>
#> States ($state or $stateDf):
@@ -69,6 +564,7 @@ monolix2rx("lib:bolus_1cpt_TlagVCl.txt")
#> function() {
#> description <- "The administration is via a bolus with a lag time (Tlag).\nThe PK model has one compartment (volume V) and a linear elimination (clearance Cl)."
#> model({
+#> cmt(central)
#> d/dt(central) <- -Cl/V * central
#> alag(central) <- Tlag
#> Cc <- central/V
diff --git a/pkgdown/favicon/apple-touch-icon-120x120.png b/pkgdown/favicon/apple-touch-icon-120x120.png
new file mode 100644
index 0000000..a7c24a1
Binary files /dev/null and b/pkgdown/favicon/apple-touch-icon-120x120.png differ
diff --git a/pkgdown/favicon/apple-touch-icon-152x152.png b/pkgdown/favicon/apple-touch-icon-152x152.png
new file mode 100644
index 0000000..563ad2e
Binary files /dev/null and b/pkgdown/favicon/apple-touch-icon-152x152.png differ
diff --git a/pkgdown/favicon/apple-touch-icon-180x180.png b/pkgdown/favicon/apple-touch-icon-180x180.png
new file mode 100644
index 0000000..5150ff9
Binary files /dev/null and b/pkgdown/favicon/apple-touch-icon-180x180.png differ
diff --git a/pkgdown/favicon/apple-touch-icon-60x60.png b/pkgdown/favicon/apple-touch-icon-60x60.png
new file mode 100644
index 0000000..54ab727
Binary files /dev/null and b/pkgdown/favicon/apple-touch-icon-60x60.png differ
diff --git a/pkgdown/favicon/apple-touch-icon-76x76.png b/pkgdown/favicon/apple-touch-icon-76x76.png
new file mode 100644
index 0000000..bc853c0
Binary files /dev/null and b/pkgdown/favicon/apple-touch-icon-76x76.png differ
diff --git a/pkgdown/favicon/apple-touch-icon.png b/pkgdown/favicon/apple-touch-icon.png
new file mode 100644
index 0000000..44812ae
Binary files /dev/null and b/pkgdown/favicon/apple-touch-icon.png differ
diff --git a/pkgdown/favicon/favicon-16x16.png b/pkgdown/favicon/favicon-16x16.png
new file mode 100644
index 0000000..3763bb4
Binary files /dev/null and b/pkgdown/favicon/favicon-16x16.png differ
diff --git a/pkgdown/favicon/favicon-32x32.png b/pkgdown/favicon/favicon-32x32.png
new file mode 100644
index 0000000..7baa658
Binary files /dev/null and b/pkgdown/favicon/favicon-32x32.png differ
diff --git a/pkgdown/favicon/favicon.ico b/pkgdown/favicon/favicon.ico
new file mode 100644
index 0000000..3f77dde
Binary files /dev/null and b/pkgdown/favicon/favicon.ico differ