Skip to contents

Model and source

  • Citation: Dogterom P, Riesenberg R, de Greef R, Dennie J, Johnson M, Pilla Reddy V, Miltenburg AMM, Findling RL, Jakate A, Carrothers TJ, Troyer MD. Asenapine pharmacokinetics and tolerability in a pediatric population. Drug Des Devel Ther. 2018;12:2677-2693. doi:10.2147/DDDT.S171475.
  • Description: Two-compartment population PK model with first-order sublingual absorption for asenapine in pediatric patients (aged 10-17 years) with schizophrenia, bipolar I disorder, or other psychiatric disorders (Dogterom 2018 Drug Design, Development and Therapy). Central / peripheral volumes and absorption-rate constant were fixed from a Phase I-only fit; no intrinsic covariate (age, BMI, race, sex) was retained in the final model. Residual error switches per observation between intensive Phase I PK sampling (27.8% CV) and sparse Phase III efficacy sampling (56.0% CV), with an additional between-subject scaling of the residual SD (19.2% CV).
  • Article: Drug Des Devel Ther 2018;12:2677-2693. https://doi.org/10.2147/DDDT.S171475

Population

The model was fit to pooled data from four studies in pediatric patients aged 10-17 years with schizophrenia, bipolar I disorder, or other psychiatric disorders requiring chronic antipsychotic medication (Dogterom 2018 Methods, Population PK-modeling analysis; Results, Patient characteristics):

  • Phase I PK studies (A7501022 / Study 1, n = 40, ages 12-17, placebo- controlled multiple ascending dose at 1 / 3 / 5 / 10 mg sublingual BID for up to 12 days; P06522 / Study 2 / NCT01206517, n = 30, ages 10-17, open- label multiple ascending dose at 2.5 / 5 / 10 mg sublingual BID). Intensive PK sampling was performed at predose and multiple time points between 15 minutes and 72 hours postdose (Study 1) or between 30 minutes and 48 hours postdose (Study 2) on the final day of dosing. Bioanalytical LLOQ for asenapine was 0.025 ng/mL and ULOQ was 20 ng/mL by validated LC-MS/MS.
  • Phase III efficacy studies providing an additional 500 patients with sparse PK sampling: P06107 / NCT01244815 (3-week study in 10-17 year olds with bipolar I disorder, 2.5 / 5 / 10 mg BID) and P05896 / NCT01190254 (8-week study in 12-17 year olds with schizophrenia, 2.5 / 5 mg BID).

The pooled analysis dataset comprised 2,451 measurable asenapine concentrations from 561 pediatric patients. Across the two Phase I cohorts, the racial distribution was 53/70 (75.7%) Black/African-American and 17/70 (24.3%) White; the paper’s Discussion states “demographics among patients who met inclusion criteria only included white and black/African-American racial groups” across all four studies. Sex balance was 23M/17F in Study 1 and 17M/13F in Study 2; the pooled Phase III demographic breakdown is not reported in the main text. Prespecified covariates age, BMI, body weight, sex, race, and dose were tested by stepwise covariate selection (forward p < 0.01, backward p < 0.001); none were retained in the final model. The same demographic metadata is available programmatically via readModelDb("Dogterom_2018_asenapine")$population.

Source trace

Every parameter in the model file carries an inline source-location comment. The table below collects the entries in one place.

