Skip to contents

Model and source

  • Citation: Lohy Das JP, Kyaw MP, Nyunt MH, Chit K, Aye KH, Aye MM, Karlsson MO, Bergstrand M, Tarning J (2018). Population pharmacokinetic and pharmacodynamic properties of artesunate in patients with artemisinin sensitive and resistant infections in Southern Myanmar. Malaria Journal 17:126. doi:[10.1186/s12936-018-2278-5](https://doi.org/10.1186/s12936-018-2278-5).
  • Open Access (Springer Nature / BMC).

This is the joint parent-metabolite popPK component of Lohy Das 2018, covering oral artesunate (ARS) and its active metabolite dihydroartemisinin (DHA) in adult patients with uncomplicated Plasmodium falciparum malaria from southern Myanmar. ARS absorption is described by a 3-transit-compartment chain (n = 3 fixed) followed by a one-compartment ARS disposition; complete in-vivo conversion of ARS to DHA is assumed (the only ARS elimination pathway), and DHA is one-compartment. Body weight scales both species’ CL and Vc allometrically (fixed exponents 0.75 and 1.0; cohort-median 50 kg reference). F is fixed at 1 with log-normal IIV. The packaged model file omits the published time-varying parasite-density covariates on MTT and on F (Eqs. 3 and 4) and the entire PD layer (mixture-Emax parasite-killing model with delayed-effect compartment); see the Assumptions and deviations section for the rationale.

mod_fn  <- readModelDb("LohyDas_2018_artesunate")
mod     <- rxode2::rxode2(mod_fn())
mod_typ <- rxode2::rxode2(rxode2::zeroRe(mod_fn()))

Population

The model was developed from 50 adult patients (Table 1 median age 25.5 years, IQR 21.5-39.5; age range 18-55 years per the inclusion criteria) with uncomplicated P. falciparum mono-infection and asexual parasite densities 10,000-100,000/uL at enrollment. Median body weight was 50.0 kg (IQR 46.0-53.5), the allometric reference. Median admission oral temperature was 38.4 degrees C (IQR 37.6-39.1), median haemoglobin 12.4 g/dL (IQR 10.6-13.7), and median baseline parasite density 29,900/uL (IQR 15,200-129,000). The study took place at the Palm Tree plantation site hospital in Kawthaung, southern Myanmar (ANZCTR ACTRN12610000896077; conducted in 2011).

All patients received directly observed oral artesunate monotherapy 4 mg/kg/day once daily for 7 days (Guilin Pharmaceutical Co. Ltd lot AS091001), administered with 8 oz of milk. Plasma concentration measurements were taken pre-dose and at 0.25, 0.5, 0.75, 1, 1.25, 1.5, 3, 4, 6, and 8 h after the first dose only; the popPK fit therefore describes single-dose disposition (Methods p.3).

Of 53 patients recruited, 1 was excluded for not meeting inclusion/exclusion criteria and 2 were excluded from the PK analysis for missing covariates and PK/PD data, leaving 50 patients in the final PK analysis (Results p.5). 56.1% of patients were estimated to have artemisinin-resistant infections in the original paper’s mixture model; the PD mixture layer is not encoded in this PK-only extraction (see Assumptions and deviations).

The same information is available programmatically via readModelDb("LohyDas_2018_artesunate")$population.

Source trace

Per-parameter origins are recorded as in-file comments in inst/modeldb/specificDrugs/LohyDas_2018_artesunate.R; the table below collects them in one place for review.

Item Value (typical) Source
3-transit-compartment ARS absorption (n = 3 fix) structural Results p.5 (“The absorption was described by a transit compartment (n = 3) model”)
One-compartment ARS and DHA disposition; complete in-vivo conversion structural Results p.5; Methods p.4 (“Complete metabolic in vivo conversion of ARS into DHA was assumed throughout modelling”)
Allometric WT scaling, exponent 0.75 (CL) and 1.0 (V), reference 50 kg structural Methods p.4; Results p.5 (“Allometric scaling of all disposition parameters, centered by the median weight of 50 kg improved the model fit”)
lfdepot -> F (%) = 100 fix 1.00 Table 2 (“F (%) 100 fix”)
lmtt -> MTT = 1.34 h 1.34 Table 2 (MTT, %RSE 18.8, 95% CI 1.04-1.96)
lcl -> CL_ARS/F = 1750 L/h at WT = 50 kg 1750 Table 2 (CL_ARS/F, %RSE 8.55, 95% CI 1570-2090)
lvc -> V_ARS/F = 1300 L at WT = 50 kg 1300 Table 2 (V_ARS/F, %RSE 12.6, 95% CI 1110-1660)
lcl_dha -> CL_DHA/F = 76.7 L/h at WT = 50 kg 76.7 Table 2 (CL_DHA/F, %RSE 6.99, 95% CI 69.9-87.8)
lvc_dha -> V_DHA/F = 102 L at WT = 50 kg 102 Table 2 (V_DHA/F, %RSE 8.95, 95% CI 89.5-119.0)
IIV var(etalfdepot) (from BSV F = 31.2%) 0.0929 Table 2 (%CV 31.2, %RSE 29.4); derived as log(1 + 0.312^2) per Table 2 footnote
IIV var(etalmtt) (from BSV MTT = 85.3%) 0.5468 Table 2 (%CV 85.3, %RSE 24.9)
IIV var(etalcl) (from BSV CL_ARS = 26.8%) 0.0693 Table 2 (%CV 26.8, %RSE 44.3)
IIV var(etalvc) (from BSV V_ARS = 74.7%) 0.4434 Table 2 (%CV 74.7, %RSE 27.3)
IIV var(etalcl_dha) (from BSV CL_DHA = 21.3%) 0.0444 Table 2 (%CV 21.3, %RSE 30.3)
IIV var(etalvc_dha) (from BSV V_DHA = 31.6%) 0.0953 Table 2 (%CV 31.6, %RSE 40.5)
Residual propSd (ARS) (from RUV ARS = 73.2%) 0.732 Table 2 (%RSE 3.95)
Residual propSd_dha (from RUV DHA = 58.5%) 0.585 Table 2 (%RSE 3.34)

Virtual cohort

The original observed data are not publicly available. The simulation below uses a virtual cohort whose covariate distribution approximates the published demographics: 200 adult patients with body weight drawn uniformly from the 40-60 kg range (matching the Table 1 IQR plus moderate tails). Each subject receives a single oral artesunate dose at 4 mg/kg (matching the trial protocol’s daily dose; only the first dose is simulated, consistent with the fitting window of Lohy Das 2018). Sampling times mirror the protocol design out to 8 h post-dose.

The artesunate molar mass (MW_ARS = 384.42 g/mol) is used to convert the mass-per-kg dose to nmol for the model’s molar unit declaration: 4 mg/kg x WT (kg) x (1 / 384.42 g/mol) x 1e6 nmol/mol = WT x 10405 nmol.

set.seed(2026)

n_subjects <- 200L
MW_ARS     <- 384.42

subjects <- tibble::tibble(
  id = seq_len(n_subjects),
  WT = stats::runif(n_subjects, 40, 60)
)

build_events <- function(subjects, obs_times, mg_per_kg = 4) {
  dose_rows <- subjects |>
    dplyr::transmute(
      id,
      time = 0,
      evid = 1L,
      amt  = mg_per_kg * WT * 1e6 / MW_ARS,
      cmt  = "depot",
      WT
    )
  obs_rows <- tidyr::expand_grid(
    id   = subjects$id,
    time = obs_times
  ) |>
    dplyr::left_join(dplyr::select(subjects, id, WT), by = "id") |>
    dplyr::mutate(evid = 0L, amt = 0, cmt = "Cc")
  dplyr::bind_rows(dose_rows, obs_rows) |>
    dplyr::arrange(id, time, dplyr::desc(evid))
}

obs_times <- c(seq(0.05, 1, by = 0.05),
               seq(1.25, 4, by = 0.25),
               seq(4.5, 8, by = 0.5))

events <- build_events(subjects, obs_times)
stopifnot(!anyDuplicated(unique(events[, c("id", "time", "evid", "cmt")])))

dplyr::glimpse(subjects)
#> Rows: 200
#> Columns: 2
#> $ id <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, …
#> $ WT <dbl> 53.97347, 51.13061, 42.80280, 45.71447, 51.10738, 40.50262, 49.3246…

Simulation

Stochastic simulation (full omega / sigma) for the visual predictive plot and PKNCA:

sim <- rxode2::rxSolve(
  mod,
  events = events,
  keep   = c("WT")
) |>
  as.data.frame() |>
  dplyr::mutate(
    Cc_nM     = Cc,
    Cc_dha_nM = Cc_dha
  )

Typical-value simulation (omega/sigma zeroed) for direct comparison with the typical estimates in Table 2 at WT = 50 kg:

typical_subjects <- tibble::tibble(id = 1L, WT = 50)
typical_events   <- build_events(typical_subjects, obs_times)
sim_typical <- rxode2::rxSolve(
  mod_typ,
  events = typical_events,
  keep   = c("WT")
) |>
  as.data.frame() |>
  dplyr::mutate(
    Cc_nM     = Cc,
    Cc_dha_nM = Cc_dha
  )
#> ℹ omega/sigma items treated as zero: 'etalfdepot', 'etalmtt', 'etalcl', 'etalvc', 'etalcl_dha', 'etalvc_dha'

Replicate published figures

Figure 2a / 2b – Visual predictive check of ARS and DHA after first dose

Lohy Das 2018 Figure 2a (ARS) and 2b (DHA) show VPCs of plasma concentration versus time after the first dose, with observed concentrations overlaid on the simulated 5th, 50th, and 95th percentiles. The simulation below reproduces the VPC structure for the typical cohort. Concentrations are plotted in nM (the paper’s modelling unit).

vpc_df <- sim |>
  dplyr::filter(time > 0) |>
  dplyr::group_by(time) |>
  dplyr::summarise(
    Q05_ars = stats::quantile(Cc_nM,     0.05, na.rm = TRUE),
    Q50_ars = stats::quantile(Cc_nM,     0.50, na.rm = TRUE),
    Q95_ars = stats::quantile(Cc_nM,     0.95, na.rm = TRUE),
    Q05_dha = stats::quantile(Cc_dha_nM, 0.05, na.rm = TRUE),
    Q50_dha = stats::quantile(Cc_dha_nM, 0.50, na.rm = TRUE),
    Q95_dha = stats::quantile(Cc_dha_nM, 0.95, na.rm = TRUE),
    .groups = "drop"
  )

vpc_long <- dplyr::bind_rows(
  vpc_df |>
    dplyr::transmute(time, species = "Artesunate (ARS)",
                     Q05 = Q05_ars, Q50 = Q50_ars, Q95 = Q95_ars),
  vpc_df |>
    dplyr::transmute(time, species = "Dihydroartemisinin (DHA)",
                     Q05 = Q05_dha, Q50 = Q50_dha, Q95 = Q95_dha)
)

ggplot(vpc_long, aes(time, Q50)) +
  geom_ribbon(aes(ymin = Q05, ymax = Q95), alpha = 0.25, fill = "steelblue") +
  geom_line(colour = "steelblue4", size = 0.7) +
  facet_wrap(~ species, nrow = 1, scales = "free_y") +
  scale_y_log10() +
  labs(
    x = "Time after first dose (h)",
    y = "Plasma concentration (nM, log scale)",
    title = "Figure 2 -- simulated VPC after a single 4 mg/kg oral dose",
    caption = paste0(
      "Replicates Figure 2a (ARS) and 2b (DHA) of Lohy Das 2018. ",
      "Lines: simulated 5th / 50th / 95th percentiles; ribbon spans 5th-95th."
    )
  )
#> Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
#> ℹ Please use `linewidth` instead.
#> This warning is displayed once per session.
#> Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
#> generated.

Typical concentration-time profile at WT = 50 kg

The typical-value trajectory at the median 50 kg patient sets a reference for the published Cmax and Tmax expectations.

typical_long <- sim_typical |>
  dplyr::select(time, Cc_nM, Cc_dha_nM) |>
  tidyr::pivot_longer(
    cols      = c(Cc_nM, Cc_dha_nM),
    names_to  = "species",
    values_to = "Cp_nM"
  ) |>
  dplyr::mutate(species = dplyr::recode(species,
                                        Cc_nM     = "Artesunate (ARS)",
                                        Cc_dha_nM = "Dihydroartemisinin (DHA)"))

ggplot(typical_long, aes(time, Cp_nM, colour = species)) +
  geom_line(size = 0.8) +
  scale_y_log10() +
  labs(
    x = "Time after first dose (h)",
    y = "Typical plasma concentration (nM, log scale)",
    title = "Typical-value PK profile at WT = 50 kg, 4 mg/kg oral artesunate",
    colour = NULL
  )

PKNCA validation

Single-dose, dense-sampling NCA with PKNCA. There is no per-subject NCA table in Lohy Das 2018 (only the VPC in Fig. 2), so this NCA serves to confirm that the simulated cohort produces sensible exposures that respect the structural assumptions of the model. Treatment grouping is the cohort itself (single-arm trial); a coarse weight band is added so the NCA output has a non-trivial stratification variable for the PKNCA formula.

sim_nca <- sim |>
  dplyr::filter(!is.na(Cc), time > 0) |>
  dplyr::mutate(
    band = cut(WT,
               breaks = c(40, 47, 53, 60),
               labels = c("40-47", "47-53", "53-60"),
               include.lowest = TRUE)
  ) |>
  dplyr::select(id, time, Cc = Cc_nM, band)

dose_df <- events |>
  dplyr::filter(evid == 1L) |>
  dplyr::left_join(
    dplyr::distinct(sim_nca, id, band),
    by = "id"
  ) |>
  dplyr::select(id, time, amt, band)

conc_obj <- PKNCA::PKNCAconc(sim_nca, Cc ~ time | band + id,
                             concu = "nmol/L", timeu = "h")
#> Warning in assert_conc(conc, any_missing_conc = any_missing_conc): Negative
#> concentrations found
dose_obj <- PKNCA::PKNCAdose(dose_df, amt ~ time | band + id,
                             doseu = "nmol")

intervals <- data.frame(
  start      = 0,
  end        = 8,
  cmax       = TRUE,
  tmax       = TRUE,
  auclast    = TRUE,
  half.life  = TRUE
)

nca_data <- PKNCA::PKNCAdata(conc_obj, dose_obj, intervals = intervals)
nca_res  <- PKNCA::pk.nca(nca_data)
#> Warning: Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Negative concentrations found
#> Warning: Requesting an AUC range starting (0) before the first measurement
#> (0.05) is not allowed
#> Warning in assert_conc(conc = conc): Negative concentrations found
#> Warning in assert_conc(conc, any_missing_conc = any_missing_conc): Negative
#> concentrations found
#> Warning in assert_conc(conc, any_missing_conc = any_missing_conc): Negative
#> concentrations found
#> Warning in assert_conc(conc, any_missing_conc = any_missing_conc): Negative
#> concentrations found
#> Warning in assert_conc(conc, any_missing_conc = any_missing_conc): Negative
#> concentrations found
#> Warning in log(data$conc): NaNs produced
#> Warning: Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Warning in assert_conc(conc, any_missing_conc = any_missing_conc): Negative
#> concentrations found
#> Warning: Requesting an AUC range starting (0) before the first measurement
#> (0.05) is not allowed
#> Warning in assert_conc(conc = conc): Negative concentrations found
#> Warning in assert_conc(conc, any_missing_conc = any_missing_conc): Negative
#> concentrations found
#> Warning in assert_conc(conc, any_missing_conc = any_missing_conc): Negative
#> concentrations found
#> Warning in assert_conc(conc, any_missing_conc = any_missing_conc): Negative
#> concentrations found
#> Warning in assert_conc(conc, any_missing_conc = any_missing_conc): Negative
#> concentrations found
#> Warning in log(data$conc): NaNs produced
#> Warning: Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Warning: Too few points for half-life calculation (min.hl.points=3 with only 0
#> points)
#> Warning: Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Warning in assert_conc(conc, any_missing_conc = any_missing_conc): Negative
#> concentrations found
#> Warning: Requesting an AUC range starting (0) before the first measurement
#> (0.05) is not allowed
#> Warning in assert_conc(conc = conc): Negative concentrations found
#> Warning in assert_conc(conc, any_missing_conc = any_missing_conc): Negative
#> concentrations found
#> Warning in assert_conc(conc, any_missing_conc = any_missing_conc): Negative
#> concentrations found
#> Warning in assert_conc(conc, any_missing_conc = any_missing_conc): Negative
#> concentrations found
#> Warning in assert_conc(conc, any_missing_conc = any_missing_conc): Negative
#> concentrations found
#> Warning in log(data$conc): NaNs produced
#> Warning: Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed

nca_summary_ars <- summary(nca_res)
knitr::kable(
  nca_summary_ars,
  caption = "Simulated NCA parameters (ARS) by weight band, single 4 mg/kg oral dose."
)
Simulated NCA parameters (ARS) by weight band, single 4 mg/kg oral dose.
Interval Start Interval End band N AUClast (h*nmol/L) Cmax (nmol/L) Tmax (h) Half-life (h)
0 8 40-47 81 NC 123 [72.1] 1.50 [0.450, 6.00] 0.931 [1.09]
0 8 47-53 63 NC 122 [62.6] 1.50 [0.550, 5.00] 0.789 [0.581]
0 8 53-60 56 NC 120 [71.7] 1.75 [0.350, 8.00] 0.858 [0.935], n=55
sim_nca_dha <- sim |>
  dplyr::filter(!is.na(Cc_dha), time > 0) |>
  dplyr::mutate(
    band = cut(WT,
               breaks = c(40, 47, 53, 60),
               labels = c("40-47", "47-53", "53-60"),
               include.lowest = TRUE)
  ) |>
  dplyr::select(id, time, Cc_dha = Cc_dha_nM, band)

conc_obj_dha <- PKNCA::PKNCAconc(sim_nca_dha, Cc_dha ~ time | band + id,
                                 concu = "nmol/L", timeu = "h")
nca_data_dha <- PKNCA::PKNCAdata(conc_obj_dha, dose_obj, intervals = intervals)
nca_res_dha  <- PKNCA::pk.nca(nca_data_dha)
#> Warning: Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Warning: Too few points for half-life calculation (min.hl.points=3 with only 0
#> points)
#> Warning: Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Warning: Too few points for half-life calculation (min.hl.points=3 with only 1
#> points)
#> Warning: Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Warning: Too few points for half-life calculation (min.hl.points=3 with only 0
#> points)
#> Warning: Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Warning: Too few points for half-life calculation (min.hl.points=3 with only 0
#> points)
#> Warning: Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.05) is not allowed

nca_summary_dha <- summary(nca_res_dha)
knitr::kable(
  nca_summary_dha,
  caption = "Simulated NCA parameters (DHA) by weight band, single 4 mg/kg oral dose."
)
Simulated NCA parameters (DHA) by weight band, single 4 mg/kg oral dose.
Interval Start Interval End band N AUClast (h*nmol/L) Cmax (nmol/L) Tmax (h) Half-life (h)
0 8 40-47 81 NC 1710 [58.0] 2.50 [0.900, 8.00] 1.44 [0.966], n=79
0 8 47-53 63 NC 1730 [45.5] 2.50 [1.00, 5.50] 1.44 [0.753]
0 8 53-60 56 NC 1710 [56.3] 2.75 [0.800, 8.00] 1.38 [0.677], n=54

Typical-value benchmarks

A simple check at the median WT = 50 kg subject under typical-value (no random effects) conditions:

Quantity Typical-value (this model, 50 kg)
ARS Cmax (nM) 137
ARS Tmax (h) 1.50
ARS apparent t1/2 (h) at WT = 50 kg 0.515
DHA Cmax (nM) 1975
DHA Tmax (h) 2.50
DHA apparent t1/2 (h) at WT = 50 kg 0.922

The half-life values are the apparent terminal half-lives computed algebraically from the typical-value parameters in Table 2 at the reference 50 kg patient (no influence of absorption / metabolite- formation kinetics on either species’ tail).

Assumptions and deviations

  • Time-varying parasite-density covariates on MTT and F are omitted. Lohy Das 2018 carries Eqs. 3 and 4, both of which scale MTT and F by a function of admission log-parasitaemia minus an undefined Log(PARA_min) reference value. The reference value is inherited a priori from the Thailand-Cambodia popPK/PD analysis (Lohy Das 2017 AAPS Journal 19:1842-54, reference [36] of the current paper). That upstream paper is not on disk in the source directory used by this extraction. Per the skill’s missing-parameter pathway, the operator decision recorded in the task’s sidecar (request-001 / response-001, 2026-05-30) was to drop Eqs. 3 and 4 and extract a self-contained PK model rather than fabricate Log(PARA_min). The structural disposition parameters (CL, V, MTT for both species, F, allometric scaling) are fully reproducible from Lohy Das 2018 Table 2 alone; the omitted covariate effects can be added in a follow-up extraction once the upstream paper is on disk and the reference value is confirmed.

  • PD layer is not encoded. Lohy Das 2018 reports a parasite-biomass PD compartment with first-order growth (KGROWTH = 10 per 48 h fixed), a delayed-effect compartment (ke0 = 0.123 1/h), and an Emax parasite-killing model with a mixture on Emax distinguishing artemisinin-sensitive (EmaxS = 0.268 1/h) and resistant (EmaxR = 0.155 1/h) infections, with P(resistant) = 56.1% of the cohort. EC50 and EmaxS were estimated using a frequentist prior drawn from the same Lohy Das 2017 AAPS J upstream paper. The mixture-driven PD layer requires (a) the upstream paper’s frequentist- prior parameters as inputs and (b) a MIX_RESISTANT Bernoulli covariate that has no precedent in the registry. Both items were deferred to a follow-up extraction by the same operator decision. The current packaged model is therefore a PK-only representation.

  • Single-dose validity only. The original paper’s PK analysis used plasma concentration data from the first administered dose only (Methods p.3, Discussion p.8: “The current study featured plasma concentration data from the first administered dose only and the effect of declining parasite densities … on pharmacokinetic parameters could not have been modeled beyond the first dose”). The Eqs. 3 and 4 covariate effects on MTT and F were added a priori by the source authors to prevent bias in the EC50 estimate; without them, the packaged model’s predictions are valid for first-dose simulation but should not be used unmodified for multi-dose simulation that crosses the day-2 / day-3 disease-effect window.

  • Residual-error mapping. Lohy Das 2018 Methods p.4: “the unexplained residual variability (RUV) was estimated by separate additive error models for log-transformed ARS and DHA concentrations (i.e. equal to exponential error models on an arithmetic scale).” Table 2 reports RUV as a CV% (73.2% for ARS, 58.5% for DHA). By the standing nlmixr2lib convention (references/parameter-names.md and the sibling Tan_2009_artesunate / Birgersson_2019_artesunate / Hendriksen_2013_ artesunate models), NONMEM additive-on-log-scale residual maps to nlmixr2 proportional residual in linear space, with propSd = SD on the log scale ~= CV in linear space to first order. The slight bias relative to the more accurate propSd = sqrt(exp(omega^2) - 1) mapping is well within the published RSE on RUV.

  • Allometric exponent encoding. Lohy Das 2018 Methods p.4 reports the WT scaling exponents 0.75 (CL) and 1.0 (V) as conventional structural choices, without explicitly marking them FIXED in the Table 2 listing (the table does not enumerate the exponents). This extraction encodes both as fixed() in ini() following the encoding in the sibling Birgersson_2019_artesunate, Hendriksen_2013_ artesunate, and Morris_2011_artesunate model files where the same exponent values are reported.

  • Unit choice. The packaged model carries dose in nmol, volume in L, and concentration in nmol/L, matching the source paper’s molar modelling basis (Methods p.4: “Observed concentrations of ARS and DHA (molar units) were transformed into their natural logarithms and modelled simultaneously”). A 4 mg/kg dose for a 50 kg subject (i.e. 200 mg total) is 520,261 nmol using the artesunate molar mass 384.42 g/mol. Conversion factors are documented in the vignette’s cohort-building code.

  • Time-fixed covariate. WT is treated as time-fixed at admission, consistent with the source paper’s modeling assumption and the single-dose validity window.

Errata

No erratum was identified at the time of extraction (no correction notice on the Malaria Journal landing page for doi:10.1186/s12936-018-2278-5; PubMed search “Lohy Das 2018 artesunate erratum” returned no matches). The Table 2 “covariate effects” row for PARAmaxF (Log10 parasitaemia) reports a 95% CI of 1.35-2.02 that brackets the 1.51 estimate, but the adjacent PARA MTT (Log10 parasitaemia) row reports an estimate of 0.115 with a 95% CI of 0.121-0.156, where the lower CI bound is above the point estimate. This inconsistency was noted during the extraction sidecar; because Eqs. 3 and 4 are omitted from the packaged model (see Assumptions and deviations), it does not affect the structural disposition parameters carried here. A future reviewer should confirm the PARA_MTT reading against the Lohy Das 2017 AAPS J upstream paper before adding the covariate effect.