Skip to contents

Model and source

  • Citation: Bellanti F, Del Vecchio GC, Putti MC, Maggio A, Filosa A, Cosmi C, Mangiarini L, Spino M, Connelly J, Ceci A, Della Pasqua O; DEEP Consortium. Population pharmacokinetics and dosing recommendations for the use of deferiprone in children younger than 6 years. Br J Clin Pharmacol. 2017 Mar;83(3):593-602.
  • Description: One-compartment first-order absorption, first-order elimination population PK model for oral deferiprone in paediatric patients with transfusion-dependent haemoglobinopathies. Body weight scales apparent clearance and volume by fixed allometric exponents of 0.75 and 1, respectively.
  • Article: https://doi.org/10.1111/bcp.13134

Concentration units in the model file are mg/L; concentrations reported in Bellanti 2017 are in umol/L. Deferiprone has a molecular weight of 139.15 g/mol, so a simulated Cc (mg/L) is converted to umol/L via Cc_umol = Cc * 1000 / 139.15 (about 7.187 x).

Population

The Bellanti 2017 analysis population comprised 18 evaluable paediatric patients (9 male, 9 female) aged 1.2 to 5.9 years (median 3.4 years) with transfusion- dependent haemoglobinopathies (16 with beta-thalassaemia major, 2 with thalasso-drepanocytosis). Baseline body weight ranged from 11 to 22.5 kg (median 15.8 kg; mean 16.08 kg, SD 3.18 kg) and standing height from 83 to 117 cm (median 99.2 cm). Patients were randomised evenly to three single-dose oral deferiprone dose levels (8.3, 16.7, 33.3 mg/kg) as an 80 mg/mL solution in the DEEP-1 study (EudraCT 2012-000658-67, NCT01740713). Baseline demographics are summarised in Bellanti 2017 Table 1.

Bioanalytics used a validated HPLC-UV method with an analytical range of 3.13 to 800 umol/L (0.43 to 111 ug/mL) and a lower limit of quantification of 0.238 umol/L (0.033 ug/mL) (Bellanti 2017 Methods, Bioanalysis).

The same information is available programmatically via the model’s population metadata:

readModelDb("Bellanti_2017_deferiprone")()$population
#> $species
#> [1] "human"
#> 
#> $n_subjects
#> [1] 18
#> 
#> $n_studies
#> [1] 1
#> 
#> $age_range
#> [1] "1.2-5.9 years"
#> 
#> $age_median
#> [1] "3.4 years"
#> 
#> $weight_range
#> [1] "11-22.5 kg"
#> 
#> $weight_median
#> [1] "15.8 kg"
#> 
#> $weight_mean
#> [1] "16.08 kg (SD 3.18 kg)"
#> 
#> $height_median
#> [1] "99.2 cm (range 83-117 cm)"
#> 
#> $sex_female_pct
#> [1] 50
#> 
#> $disease_state
#> [1] "Transfusion-dependent haemoglobinopathies (16 beta-thalassaemia major, 2 thalasso-drepanocytosis) in children younger than 6 years."
#> 
#> $dose_range
#> [1] "Single oral deferiprone dose randomised to one of three levels: 8.3, 16.7 or 33.3 mg/kg (6 subjects per dose group), administered as an 80 mg/mL solution."
#> 
#> $regions
#> [1] "Multicentre paediatric haematology units in Italy (DEEP-1 study, EudraCT 2012-000658-67, NCT01740713); analysis performed at the Leiden Academic Centre for Drug Research, Netherlands."
#> 
#> $notes
#> [1] "Randomised, single-blind, single-dose paediatric PK study (DEEP-1) sponsored by the DEEP Consortium. Sparse sampling with a maximum of five post-dose plasma samples per subject over 8 h following an optimised design. Bioanalytical method: HPLC-UV, LLOQ 0.238 umol/L (0.033 ug/mL). NONMEM v7.2 with informative priors on Ka (8.2/h with uncertainty 4.02) and on the CL/F and V/F IIV block (from the Bellanti 2014 healthy-adult analysis, doi:10.1111/bcp.12473); 54 degrees of freedom for the BSV prior. Bootstrap analysis performed in PsN v3.5.3. See Bellanti 2017 Methods."

Source trace

The per-parameter origin is recorded as an in-file comment next to each ini() entry in inst/modeldb/specificDrugs/Bellanti_2017_deferiprone.R. The table below collects them in one place for review.