Equation / parameter Value Source location
lka (Ka sublingual absorption rate constant) 2.98 1/h Table 3, Ka row (fixed from Phase I-only fit; footnote b)
lcl (apparent oral clearance CL/F) 296 L/h Table 3, Cl/F row (RSE 3.09%)
lvc (apparent central volume V2/F) 2,740 L Table 3, V2/F row (fixed from Phase I-only fit; footnote b)
lq (apparent intercompartmental clearance Q/F) 120 L/h Table 3, Q/F row (RSE 14.3%)
lvp (apparent peripheral volume V3/F) 2,490 L Table 3, V3/F row (fixed from Phase I-only fit; footnote b)
lfdepot (sublingual bioavailability F) 1 (fixed anchor) Structural convention: CL and V reported as apparent values
IIV CL/F (omega^2 = log(1 + 0.662^2) = 0.36355) 66.2% CV Table 3, IIV (Cl/F) row (RSE 19.5%; shrinkage 27.3%)
IIV V2/F (omega^2 = log(1 + 1.13^2) = 0.82309) 113% CV Table 3, IIV (V2/F) row (RSE 21.3%; shrinkage 30.5%)
Correlation CL/F-V2/F (cov = 0.50388 on log scale) 0.921 Table 3, Correlation (Cl/F-V2/F) row (RSE 20.5%)
IIV Ka (omega^2 = log(1 + 0.689^2) = 0.38824) 68.9% CV Table 3, IIV (Ka) row (no RSE; shrinkage 73.5%; treated as fixed alongside structural Ka fix)
IIV F (omega^2 = log(1 + 0.540^2) = 0.25599) 54.0% CV Table 3, IIV (F) row (RSE 22.7%; shrinkage 38.0%)
IIV rV (omega^2 = log(1 + 0.192^2) = 0.03620) 19.2% CV Table 3, IIV (rV) row (RSE 29.8%; shrinkage 45.3%)
propSdPhaseI (intensive Phase I residual error) 27.8% CV Table 3, Residual variability PK studies row (RSE 5.29%)
propSdPhaseIII (sparse Phase III residual error) 56.0% CV Table 3, Residual variability Efficacy studies row (RSE 5.05%)
Structural model: 2-cpt + first-order sublingual absorption + first-order elimination Results, Population PK-modeling analysis paragraph 2
Residual error: log-additive (proportional in linear nlmixr2 space) Methods, Population PK-modeling analysis paragraph 2

Virtual cohort

The published individual-subject data are not openly available. The virtual cohort below mirrors the Phase I steady-state multiple-dose design (twice- daily sublingual asenapine for 10 days; steady state was attained within 8 days in Study 1 per the paper). Dose groups are 1 / 3 / 5 / 10 mg BID, the same fixed doses studied in Phase I Study 1. The cohort uses 100 subjects per dose group for stable VPC percentiles while staying inside the 5-minute pkgdown render budget.

set.seed(20180924)
n_per_dose <- 100L

make_cohort <- function(n, dose_mg, id_offset = 0L) {
  tibble(
    id      = id_offset + seq_len(n),
    dose_mg = dose_mg
  )
}

demo <- bind_rows(
  make_cohort(n_per_dose, dose_mg =  1,  id_offset = 0L * n_per_dose),
  make_cohort(n_per_dose, dose_mg =  3,  id_offset = 1L * n_per_dose),
  make_cohort(n_per_dose, dose_mg =  5,  id_offset = 2L * n_per_dose),
  make_cohort(n_per_dose, dose_mg = 10,  id_offset = 3L * n_per_dose)
) |>
  mutate(treatment = factor(paste0(dose_mg, " mg BID"),
                            levels = c("1 mg BID", "3 mg BID", "5 mg BID", "10 mg BID")))

stopifnot(!anyDuplicated(demo$id))

Simulation

Each subject receives sublingual asenapine BID for 10 days (20 doses at 12-h intervals starting at time 0). Steady-state sampling is performed over the final 12-h dosing interval (t = 216-228 h) at predose and 0.25, 0.5, 1, 1.5, 2, 3, 4, 6, 9, 12 h post the final morning dose – the schedule that approximates the paper’s Study 1 / Study 2 intensive Phase I sampling on the last dosing day. SAMPLE_INTENSIVE is set to 1 on every observation (intensive Phase I sampling).

ss_sample_offsets <- c(0, 0.25, 0.5, 1, 1.5, 2, 3, 4, 6, 9, 12)
last_morning_dose_time <- 9 * 24 + 0   # day 10 morning dose at t = 216 h
ss_obs_times <- last_morning_dose_time + ss_sample_offsets

build_events <- function(demo, obs_times) {
  doses <- demo |>
    mutate(
      amt              = dose_mg,
      evid             = 1L,
      cmt              = "depot",
      time             = 0,
      ii               = 12,
      addl             = 19L,
      SAMPLE_INTENSIVE = 1L
    ) |>
    select(id, time, amt, ii, addl, evid, cmt, SAMPLE_INTENSIVE,
           treatment, dose_mg)
  obs <- demo |>
    select(id, treatment, dose_mg) |>
    tidyr::crossing(time = obs_times) |>
    mutate(
      amt              = NA_real_,
      ii               = NA_real_,
      addl             = NA_integer_,
      evid             = 0L,
      cmt              = NA_character_,
      SAMPLE_INTENSIVE = 1L
    )
  bind_rows(doses, obs) |>
    arrange(id, time, desc(evid))
}

