Skip to contents

Model and source

  • Citation: Liva S, Chen M, Mortazavi A, Walker A, Wang J, Dittmar K, Hofmeister C, Coss CC, Phelps MA. Population Pharmacokinetic Analysis from First-in-Human Data for HDAC Inhibitor, REC-2282 (AR-42), in Patients with Solid Tumors and Hematologic Malignancies: A Case Study for Evaluating Flat vs. Body Size Normalized Dosing. Eur J Drug Metab Pharmacokinet. 2021;46:807-816. doi:10.1007/s13318-021-00722-z.
  • Description: Two-compartment population PK model for the oral pan-histone-deacetylase inhibitor REC-2282 (AR-42) in 55 adults with relapsed or refractory solid tumours or haematologic malignancies pooled from the first-in-human trial OSU09102 (NCT01129193) and the phase 1 acute myeloid leukaemia trial OSU11130 (NCT01798901) (Liva 2021). Oral doses of 20-80 mg enter a depot after an absorption lag time and pass through one transit compartment to the central compartment, with the same first-order rate constant ka for both steps; elimination is first-order from the central compartment and all volumes and clearances are apparent (CL/F, Vc/F, Q/F, Vp/F). Fat-free mass (Janmahasatian) is a power covariate on CL/F centred on the cohort median of 50.8 kg, and tumour type (haematologic vs solid) and formulation (tablet vs capsule) are linear fractional covariates on the lag time. IIV on CL/F and ka; residual error is additive on log-transformed concentrations.
  • Article: https://doi.org/10.1007/s13318-021-00722-z (open access; PMC8599380)

REC-2282 (development code AR-42, formerly OSU-HDAC42) is an oral pan-histone-deacetylase inhibitor with no international non-proprietary name, so the model is named for its current development code.

Population

Liva 2021 pooled two phase 1 trials run at The Ohio State University Comprehensive Cancer Center: the first-in-human trial OSU09102 (NCT01129193; multiple myeloma, lymphoma and advanced solid tumours including neurofibromatosis type 2) and OSU11130 (NCT01798901; relapsed or refractory acute myeloid leukaemia). Of 57 enrolled patients (44 + 13; Table 1), 882 plasma concentrations from 55 were modelled (Results 3.2). Table 2 summarises the 56 patients with anthropometric data: median weight 76.1 kg (42.9-122.4), median fat-free mass 50.8 kg (29.9-76.0), median BMI 26.0 kg/m^2, median age 63 years (20-80), 51.8% female. Supplemental Table 2 lists 40 patients with a haematologic malignancy (multiple myeloma 17, lymphoma 10, AML 13) and 16 with a solid tumour. Doses of 20-80 mg were taken fasted three times weekly (Monday, Wednesday, Friday; one OSU11130 cohort 40 mg four times weekly) for 3 weeks of each 28-day cycle, with intensive sampling on day 1 and on day 5 (OSU11130) or day 19 (OSU09102).

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

Source trace

Every ini() value carries an in-file comment pointing to its source; the table collects them.

Equation / parameter Value Source location
Structure: depot -(ka)-> transit -(ka)-> central <-> peripheral, lag on the dose n/a Fig. 2; Results 3.2; Discussion
lcl (CL/F) log(11.6) L/h Table 3, covariate model
lvc (Vc/F) log(105) L Table 3, covariate model
lq (Q/F) log(7.1) L/h Table 3, covariate model
lvp (Vp/F) log(76.5) L Table 3, covariate model
lka (ka) log(1.28) 1/h Table 3, covariate model
ltlag (ALAG) log(0.0453) h Table 3, covariate model (no IIV in the final model, Results 3.2)
e_ffm_cl 0.493 Table 3 ‘Covariates FFM’; power form of Equation 1
e_heme_tlag 0.942 Table 3 ‘Covariates TMR’; linear form of Equation 2
e_tablet_tlag 0.74 Table 3 ‘Covariates FORM’; linear form of Equation 2
FFM centring value 50.8 kg Table 2 median FFM, all patients; Section 2.3 (median normalisation)
FFM equation Janmahasatian Section 2.4
etalcl 0.05068 Table 3: 22.8 CV%, as log(CV^2 + 1)
etalka 0.20500 Table 3: 47.7 CV%, as log(CV^2 + 1)
expSd 0.545 Table 3 epsilon (SD, per footnote); Section 2.3 ‘additive error model for log-transformed data’