Equation / parameter Value Source location
CL/F (typical) 8.3 L/h Bellanti 2017 Table 2 (CL/F Estimate)
V/F (typical) 18.7 L Bellanti 2017 Table 2 (V/F Estimate)
Ka 9.13 1/h Bellanti 2017 Table 2 (Ka Estimate)
Allometric exponent on CL/F 0.75 (FIX) Bellanti 2017 Table 2 (WT on CL/F fix allom.)
Allometric exponent on V/F 1 (FIX) Bellanti 2017 Table 2 (WT on V/F fix allom.)
IIV CL/F (variance) 0.0644 Bellanti 2017 Table 2 (IIV CL/F)
IIV V/F (variance) 0.0392 Bellanti 2017 Table 2 (IIV V/F)
CL-V block covariance 0.031 Bellanti 2017 Table 2 (Block CL-V)
Proportional error (var.) 0.0953 Bellanti 2017 Table 2 (Error (prop))
1-compartment ODE system n/a Bellanti 2017 Results, Population PK modelling and PK modelling (Discussion)
Allometric scaling equation n/a Bellanti 2017 Results, Population PK modelling; reference [25] Anderson & Holford
Reference weight (16 kg) derived Bellanti 2017 Table 3 (median AUC 340.6 umol/L*h at 25 mg/kg t.i.d.); see below

Virtual cohort

Original observed data from the DEEP-1 study are not publicly available. The figures below use a virtual paediatric cohort whose body weights approximate the reported cohort characteristics (mean 16 kg, SD 3.18 kg; Bellanti 2017 Table 1) and whose dose assignments follow the three-arm single-dose design of the DEEP-1 study (Bellanti 2017 Methods).

Cohort size: 100 subjects per dose arm (300 total), well under the 200-per-arm cap.

set.seed(20260701L)
MW_deferiprone <- 139.15  # g/mol, for umol/L conversion

n_per_arm <- 100L
dose_levels <- c("8.3 mg/kg", "16.7 mg/kg", "33.3 mg/kg")
dose_mg_per_kg <- c(8.3, 16.7, 33.3)
names(dose_mg_per_kg) <- dose_levels

# Sampling times chosen to cover the paper's sparse-sampling window (0.167 to 8 h)
# plus a densely-sampled early phase for Cmax capture and later times to describe
# elimination phase.
obs_times <- c(
  0.083, 0.167, 0.25, 0.333, 0.5, 0.67, 0.83, 0.917, 1.083, 1.167, 1.25,
  1.416, 1.75, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 7, 8
)

make_cohort <- function(n, treatment, dose_per_kg, id_offset = 0L) {
  wt <- rnorm(n, mean = 16.08, sd = 3.18)
  wt <- pmax(11, pmin(22.5, wt))  # clip to paper's observed range
  ids <- id_offset + seq_len(n)

  dose_rows <- tibble::tibble(
    id        = ids,
    time      = 0,
    evid      = 1L,
    amt       = dose_per_kg * wt,
    cmt       = "depot",
    WT        = wt,
    treatment = treatment
  )
  obs_rows <- tidyr::expand_grid(
    id   = ids,
    time = obs_times
  ) |>
    dplyr::left_join(
      tibble::tibble(id = ids, WT = wt),
      by = "id"
    ) |>
    dplyr::mutate(
      evid      = 0L,
      amt       = 0,
      cmt       = "central",
      treatment = treatment
    ) |>
    dplyr::select(id, time, evid, amt, cmt, WT, treatment)

  dplyr::bind_rows(dose_rows, obs_rows) |>
    dplyr::arrange(id, time, dplyr::desc(evid))
}

events <- dplyr::bind_rows(
  make_cohort(n_per_arm, dose_levels[1], dose_mg_per_kg[1], id_offset = 0L * n_per_arm),
  make_cohort(n_per_arm, dose_levels[2], dose_mg_per_kg[2], id_offset = 1L * n_per_arm),
  make_cohort(n_per_arm, dose_levels[3], dose_mg_per_kg[3], id_offset = 2L * n_per_arm)
)
stopifnot(!anyDuplicated(unique(events[, c("id", "time", "evid")])))

Simulation

mod <- readModelDb("Bellanti_2017_deferiprone")