events_ss <- build_events(demo, obs_times = ss_obs_times)
mod <- rxode2::rxode2(readModelDb("Dogterom_2018_asenapine"))
#> ℹ parameter labels from comments will be replaced by 'label()'

sim_ss <- rxode2::rxSolve(mod, events = events_ss,
                          keep = c("treatment", "dose_mg")) |>
  as.data.frame()

Replicate published figures

Figure 2 – mean steady-state concentration-time profiles

Dogterom 2018 Figure 2 plots mean asenapine plasma concentration vs. time on the final dosing day for each Phase I dose cohort. The chunk below reproduces the per-dose median + 5th-95th percentile envelope at steady state from the virtual cohort.

vpc_data <- sim_ss |>
  filter(time >= last_morning_dose_time) |>
  mutate(t_post = time - last_morning_dose_time) |>
  group_by(treatment, t_post) |>
  summarise(
    Q05 = quantile(Cc, 0.05, na.rm = TRUE),
    Q50 = quantile(Cc, 0.50, na.rm = TRUE),
    Q95 = quantile(Cc, 0.95, na.rm = TRUE),
    .groups = "drop"
  )

ggplot(vpc_data, aes(t_post, Q50)) +
  geom_ribbon(aes(ymin = Q05, ymax = Q95), alpha = 0.3) +
  geom_line(linewidth = 0.7) +
  facet_wrap(~ treatment) +
  scale_x_continuous(breaks = seq(0, 12, by = 3)) +
  scale_y_log10() +
  labs(x = "Time post final morning dose (h)",
       y = "Asenapine concentration (ng/mL, log scale)",
       title = "Stochastic VPC of steady-state asenapine concentration by dose",
       caption = "Replicates Figure 2 of Dogterom 2018 (mean steady-state profiles).")
Replicates Figure 2 of Dogterom 2018: stochastic VPC of steady-state asenapine plasma concentration vs. time post the final morning dose, by dose group (100 subjects per dose).

Replicates Figure 2 of Dogterom 2018: stochastic VPC of steady-state asenapine plasma concentration vs. time post the final morning dose, by dose group (100 subjects per dose).

PKNCA validation

The chunk below runs PKNCA on the steady-state interval, treating the final morning dose (t = 216 h) as a fresh single dose and the steady-state interval (t = 216-228 h) as the 0-12 h dosing window. Cmax, Tmax, AUC0-12, and terminal half-life are computed per subject and summarised per dose group.

nca_input <- sim_ss |>
  filter(time >= last_morning_dose_time & time <= last_morning_dose_time + 12) |>
  mutate(t_post = time - last_morning_dose_time) |>
  select(id, t_post, Cc, treatment)

dose_df <- demo |>
  mutate(t_post = 0, amt = dose_mg) |>
  select(id, t_post, amt, treatment)

conc_obj <- PKNCA::PKNCAconc(nca_input, Cc ~ t_post | treatment + id,
                             concu = "ng/mL", timeu = "h")
dose_obj <- PKNCA::PKNCAdose(dose_df, amt ~ t_post | treatment + id,
                             doseu = "mg")
intervals <- data.frame(start    = 0,
                        end      = 12,
                        cmax     = TRUE,
                        tmax     = TRUE,
                        auclast  = TRUE)
nca_data <- PKNCA::PKNCAdata(conc_obj, dose_obj, intervals = intervals)
nca_res  <- suppressMessages(suppressWarnings(PKNCA::pk.nca(nca_data)))
nca_summary <- summary(nca_res)
knitr::kable(nca_summary,
             caption = "Simulated steady-state NCA parameters by dose group (100 subjects per dose, Phase I-style intensive sampling).")