Virtual cohort

The observed data are not public. The virtual cohort reproduces the Table 2 demographics: body weight log-normal around the median of 76.1 kg, BMI normal with the Table 2 mean and SD, 51.8% female, and fat-free mass computed from these by the Janmahasatian equations the paper uses (Section 2.4). Tumour type follows the Supplemental Table 2 split (40 of 56 haematologic). The paper does not report how many patients took each formulation, so half the cohort is assigned capsules.

Four dose levels are simulated on the paper’s three-times-weekly schedule (doses on days 1, 3, 5, 8, 10, 12, 15, 17 and 19), with 100 virtual patients per arm.

set.seed(20211007)
dose_levels <- c(20, 40, 50, 60)
n_per_arm <- 100L

ffm_janmahasatian <- function(wt, bmi, sexf) {
  ifelse(
    sexf == 1,
    9270 * wt / (8780 + 244 * bmi),
    9270 * wt / (6680 + 216 * bmi)
  )
}

dose_days <- c(1, 3, 5, 8, 10, 12, 15, 17, 19)
dose_times <- (dose_days - 1) * 24
obs_rel <- c(0, 0.25, 0.5, 1, 1.5, 2, 3, 4, 6, 8, 10, 12, 16, 24)
obs_times <- sort(unique(c(
  obs_rel, 36, 47.99,          # day 1 (to the day 3 dose)
  96 + obs_rel,                # day 5
  432 + obs_rel, 432 + 36, 480 # day 19
)))

make_cohort <- function(n, dose, id_offset) {
  subj <- tibble(
    id = id_offset + seq_len(n),
    SEXF = rbinom(n, 1, 0.518),
    WT = pmin(pmax(exp(rnorm(n, log(76.1), 0.23)), 42.9), 122.4),
    BMI = pmin(pmax(rnorm(n, 26.7, 5.4), 18.5), 43.6),
    TUMTP_SOLID = 1L - rbinom(n, 1, 40 / 56),
    FORM_CAPSULE = rbinom(n, 1, 0.5),
    treatment = paste(dose, "mg")
  ) |>
    mutate(FFM = ffm_janmahasatian(WT, BMI, SEXF))
  doses <- tidyr::crossing(subj, time = dose_times) |>
    mutate(evid = 1L, amt = dose, cmt = "depot")
  obs <- tidyr::crossing(subj, time = obs_times) |>
    mutate(evid = 0L, amt = 0, cmt = "central")
  bind_rows(doses, obs) |>
    arrange(id, time, desc(evid))
}

events <- bind_rows(lapply(seq_along(dose_levels), function(i) {
  make_cohort(n_per_arm, dose_levels[i], id_offset = (i - 1L) * n_per_arm)
}))
stopifnot(!anyDuplicated(unique(events[, c("id", "time", "evid")])))

cohort <- distinct(events, id, treatment, SEXF, WT, BMI, FFM, TUMTP_SOLID)
summary(cohort$FFM)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>   24.80   43.69   50.41   52.49   59.53  106.28

The simulated median FFM (50.4 kg) lies close to the Table 2 median of 50.8 kg, so the virtual cohort is centred where the CL/F covariate term is anchored.

Simulation