sim <- rxode2::rxSolve(
  mod,
  events = events,
  keep   = c("treatment", "WT")
) |>
  as.data.frame() |>
  dplyr::mutate(
    # `sim` includes IIV and residual error (Cc ~ prop(propSd)); Bellanti 2017
    # Table 2 secondary PK parameters (Cmax, AUC0-8, Tmax) were derived from
    # simulations that included residual variability, so we use `sim` here
    # rather than the deterministic `Cc` column.
    Cc_umol = sim * 1000 / MW_deferiprone,
    treatment = factor(treatment, levels = dose_levels)
  )
#> ℹ parameter labels from comments will be replaced by 'label()'

Replicate published figures

# Replicates Figure 2 of Bellanti 2017: visual predictive check by dose group,
# expressed in the paper's native umol/L concentration units.
vpc_summary <- sim |>
  dplyr::filter(!is.na(Cc_umol)) |>
  dplyr::group_by(time, treatment) |>
  dplyr::summarise(
    Q05 = quantile(Cc_umol, 0.05, na.rm = TRUE),
    Q50 = quantile(Cc_umol, 0.50, na.rm = TRUE),
    Q95 = quantile(Cc_umol, 0.95, na.rm = TRUE),
    .groups = "drop"
  )

ggplot(vpc_summary, aes(time, Q50)) +
  geom_ribbon(aes(ymin = Q05, ymax = Q95), alpha = 0.25) +
  geom_line() +
  facet_wrap(~treatment) +
  labs(
    x = "Time after dose (h)",
    y = "Deferiprone concentration (umol/L)",
    title = "Figure 2 - VPC by dose group",
    caption = "Median (line) and 5th-95th percentiles (ribbon) of 100 simulated subjects per dose arm. Replicates Figure 2 of Bellanti 2017."
  )

PKNCA validation

The paper’s Table 2 secondary PK parameters (AUC0-8, Cmax, Tmax) are computed per dose group with PKNCA over the 0-8 h window and compared with the reported values in a single side-by-side table below.

sim_nca <- sim |>
  dplyr::filter(!is.na(Cc_umol)) |>
  dplyr::select(id, time, Cc_umol, treatment)

sim_nca <- dplyr::bind_rows(
  sim_nca,
  sim_nca |>
    dplyr::distinct(id, treatment) |>
    dplyr::mutate(time = 0, Cc_umol = 0)
) |>
  dplyr::distinct(id, treatment, time, .keep_all = TRUE) |>
  dplyr::arrange(id, treatment, time)

conc_obj <- PKNCA::PKNCAconc(sim_nca, Cc_umol ~ time | treatment + id)
#> Warning in assert_conc(conc, any_missing_conc = any_missing_conc): Negative
#> concentrations found

# Doses expressed as umol so AUC/Dose interpretation stays in the paper's units.
dose_df <- events |>
  dplyr::filter(evid == 1L) |>
  dplyr::mutate(amt_umol = amt * 1000 / MW_deferiprone) |>
  dplyr::select(id, time, amt_umol, treatment)

dose_obj <- PKNCA::PKNCAdose(dose_df, amt_umol ~ time | treatment + id)

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  <- suppressWarnings(PKNCA::pk.nca(nca_data))

Comparison against published NCA

Bellanti 2017 Table 2 reports median (5th and 95th percentile) secondary PK parameters per dose group derived from the final PK model. Values below are transcribed from Table 2 (AUC0-8, Cmax, Tmax) and compared with the PKNCA-derived simulated medians.

published <- tibble::tribble(
  ~treatment,     ~cmax,   ~tmax, ~auclast,
  "8.3 mg/kg",    61.7,    0.33,  116.7,
  "16.7 mg/kg",  119.8,    0.33,  210.0,
  "33.3 mg/kg",  229.5,    0.37,  428.8
)

cmp <- nlmixr2lib::ncaComparisonTable(
  simulated     = nca_res,
  reference     = published,
  by            = "treatment",
  units         = c(cmax = "umol/L", auclast = "umol*h/L", tmax = "h"),
  tolerance_pct = 20
)

cmp |>
  dplyr::rename("NCA parameter" = 1) |>
  knitr::kable(
    caption = "Simulated vs. published deferiprone NCA (Bellanti 2017 Table 2). * differs from reference by >20%.",
    align   = c("l", rep("r", ncol(cmp) - 1L))
  )