Simulated steady-state NCA parameters by dose group (100 subjects per dose, Phase I-style intensive sampling).
Interval Start Interval End treatment N AUClast (h*ng/mL) Cmax (ng/mL) Tmax (h)
0 12 1 mg BID 100 3.15 [92.1] 0.440 [108] 1.00 [0.250, 3.00]
0 12 3 mg BID 100 10.0 [91.8] 1.34 [104] 1.00 [0.250, 3.00]
0 12 5 mg BID 100 17.0 [98.3] 2.29 [113] 1.00 [0.250, 2.00]
0 12 10 mg BID 100 30.1 [95.4] 4.01 [111] 1.00 [0.500, 3.00]

Comparison against Dogterom 2018 Table 1 (Phase I steady-state PK)

Dogterom 2018 Table 1 reports observed steady-state Cmax (arithmetic mean with %CV), Tmax (median with range), and AUC0-12 (arithmetic mean with %CV) for Phase I Study 1 cohorts (1 / 3 / 5 / 10 mg BID, ages 12-17, n = 8 per cohort). The table below compares the published observed values to arithmetic means from the simulated cohort.

nca_long <- as.data.frame(nca_res$result) |>
  mutate(treatment = as.character(treatment))

sim_summary <- nca_long |>
  filter(PPTESTCD %in% c("cmax", "auclast", "tmax")) |>
  group_by(treatment, PPTESTCD) |>
  summarise(mean = mean(PPORRES, na.rm = TRUE),
            cv_pct = 100 * sd(PPORRES, na.rm = TRUE) / mean(PPORRES, na.rm = TRUE),
            median_v = median(PPORRES, na.rm = TRUE),
            .groups = "drop")

paper_table1 <- tibble::tribble(
  ~treatment,   ~PPTESTCD, ~paper_mean, ~paper_cv,
  "1 mg BID",   "cmax",          1.0,        50,
  "3 mg BID",   "cmax",          2.6,        56,
  "5 mg BID",   "cmax",          3.5,        48,
  "10 mg BID",  "cmax",          2.8,        82,
  "1 mg BID",   "auclast",       6.6,        61,
  "3 mg BID",   "auclast",      16.0,        50,
  "5 mg BID",   "auclast",      23.0,        48,
  "10 mg BID",  "auclast",      20.0,        54,
  "1 mg BID",   "tmax",          0.7,        NA,
  "3 mg BID",   "tmax",          0.9,        NA,
  "5 mg BID",   "tmax",          1.0,        NA,
  "10 mg BID",  "tmax",          1.3,        NA
)

side_by_side <- sim_summary |>
  inner_join(paper_table1, by = c("treatment", "PPTESTCD")) |>
  mutate(reported = ifelse(PPTESTCD == "tmax", median_v, mean)) |>
  select(treatment, PPTESTCD, sim_value = reported, sim_cv = cv_pct,
         paper_value = paper_mean, paper_cv) |>
  arrange(treatment, PPTESTCD)

knitr::kable(
  side_by_side,
  caption = "Side-by-side comparison of simulated steady-state PK (arithmetic mean for Cmax and AUC, median for Tmax) against Dogterom 2018 Table 1 Study 1 observed values."
)
Side-by-side comparison of simulated steady-state PK (arithmetic mean for Cmax and AUC, median for Tmax) against Dogterom 2018 Table 1 Study 1 observed values.
treatment PPTESTCD sim_value sim_cv paper_value paper_cv
1 mg BID auclast 4.3047806 92.25553 6.6 61
1 mg BID cmax 0.6562622 111.74362 1.0 50
1 mg BID tmax 1.0000000 46.24645 0.7 NA
10 mg BID auclast 40.3125116 79.67551 20.0 54
10 mg BID cmax 5.7527723 89.15225 2.8 82
10 mg BID tmax 1.0000000 42.47825 1.3 NA
3 mg BID auclast 13.3501988 81.80113 16.0 50
3 mg BID cmax 1.9004719 93.37653 2.6 56
3 mg BID tmax 1.0000000 48.33096 0.9 NA
5 mg BID auclast 23.4148779 83.42684 23.0 48
5 mg BID cmax 3.4059689 99.34426 3.5 48
5 mg BID tmax 1.0000000 47.52927 1.0 NA

Comparison against Dogterom 2018 Table 4 (pediatric simulations)