mod <- readModelDb("Liva_2021_rec2282")
sim <- rxode2::rxSolve(
  mod,
  events = events,
  keep = c("treatment", "FFM", "TUMTP_SOLID", "FORM_CAPSULE")
) |>
  as.data.frame() |>
  mutate(
    day = case_when(
      time < 48 ~ "Day 1",
      time >= 96 & time <= 120 ~ "Day 5",
      time >= 432 ~ "Day 19",
      TRUE ~ NA_character_
    ),
    tad = case_when(
      day == "Day 1" ~ time,
      day == "Day 5" ~ time - 96,
      day == "Day 19" ~ time - 432
    )
  )
#> ℹ parameter labels from comments will be replaced by 'label()'

Cc is the individual prediction without residual error.

Replicate published figures

# Replicates Figure 1 of Liva 2021: mean concentration by dose level on days 1, 5 and 19.
sim |>
  filter(!is.na(day)) |>
  group_by(day, treatment, time) |>
  summarise(Cc = mean(Cc), .groups = "drop") |>
  mutate(day = factor(day, c("Day 1", "Day 5", "Day 19"))) |>
  ggplot(aes(time, Cc, colour = treatment)) +
  geom_line() +
  facet_wrap(~day, ncol = 1, scales = "free_x") +
  scale_y_log10(limits = c(1, 1000)) +
  labs(
    x = "Time after first dose (h)", y = "REC-2282 (ng/mL)", colour = "Dose",
    caption = "Replicates Figure 1 of Liva 2021 (lines = mean of each dose group)."
  )
#> Warning in scale_y_log10(limits = c(1, 1000)): log-10 transformation introduced
#> infinite values.

Figure 1 of the paper shows day-1 mean peaks of roughly 100 ng/mL at 20 mg to 300-400 ng/mL at 50-70 mg, falling to about 3-10 ng/mL by 48 h; the simulated means follow the same pattern.

# Replicates the style of Figure 3 of Liva 2021 (VPC) for the 40 mg arm, which
# contributed the most patients (Table 1).
set.seed(1)
sim |>
  filter(treatment == "40 mg", !is.na(day)) |>
  mutate(
    obs = Cc * exp(rnorm(n(), 0, 0.545)),
    day = factor(day, c("Day 1", "Day 5", "Day 19"))
  ) |>
  group_by(day, tad) |>
  summarise(
    Q05 = quantile(obs, 0.05), Q50 = quantile(obs, 0.50),
    Q95 = quantile(obs, 0.95), .groups = "drop"
  ) |>
  ggplot(aes(tad, Q50)) +
  geom_ribbon(aes(ymin = Q05, ymax = Q95), alpha = 0.25) +
  geom_line() +
  facet_wrap(~day) +
  scale_y_log10() +
  labs(
    x = "Time after dose (h)", y = "REC-2282 (ng/mL)",
    caption = "Simulated 5th/50th/95th percentiles with residual error, 40 mg arm (cf. Figure 3 of Liva 2021)."
  )
#> Warning in scale_y_log10(): log-10 transformation introduced infinite values.
#> log-10 transformation introduced infinite values.
#> log-10 transformation introduced infinite values.
#> log-10 transformation introduced infinite values.

Supplemental Figure 3: typical AUC at a 40 mg flat dose

Supplemental Figure 3 shows simulated AUCs for the patients dosed at 40 mg flat. The box is narrow (whiskers about 2.7-3.2 hmg/L, median about 2.85 hmg/L), which indicates typical-value predictions that vary only by each patient’s FFM. The paper does not state the AUC window, so the typical-value AUC over 0-24 h, 0-48 h (the dosing interval) and 0-infinity is shown for the cohort median FFM.

mod_typ <- rxode2::zeroRe(mod)
#> ℹ parameter labels from comments will be replaced by 'label()'
ev_typ <- rxode2::et(amt = 40, cmt = "depot") |>
  rxode2::et(seq(0, 480, by = 0.05), cmt = "central") |>
  as.data.frame() |>
  mutate(FFM = 50.8, TUMTP_SOLID = 1, FORM_CAPSULE = 1)
