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