Simulated vs. published deferiprone NCA (Bellanti 2017 Table 2). * differs from reference by >20%.
NCA parameter treatment Reference Simulated % diff
Cmax (umol/L) 8.3 mg/kg 61.7 55.4 -10.3%
Cmax (umol/L) 16.7 mg/kg 120 115 -3.9%
Cmax (umol/L) 33.3 mg/kg 230 228 -0.7%
Tmax (h) 8.3 mg/kg 0.33 0.5 +51.5%*
Tmax (h) 16.7 mg/kg 0.33 0.333 +0.9%
Tmax (h) 33.3 mg/kg 0.37 0.333 -10.0%
AUClast (umol*h/L) 8.3 mg/kg 117 107 -8.3%
AUClast (umol*h/L) 16.7 mg/kg 210 219 +4.4%
AUClast (umol*h/L) 33.3 mg/kg 429 439 +2.3%

Any starred rows indicate a discrepancy larger than 20% between the simulated median and the value reported in Table 2. Deferiprone has a very rapid absorption phase (Ka approx 9 1/h) so Tmax is sensitive to the density of observation times and to the residual noise realised in each simulated sample; small differences at the 8.3 mg/kg dose (paper 0.33 h vs simulated about 0.5 h) reflect residual-error-driven jitter around a plateau in the Cmax region rather than a structural mismatch. Cmax and AUC0-8 medians agree with Bellanti 2017 Table 2 within about 10% across all three dose groups.

Assumptions and deviations

  • Reference body weight for allometric scaling is not stated explicitly in Bellanti 2017. The paper reports typical CL/F = 8.3 L/h (Table 2) and a simulated median AUC of 340.6 umol/Lh at 25 mg/kg t.i.d. in a paediatric cohort with mean body weight 16 kg (Table 3). With Dose per administration = 25 mg/kg x 16 kg = 400 mg = 2874 umol, the implied CL from AUC over a single dosing interval is 2874 umol / 340.6 umolh/L = 8.44 L/h, matching the reported 8.3 L/h only if the allometric term (WT / WT_ref)^0.75 evaluates to approximately 1 at WT = 16 kg. Consequently the model uses WT_ref = 16 kg (paediatric cohort mean). The standard Anderson & Holford 70 kg reference produces CL = 8.3 x (16/70)^0.75 = 2.71 L/h, incompatible with Table 3. Downstream users applying the model outside the paediatric weight range should note that the typical CL is at 16 kg, not 70 kg.
  • The residual error is reported in Bellanti 2017 Table 2 as a single “Error (prop) 0.0953” row. The Methods section describes the residual as Y_ij = F_ij + epsilon_ij * W with W a “proportional weighing factor for epsilon”, but no separate weighting theta is listed in Table 2 (unlike the Bellanti 2014 healthy-adult analysis, which reported both a sigma of 0.00566 and a separate theta_W of 2.4). This vignette treats 0.0953 as the NONMEM $SIGMA variance for a standard proportional error model Y = F * (1
    • epsilon), giving an effective proportional residual SD of sqrt(0.0953) = 0.3087 (approximately 30.9% CV).
  • Ka in the paper was estimated with an informative Bayesian prior of 8.2/h (with prior “uncertainty” of 4.02) derived from Bellanti 2014. The IIV block on CL/F and V/F was similarly estimated with an informative Normal-Inverse-Wishart prior with 54 degrees of freedom. This model file encodes the posterior point estimates reported in Table 2 (Ka = 9.13/h; IIV CL/F = 0.0644, IIV V/F = 0.0392, block covariance = 0.031). The informative-prior framework is a fitting-time construct and is not re-applied during simulation.
  • No inter-individual variability is estimated for Ka in the final model (Table 2 lists IIV only for CL/F and V/F). Simulations therefore hold Ka fixed at its typical value across subjects.
  • The paper’s covariate screen (weight, height, age, sex) retained only body weight via fixed allometric scaling. Age, height, and sex are recorded in covariatesDataExcluded for documentation but are not model inputs.
  • Virtual cohort body weights are drawn from N(mean = 16.08, SD = 3.18) and clipped to the reported observed range 11 to 22.5 kg (Table 1). The paper does not describe the joint distribution of age, height, and weight; only weight is a model input.
  • The paper’s Table 3 bridging simulations use 100 subjects per arm x 1000 replicates over a 1-week t.i.d. schedule to derive steady-state exposure distributions. This vignette focuses on the single-dose PK model of Table 2 rather than the multi-dose t.i.d. bridging exercise; a steady-state Css comparison would require reproducing the trial-scale simulation from Table 3 and is out of scope for the model-file validation step.