typ <- as.data.frame(rxode2::rxSolve(mod_typ, ev_typ))
#> ℹ omega/sigma items treated as zero: 'etalcl', 'etalka'
trap <- function(t, y) sum(diff(t) * (head(y, -1) + tail(y, -1)) / 2)
auc_window <- function(end) {
  x <- typ[typ$time <= end, ]
  trap(x$time, x$Cc) / 1000
}
typ_auc <- tibble(
  window = c("0-24 h", "0-48 h", "0-infinity (dose / CL)"),
  auc = c(auc_window(24), auc_window(48), 40 / 11.6)
)
knitr::kable(
  typ_auc |> rename("AUC window" = window, "Typical AUC (h*mg/L)" = auc),
  digits = 2,
  caption = "Typical-value AUC after 40 mg at FFM = 50.8 kg; Supplemental Figure 3 median is about 2.85 h*mg/L."
)
Typical-value AUC after 40 mg at FFM = 50.8 kg; Supplemental Figure 3 median is about 2.85 h*mg/L.
AUC window Typical AUC (h*mg/L)
0-24 h 2.64
0-48 h 3.18
0-infinity (dose / CL) 3.45
# Structural gate: the digitised median (2.85) must lie between the shortest
# and the longest plausible window. A mis-transcribed CL or unit moves both
# bounds by the same factor and breaks this.
stopifnot(typ_auc$auc[1] < 2.85 * 1.1, typ_auc$auc[3] > 2.85 * 0.9)

The digitised median of 2.85 h*mg/L falls between the typical AUC0-24 and the AUC0-infinity. (The trapezoid sum above is a check on a single noiseless profile; the cohort NCA below uses PKNCA.)

PKNCA validation

NCA is run on the day-1 and day-19 dosing days over 0-24 h after the dose, per dose level.

sim_nca <- sim |>
  filter(!is.na(Cc), day %in% c("Day 1", "Day 19"), tad <= 24) |>
  select(id, time, Cc, treatment)

conc_obj <- PKNCA::PKNCAconc(sim_nca, Cc ~ time | treatment + id)
dose_df <- events |>
  filter(evid == 1) |>
  select(id, time, amt, treatment)
dose_obj <- PKNCA::PKNCAdose(dose_df, amt ~ time | treatment + id)

intervals <- data.frame(
  start = c(0, 432),
  end = c(24, 456),
  cmax = TRUE,
  tmax = TRUE,
  auclast = TRUE
)
nca_res <- PKNCA::pk.nca(PKNCA::PKNCAdata(conc_obj, dose_obj, intervals = intervals))

nca_df <- as.data.frame(nca_res$result) |>
  mutate(day = ifelse(start == 0, "Day 1", "Day 19"))

nca_df |>
  filter(PPTESTCD %in% c("cmax", "tmax", "auclast")) |>
  group_by(treatment, day, PPTESTCD) |>
  summarise(median = median(PPORRES), .groups = "drop") |>
  tidyr::pivot_wider(names_from = PPTESTCD, values_from = median) |>
  rename(
    "Dose" = treatment, "Day" = day, "Cmax (ng/mL)" = cmax,
    "Tmax (h)" = tmax, "AUC0-24 (ng*h/mL)" = auclast
  ) |>
  knitr::kable(digits = 1, caption = "Simulated median NCA by dose level and day.")
Simulated median NCA by dose level and day.
Dose Day AUC0-24 (ng*h/mL) Cmax (ng/mL) Tmax (h)
20 mg Day 1 1322.2 126.9 3
20 mg Day 19 1423.1 135.7 3
40 mg Day 1 2629.5 257.0 3
40 mg Day 19 2827.4 268.3 3
50 mg Day 1 3304.6 315.2 3
50 mg Day 19 3576.4 331.4 3
60 mg Day 1 3856.0 380.5 3
60 mg Day 19 4137.1 401.3 3

