knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.width = 8,
  fig.height = 4.5
)

The present article describes briefly how to use pmxploit from R.

library(pmxploit)
library(knitr)
library(tidyverse)

theme_set(theme_pmx())

Load a NONMEM run archive

run <- load_nm_run(path = "path/to/my_run_archive.tar.gz")
run <- pmxploit:::EXAMPLERUN

Job details

Run information

Model/Data/Files

run$info %>% 
  bind_cols() %>% 
  select(run_name, dataset_file, control_stream_file, nodes, nm_version, number_of_subjects, number_of_observations, duration) %>% 
  mutate(duration = as.character(lubridate::as.period(duration))) %>% 
  gather(property, value) %>% 
  kable()

Estimation

# Estimation steps summary
run$estimations %>%
  map(~ .[c("title", "final_ofv", "minimization", "duration")]) %>% 
  bind_rows(.id= "n_estimation") %>% 
  kable()

Model information

Compartments

kable(run$model$compartments)

Parameters

run$model$parameters %>% 
  filter(type %in% c("theta", "eta")) %>% 
  select(id, type, name) %>% 
  kable()

Covariates

kable(run$model$covariates)

Diagnostic plots

Spaghetti plot

run %>% 
  group_by(SEX) %>% 
  plot_observed_profiles(compartment = 2, y_scale = "log", facetted = FALSE)

Dependent variable observations vs predictions

plot_dv_vs_predictions(run, compartment = 2, predictions = c("PRED", "IPRED"))
plot_dv_vs_predictions(run, compartment = 2, predictions = c("PRED", "IPRED"), x_scale = "log", y_scale = "log")

Residuals

plot_residuals(run, compartment = 2, residuals = "CWRES", idv = c("PRED", "TIME"), reference_value = 2)

plot_residuals(run, compartment = 2, residuals = c("CWRES"), type = "histogram")

Individual predictions profiles

plot_individual_profiles(run, compartment = 2, ids = 1:4, predictions = c("PRED", "IPRED"), y_scale = "log")

Population parameters

THETA

last_estimation <- last(run$estimations)

last_estimation$thetas %>% 
  mutate(rse = scales::percent(rse)) %>% 
  kable()

Convergence

plot_convergence(run, parameters = "theta")

OMEGA

# OMEGA matrix
kable(last_estimation$omega_matrix)

# OMEGA matrix as a table, with RSE% and IC 95%
last_estimation$omega %>% 
  mutate(rse = scales::percent(rse)) %>% 
  kable()

Shrinkage

last_estimation$shrinkage %>% 
  mutate(shrinkage = scales::percent(shrinkage)) %>% 
  kable()

Individuals

Parameters

Distributions

summarize_parameters_distributions(run)

plot_parameters_distributions(run, parameters = "eta")

run %>% 
  group_by(STUD) %>%
  plot_parameters_distributions(parameters = c("CL", "V1"), type = "boxplot")

Correlations

summarize_parameters_correlations(run, parameters = "individual")

plot_parameters_correlations(run, parameters = "eta", type = "heatmap")

Continuous covariates

Distributions

summarize_continuous_covariates(run)

plot_continuous_covariates_distributions(run)
run %>% 
  group_by(STUD) %>%
  plot_continuous_covariates_distributions(type = "boxplot")

Correlations

summarize_covariates_correlations(run)

plot_covariates_correlations(run, type = "heatmap")

run %>% 
  group_by(STUD) %>%
  plot_covariates_correlations(type = "scatterplot")

Parameters vs covariates

plot_parameters_vs_continuous_covariates(run)

plot_parameters_vs_categorical_covariates(run, parameters = c("CL", "V1"))

Quality criteria

# Overall QC
qc <- quality_criteria(run, predictions = "PRED")

# QC by study
qc_stud <- run %>% 
  group_by(STUD) %>%
  quality_criteria(predictions = "PRED")

kable(qc$standard)

qc_stud %>% 
  select(Study, standard) %>% 
  unnest() %>% 
  kable()

# Bias
qc_stud %>% 
  select(Study, bias) %>% 
  unnest() %>% 
  mutate(relative_value = scales::percent(relative_value)) %>% 
  rename(`Mean Prediction Error (%)` = relative_value) %>% 
  kable()

# Precision
qc_stud %>% 
  select(Study, precision) %>% 
  unnest() %>% 
  mutate(relative_value = scales::percent(relative_value)) %>% 
  rename(`Root Mean Square Error (%)` = relative_value) %>% 
  kable()


pnolain/pmxploit documentation built on Jan. 31, 2024, 1:16 p.m.