NOTE: This module is currently under active development and this documentation is a work in progress
Introduction
The model building module is constructed around the rxode2 package. It allows you to load a base model from either the model catalog or a user-create file. Once loaded the user can modify a model (change the structure, parameter values, etc), make a copy, etc. You can upload a model in rxode2 format and also NONMEM format. The NONMEM file (control stream or listing output) will be converted after upload into rxode2 using the nonmem2rx package.
Model catalog
The model catalog is built from the sources field of the configuration file. It can include the models from the nlmixr2lib model library. You can also include user defined files. If they are specified but not found, they will be skipped. Edit the MB yaml file to to alter this.
User-defined models
User-defined models can be included in the catalog or uploaded into
the app. These models can be specified in either NONMEM or rxode2
formats. For NONMEM models it can be a control stream (good), the
listing output from an estimation (better), or the XML output from an
estimation (best). To use an nlmixr2 model you simply need a function
definition assigned to the object my_fcn
. For examples
see:
system.file(package="ruminate", "templates", "MB_model_rxode2.R")
system.file(package="ruminate", "templates", "MB_model_NONMEM.ctl")
Modules are specified in the sources
section of the
configuration file. The default configuration file will look in the
working directory of the App for user_model.R
and
user_model.ctl
. So if you have a rxode2 model you can name
it user_model.R
and place it in the app directory to be
included in the catalog. Similarly if you have a NONMEM control stream
you can name it user_model.ctl
, and it will be included
automatically. If these do not exist they will be skipped. You can
create as many entries as you want.
Configuration File
# The MC field is a skeleton for constructing new modules
MC:
# Module informaiton
module:
type: "MB"
# internal R Object: module ID used in deployment
depends:
id_ASM: "ASM"
# The prefix of object names created in the generated code
element_object_name: "MB_obj"
# This is a list of model sources. In the app the sources will be listed in
# the order shown here. This is also referred to as the model catalog. If
# the type is set to nlmixr2lib it will insert the models from nlmixr2lib.
# User defined models can be used as well. See the examples below for
# rxode2 and NONMEM models.
#
# - group: This is how models will be grouped in the selection pulldown.
# - name: Short name for the model: **NOTE that names need to be unique**.
# - description: Verbose description of the model.
# - type: Supported model types are "nlmixr2lib", "rxode2" or "NONMEM".
# - obj: For the rxode2 type you need to also specify the name of the object
# that is created. This option is only used for the rxode2 type.
# - file: For both rxode2 and nlmixr2 you need to specify a character string
# with a file path. This will be evaluated as an R command, so keep that
# in mind. If the file is not found it will be skipped when the app loads.
sources:
- source:
group: "User-defined Models"
name: "rxode2 User model"
description: "User-defined rxode2 model"
type: "rxode2"
obj: "my_fcn"
file: 'file.path(getwd(),"user_model.R")'
- source:
group: "User-defined Models"
name: "NONMEM User model"
description: "User-defined NONMEM model"
type: "NONMEM"
file: 'file.path(getwd(),"user_model.ctl")'
- source:
group: "Model Library"
type: "nlmixr2lib"
name: "nlmixr2 Model Library"
# The include section is optional. You can use this section to copy files
# from the directory where you are running the app to the user directory to be
# used in the app and when saved. The source and dest options can be a path
# command like below or a double
# quoted string: '"/path/to/file"'
# The dest should be relative to user directory (think the root of the zip
# file that is exported). See formods.yaml for examples.
#
# include:
# files:
# - file:
# source: 'file.path(system.file(package="onbrand"), "templates", "report.docx")'
# dest: 'file.path("config","report.docx")'
code: # module specific code options
packages: [ "rxode2", "nonmem2rx", "nlmixr2lib"]
readOnly: TRUE
mode: r
# Controls what is shown in the compact ui mode:
compact:
code: TRUE
clip: TRUE
# This is where you put reporting options. The expected options are shown
# here, but module-specific options can also be added if needed:
reporting:
enabled: TRUE
# Priority of reporting relative to other modules
# (higher numbers are reported first)
priority: 1
# put different formatting options (widths, heights,
# shinyWidgets button sizes, etc) here.
formatting:
# Dimensions of code snippet box
code:
width: 800
height: 300
preview:
width: "800px"
height: "500px"
input:
current_element:
width: "200px"
tooltip: "Change the current model."
tooltip_position: "right"
element_name:
width: "200px"
button_clk_run:
size: "sm"
block: TRUE
button_clk_del:
size: "sm"
block: TRUE
tooltip: "Delete the current model."
tooltip_position: "right"
button_clk_save:
size: "sm"
block: TRUE
tooltip: "Save the name for the current model."
tooltip_position: "right"
button_clk_clip:
size: "sm"
block: TRUE
tooltip: "Copy the code to generate the current model to the clipboard."
tooltip_position: "right"
button_clk_copy:
size: "sm"
block: TRUE
tooltip: "Make a copy of the current model."
tooltip_position: "right"
button_clk_append_model:
size: "sm"
block: TRUE
tooltip: "Append to current model."
tooltip_position: "right"
button_clk_new:
size: "sm"
block: TRUE
tooltip: "Create a new model."
tooltip_position: "right"
width: 100
export_nonmem:
size: "sm"
block: TRUE
color: "primary"
tooltip: "Download the current model in NONMEM format."
tooltip_position: "right"
width: 100
export_monolix:
size: "sm"
block: TRUE
color: "primary"
tooltip: "Download the current model in Monolix format."
tooltip_position: "right"
width: 100
catalog_selection:
width: "200px"
truncate: 65
tooltip: "Select base model from the catalog."
tooltip_position: "top"
model_type_selection:
width: "200px"
tooltip: "Select the type of the model being uploaded."
tooltip_position: "right"
choices:
rxode2: "rxode2 function"
NONMEM: "NONMEM (XML, lst, or ctl)"
default: "rxode2"
upload_model_file:
width: "400px"
append_model:
tooltip: "Append the selected sub-model to the current model."
tooltip_position: "bottom"
no_models: "None available"
width: "200px"
base_from:
size: "normal"
status: "primary"
tooltip: "You can select the base model from a catalog or upload your own"
tooltip_position: "bottom"
choices:
catalog: "Model Catalog"
user: "User-defined model"
default: "catalog"
# The timescales here can be altered manually. This is the general format:
# short_name:
# conv: "10"
# verb: "A more verbose name"
# match: ["sn"]
#
# The conv filed is the mathematical conversion between different
# timescales. Below everything is relative to seconds. So the conv for
# seconds is 1. The conv fields for days is
#
# 1 1 day
# conv = ------------------------- = -------------- ---
# sec min 24 hr 60 x 60 x 24 sec
# 60 --- x 60 --- x ------
# min hr day
#
# Generally you dont want to change what is already here in terms of
# these short name used. You can remove timescales you don't want to use
# or add timescales that you need but are not present.
#
# -verb You can change the verb field (what the user sees).
#
# The match field is a list of values that can be matched to the short
# name so if the short name is 'days' when reading in the metadata from
# nlmixr2 models. You you may want to match 'd', 'day', etc.
#
# -match: ["day", "d"]
#
# The order of Appearance is the same order seen here. The default
# is the selected short name for the specified timescale
time_scales:
width: "200px"
default: "weeks"
tooltip: "Choose the timescale of the model."
tooltip_position: "top"
choices:
months:
conv: "1/(60*60*24*7*4)"
verb: "Months"
match: ["mo"]
weeks:
conv: "1/(60*60*24*7)"
verb: "Weeks"
match: ["wk","weeks"]
days:
conv: "1/(60*60*24)"
verb: "Days"
match: ["d", "day", "days"]
hours:
conv: "1/(60*60)"
verb: "Hours"
match: ["hr", "hours", "hrs"]
# min:
# conv: "1/60"
# verb: "Minutes"
# match: ["min", "minutes"]
# sec:
# conv: "1"
# verb: "Seconds"
# match: ["sec", "seconds", "s"]
labels:
current_element: NULL # "Select model"
element_name : NULL # "model name"
upload_model_file: NULL
base_from: NULL
catalog_selection: NULL
export_nonmem: "NONMEM"
export_monolix: "Monolix"
export_pause: "Exporting model."
model_type_selection: NULL
time_scale: NULL
catalog_empty: "No models were found, the catalog is empty"
save_btn: "Save"
clip_btn: "Code"
copy_btn: "Copy"
del_btn: "Delete"
new_btn: "New"
append_model_btn: "Append Model"
append_model: "Available Sub-Models"
building_model: "Building model, be patient."
appending_model: "Appending sub-model, be patient."
element_name_diff: "The model name has changed."
model_code_diff: "Manual changes have been made to the model."
save_change_detected: "You need to click on the save button for these changes to take effect."
head_base_model: "Starting model"
head_model_code: "Model code"
head_time_scale: "Model time-scale"
errors:
no_model_found: "No model was found."
base_model_build_failed: "The base model build failed."
manual_model_update_failed: "Manual model update failed."
user_file_upload_failed: "User-defined model failed."
nlmixr2lib_not_found: "The nlmixr2lib package was not found. This library will not be available."
selected_id_bad_list: "Unable to find a list for the selected component."
selected_id_bad_row: "Selected component should have 1 row."
fetch_catalog_failed: "Unable to fetch model catalog."
fetch_appends_failed: "Unable to fetch appendable models"
append_failed: "Unable to append sub-model"
tooltips:
# Set to FALSE to disable tool tips for this module
include: TRUE
elements: "Show model components"
show_code: "Show model code"
url_rxode: "https://nlmixr2.github.io/rxode2/articles/rxode2-syntax.html"
url_model_types: "https://ruminate.ubiquity.tools/articles/model_builder.html#model-catalog"
components:
input_tip: "My tool tip"