Comparison against published NCA

Liva 2021 does not tabulate NCA. The first-in-human report of the haematologic arm of OSU09102 (Sborov et al., Leuk Lymphoma 2017;58:2310-2318, doi:10.1080/10428194.2017.1298751) gives day-1 and day-19 geometric-mean Cmax of 0.383 and 0.335 uM at 20 mg, 0.794 and 0.830 uM at 40 mg, and 1.60 and 1.50 uM at 50 mg. These are converted to ng/mL with the REC-2282 molecular weight of 312.4 g/mol (C18H20N2O3). The simulated median is compared with the geometric mean, which is close to the median for log-normal data.

mw <- 312.37
published <- tibble::tribble(
  ~treatment, ~day, ~cmax,
  "20 mg", "Day 1", 0.383,
  "20 mg", "Day 19", 0.335,
  "40 mg", "Day 1", 0.794,
  "40 mg", "Day 19", 0.830,
  "50 mg", "Day 1", 1.60,
  "50 mg", "Day 19", 1.50
) |>
  mutate(cmax = cmax * mw)

cmp <- nlmixr2lib::ncaComparisonTable(
  simulated = nca_df |> filter(treatment %in% published$treatment),
  reference = published,
  by = c("treatment", "day"),
  params = "cmax",
  units = c(cmax = "ng/mL"),
  tolerance_pct = 20
)
knitr::kable(cmp, caption = "Simulated vs. published Cmax (Sborov 2017). * differs by >20%.")
Simulated vs. published Cmax (Sborov 2017). * differs by >20%.
NCA parameter treatment day Reference Simulated % diff
Cmax (ng/mL) 20 mg Day 1 120 127 +6.1%
Cmax (ng/mL) 20 mg Day 19 105 136 +29.7%*
Cmax (ng/mL) 40 mg Day 1 248 257 +3.6%
Cmax (ng/mL) 40 mg Day 19 259 268 +3.5%
Cmax (ng/mL) 50 mg Day 1 500 315 -36.9%*
Cmax (ng/mL) 50 mg Day 19 469 331 -29.3%*

The 40 mg arm agrees within 5% on both days, as does day 1 at 20 mg. The flagged 20 mg day-19 row reflects a published day-19 value below the day-1 value in a three-patient arm; the linear model predicts slight accumulation instead. The 50 mg arm of Sborov 2017 had geometric-mean Cmax values about double those at 40 mg, which is more than dose proportional. Liva 2021 reports dose-proportional PK across 20-80 mg in the pooled data (Discussion), so the model, which is linear, falls short of that small arm by roughly the dose ratio. The 40 mg arm has the most patients and is used as the gate:

cmax40 <- nca_df |>
  filter(treatment == "40 mg", PPTESTCD == "cmax")
# Centre gate: a mis-transcribed Vc, ka or dose unit shifts the median Cmax by
# tens of percent. Robust to which subjects land in the tails.
stopifnot(abs(median(cmax40$PPORRES) / (0.794 * mw) - 1) < 0.2)

# Variability gate. The Discussion reports that observed dose-normalised AUC
# varied by 24.1%. The simulated between-subject CV of AUC0-24 comes from IIV on
# CL/F (22.8% CV) and ka plus the FFM effect. It sits somewhat lower (about
# 15-17% per arm when this vignette was written) because a 24 h window is less
# sensitive to CL/F than AUC0-infinity and the observed value also carries assay
# noise. The bounds are an envelope, not a match, and were checked to go red:
# with the IIV removed the CV falls to about 8%, and reading the Table 3 CV% as
# a variance (omega^2 = 0.228, 0.477) raises it to about 28%.
auc_d1 <- nca_df |> filter(PPTESTCD == "auclast", day == "Day 1")
cv_auc <- auc_d1 |>
  group_by(treatment) |>
  summarise(cv = sd(PPORRES) / mean(PPORRES) * 100, .groups = "drop")