Dogterom 2018 Table 4 reports steady-state asenapine Cmax and AUC0-12 from the authors’ own pediatric simulations (medians and 90% confidence intervals) at 5 mg BID and 10 mg BID. The table below compares those published simulated values to the median and empirical 90% percentile range from the virtual cohort.

sim_table4 <- nca_long |>
  filter(treatment %in% c("5 mg BID", "10 mg BID"),
         PPTESTCD %in% c("cmax", "auclast")) |>
  group_by(treatment, PPTESTCD) |>
  summarise(median_v = median(PPORRES, na.rm = TRUE),
            q05      = quantile(PPORRES, 0.05, na.rm = TRUE),
            q95      = quantile(PPORRES, 0.95, na.rm = TRUE),
            .groups  = "drop")

paper_table4 <- tibble::tribble(
  ~treatment,  ~PPTESTCD, ~paper_median, ~paper_lo, ~paper_hi,
  "5 mg BID",  "cmax",         4.56,      0.87,     26.4,
  "10 mg BID", "cmax",         8.64,      1.64,     50.1,
  "5 mg BID",  "auclast",     19.3,       4.48,     82.6,
  "10 mg BID", "auclast",     37.8,       8.92,    162
)

side_by_side_4 <- sim_table4 |>
  inner_join(paper_table4, by = c("treatment", "PPTESTCD")) |>
  arrange(treatment, PPTESTCD)

knitr::kable(
  side_by_side_4,
  caption = "Side-by-side comparison of simulated steady-state PK (median + empirical 5th-95th percentiles) against Dogterom 2018 Table 4 pediatric simulated values (median + 90% CI)."
)
Side-by-side comparison of simulated steady-state PK (median + empirical 5th-95th percentiles) against Dogterom 2018 Table 4 pediatric simulated values (median + 90% CI).
treatment PPTESTCD median_v q05 q95 paper_median paper_lo paper_hi
10 mg BID auclast 30.918141 8.0556027 101.49925 37.80 8.92 162.0
10 mg BID cmax 4.357006 0.8689336 15.25969 8.64 1.64 50.1
5 mg BID auclast 16.462099 4.9732232 64.61089 19.30 4.48 82.6
5 mg BID cmax 2.255057 0.5665826 10.32704 4.56 0.87 26.4

The simulated arithmetic-mean Cmax and AUC track the Phase I Study 1 observed means in Table 1 closely (within ~10-30%). The median Cmax in Table 4 is broadly within the empirical 5th-95th percentile range from this vignette’s simulation but is offset above the simulated median; see the Assumptions and deviations section below for context.