cv_auc
#> # A tibble: 4 × 2
#>   treatment    cv
#>   <chr>     <dbl>
#> 1 20 mg      16.6
#> 2 40 mg      15.6
#> 3 50 mg      14.9
#> 4 60 mg      15.2
stopifnot(median(cv_auc$cv) > 11, median(cv_auc$cv) < 22)

Covariate effects on the lag time

tibble(
  group = c(
    "Solid tumour, capsule", "Solid tumour, tablet",
    "Haematologic, capsule", "Haematologic, tablet"
  ),
  TUMTP_SOLID = c(1, 1, 0, 0),
  FORM_CAPSULE = c(1, 0, 1, 0)
) |>
  mutate(alag_min = 60 * 0.0453 * (1 + 0.942 * (1 - TUMTP_SOLID)) * (1 + 0.74 * (1 - FORM_CAPSULE))) |>
  select(group, alag_min) |>
  rename("Group" = group, "Typical lag time (min)" = alag_min) |>
  knitr::kable(digits = 1)
Group Typical lag time (min)
Solid tumour, capsule 2.7
Solid tumour, tablet 4.7
Haematologic, capsule 5.3
Haematologic, tablet 9.2

The lag time is 3-9 minutes in every group, which is short against the absorption half-life of about 30 minutes (ln 2 / 1.28 1/h, through two compartments). The tumour-type and formulation effects therefore barely change the simulated profiles.

Assumptions and deviations

  • Coding of the tumour-type and formulation covariates. Liva 2021 evaluates tumour type ‘as dichotomous variables for solid vs. heme tumor’ and defines FORM as ‘formulation (capsule vs. tablet)’, but never says which level is coded 1. It has no reference-subject statement, no control stream, and no supplement table that settles it. The maintainers took the first-named level as the reference (0): solid tumour for tumour type and capsule for formulation. So haematologic malignancy and the tablet carry the fractional increases of 0.942 and 0.74 on ALAG. The model expresses both through the existing canonical indicators, whose value 1 marks the reference level here: ALAG = 0.0453 * (1 + 0.942 * (1 - TUMTP_SOLID)) * (1 + 0.74 * (1 - FORM_CAPSULE)). With the opposite coding, the typical lag would sit with haematologic patients on tablets instead. The practical effect is small because every group’s typical lag is under 10 minutes.
  • Formulation mix. The paper does not report which patients took capsules or tablets; the virtual cohort assigns 50% to each.
  • IIV scale. Table 3 reports IIV as CV%. The variances use omega^2 = log(CV^2 + 1), which is appropriate for the exponential IIV model in Section 2.3. Reading the CV as sqrt(omega^2) instead would change the variances by 4% (CL) and 10% (ka).
  • Residual error. Table 3 labels epsilon ‘proportional’, while Section 2.3 describes an ‘additive error model for log-transformed data’. The two are the same model on the linear scale, encoded here as a log-normal residual with expSd = 0.545 (an SD, per the Table 3 footnote).
  • Lag placement. The Discussion says the lag was added ‘into the transit compartment’, while Fig. 2 draws it on the oral dose entering the depot. For a linear chain the two are equivalent (the input is simply delayed); the model applies alag(depot).
  • FFM centring. Section 2.3 normalises continuous covariates by the population median. The Table 2 median over the 56 patients with anthropometrics (50.8 kg) is used; the modelled population was 55 patients.
  • Non-paper-derived values in this vignette. The external Cmax comparison uses Sborov et al. 2017 (the OSU09102 haematologic cohort) and the REC-2282 molecular weight of 312.4 g/mol (C18H20N2O3). Neither enters the model.
  • No erratum or correction notice for Liva 2021 was found on Crossref or Europe PMC (checked 2026-09-29).