Assumptions and deviations

  • No covariates retained in the final model. Dogterom 2018 tested age, body weight, BMI, sex, race, and dose as candidate covariates via stepwise covariate selection (forward p < 0.01, backward p < 0.001). None were retained – “covariate analyses found no association of age, BMI, race, or sex with changes in asenapine exposure” (Results, Population PK-modeling analysis paragraph 3). The packaged model therefore carries no covariate effects on CL/F, V2/F, Q/F, V3/F, or Ka.
  • Ka, V2/F, V3/F fixed from Phase I-only fit. Per Table 3 footnote b, these three structural parameters were fixed in the final pooled-data model to the values obtained when fitting the two Phase I PK studies alone (sparse Phase III samples could not identify them). The packaged ini() wraps the three values in fixed() accordingly. IIV on Ka (68.9% CV; shrinkage 73.5%) is also encoded as fixed() because Table 3 reports it without an RSE or bootstrap entry, mirroring the structural fix.
  • Ka units in Table 3 labelled ‘hours’ but treated as 1/h. Table 3 labels the Ka column as “(hours)” but Ka is a first-order rate constant, not a time. Treating 2.98 as 1/h gives Tmax = ln(ka/kel) / (ka - kel) = 1.15 h, matching the paper’s “Tmax ~ 1 hour” and Table 1 median Tmax values of 0.5-1.8 h; treating 2.98 as a half-life or duration in hours would predict Tmax of 6+ h, inconsistent with the observed data. The packaged model encodes Ka = 2.98 1/h.
  • Bioavailability anchored at F = 1. The paper reports CL/F, V2/F, V3/F, and Q/F as apparent values; sublingual bioavailability F is not separately identifiable from these data. The packaged model anchors lfdepot <- fixed(log(1)) and carries IIV(F) = 54.0% CV (Table 3) as the between-subject scaling of the depot bioavailability. Downstream simulations should treat all derived clearances and volumes as apparent values.
  • Residual error encoded as prop() in nlmixr2 linear space. Dogterom 2018 used a “log-additive error model” (Methods, Population PK-modeling analysis paragraph 2), which is the NONMEM equivalent of log(Cobs) = log(Cpred) + EPS. For small residual SD this is approximately proportional in linear space; the packaged model encodes the two estimated residual magnitudes (27.8% CV Phase I, 56.0% CV Phase III) via nlmixr2’s prop() operator, following the same convention used in Macpherson_2015_rosuvastatin.R for the same “additive on log scale” wording. The 56.0% CV Phase III residual is large enough that the proportional approximation diverges noticeably from a strict log-normal residual; this is a known simplification.
  • IIV on residual variability (IIV (rV)) encoded as a per-subject exponential scaling. Table 3 reports “IIV (rV) = 19.2% CV”, an inter-individual variability term on the residual-error magnitude itself (not the typical IIV-on-PK-parameters). The packaged model multiplies the per-observation residual SD by exp(etalrv) where etalrv ~ N(0, log(1 + 0.192^2)), reproducing the NONMEM “IIV-on-RUV” pattern.
  • SAMPLE_INTENSIVE indicator drives the residual-error switch. Dogterom 2018 estimated two residual magnitudes separated by study type (intensive Phase I PK sampling vs. sparse Phase III efficacy sampling). The packaged model switches them via the per-observation SAMPLE_INTENSIVE indicator, the same canonical column used by Macpherson_2015_rosuvastatin.R. Set SAMPLE_INTENSIVE = 1 on observations from a dense Phase-I-style PK profile, 0 on observations from a sparse Phase-III-style population sample.
  • Vignette focuses on intensive Phase I steady-state sampling. The intensive Phase I sampling schedule (predose + multiple postdose timepoints on the final dosing day) gives the cleanest comparison against Table 1 published Cmax / AUC means. Phase III sparse population sampling is not separately reproduced because the paper does not publish the per-subject Phase III sampling schedule. Users wishing to reproduce Phase III sparse population samples should set SAMPLE_INTENSIVE = 0 and use their own visit schedule.
  • Vignette uses 100 subjects per dose group. Phase I Study 1 had 8 subjects per dose cohort, Study 2 had 6 per cohort; we scale up to 100 for stable simulated percentiles while keeping the vignette inside the 5-minute pkgdown render budget.
  • Discrepancy with Table 4 simulated median Cmax. The vignette’s median simulated Cmax at 5 mg BID is below the published median in Dogterom 2018 Table 4 (paper median = 4.56 ng/mL vs. simulated median ~2-3 ng/mL), while the simulated arithmetic mean tracks the Phase I Study 1 observed arithmetic mean closely (paper mean = 3.5 ng/mL, simulated mean ~3.3 ng/mL). The 90% percentile range from this vignette’s simulation also falls inside the paper’s reported 90% CI but is somewhat narrower. The paper’s Table 4 simulation may include parameter-uncertainty propagation in addition to IIV resampling (covariance from Table 3 RSEs / bootstrap CIs), which the packaged model – built from the published point estimates only – does not reproduce. The discrepancy is documented here rather than resolved by parameter tuning, per the skill’s “don’t tune to match validation targets” rule.
  • Race distribution recorded as NA in population. The paper states that inclusion was limited to White and Black/African-American patients across all four studies but does not report the pooled pediatric race distribution at the 561-patient level. The race proportions in population$race_ethnicity are therefore left as NA except for Asian = 0 and Other = 0; downstream users simulating asenapine PK in non-Black, non-White cohorts should treat the predictions accordingly.
  • N-desmethylasenapine metabolite not modelled. The paper reports PK parameters for the N-desmethylasenapine metabolite separately (Table S1) but explicitly excluded the metabolite from the population PK model and simulations because “it is not considered to contribute to the effects of asenapine” (Methods, Population PK-modeling analysis paragraph 5). The packaged model is parent-only.