Case study: nimotuzumab target-mediated disposition

library(pkident)

Question. Which parameters of a full target-mediated drug disposition (TMDD) model are determined by the public nimoData observations (nlmixr2data; source: Rodriguez-Vera et al. 2015), and which added measurement would determine the rest?

The model fit and the likelihood profiles take about half an hour, so this vignette shows their code without running it and reads the stored results (inst/extdata), produced by case-studies/nimotuzumab-tmdd.R in the source repository. The structural analysis runs here.

Data and model

nimoData has 12 patients at 50–400 mg, each with ten infusions and 321 free-drug observations in total. DV is the log concentration; its unit is not documented, so the volume is in dose units per concentration unit. The full TMDD model has drug amount A, free target R (at its baseline r0 before the first dose) and complex P:

m <- pkpd_model(
  "d/dt(A) = -cl/v*A - v*(kon*A/v*R - koff*P)
   d/dt(R) = r0*kdeg - kdeg*R - kon*A/v*R + koff*P
   d/dt(P) = kon*A/v*R - koff*P - kint*P
   cp = A/v
   rtot = R + P",
  outputs = c("cp", "rtot", "R", "P"),
  doses = bolus_dose("A", "DOSE"), initial = list(R = "r0"), known = "DOSE"
)

1. Structure is not the obstacle

With free drug observed alone, all seven parameters are locally identifiable:

m_free <- m
m_free$outputs <- m$outputs["cp"]
structural_identifiability(m_free)
#> <pkident structural identifiability>
#> Decision is LOCAL (Lie derivatives at the known initial state up to order 6, checked by output sensitivities; 5 random points).
#> Methods agree at 5 of 5 points.
#>   cl           identifiable
#>   kdeg         identifiable
#>   kint         identifiable
#>   koff         identifiable
#>   kon          identifiable
#>   r0           identifiable
#>   v            identifiable

2. What these data determine

The model was fitted with nlmixr2 (FOCEi; between-subject variability on cl and v; additive error on the log scale):

fit <- nlmixr2est::nlmixr2(tmdd, nimoData, est = "focei")
prof <- classify_profiles(fit, structural = structural_identifiability(m_free),
                          map = c(lcl = "cl", lv = "v", lkon = "kon", lkoff = "koff",
                                  lkdeg = "kdeg", lr0 = "r0", lkint = "kint"))
fit <- extdata("nimotuzumab-fit.csv")
knitr::kable(fit[, c("parameter", "Estimate", "SE", "Back-transformed")], digits = 4)
parameter Estimate SE Back-transformed
lcl -5.4445 0.3051 0.0043
lv 0.3026 0.0483 1.3534
lkon -6.0733 0.3464 0.0023
lkoff -8.3638 0.4090 0.0002
lkdeg -1.2888 0.1941 0.2756
lr0 1.0068 0.1670 2.7369
lkint -12.2548 0.4754 0.0000
add.sd 0.6683 0.0766 0.6683
prof <- extdata("nimotuzumab-profiles.csv")
knitr::kable(prof[, c("parameter", "estimate", "status", "shape", "lower", "upper", "interpretation")],
             digits = 2)
parameter estimate status shape lower upper interpretation
lcl -5.44 identifiable bounded -6.91 -4.88 determined by these data
lv 0.30 identifiable bounded -0.04 0.66 determined by these data
lkon -6.07 non_identifiable flat NA NA structurally identifiable but not determined by these data
lkoff -8.36 identifiable bounded -9.08 -7.26 determined by these data
lkdeg -1.29 non_identifiable flat NA NA structurally identifiable but not determined by these data
lr0 1.01 non_identifiable flat NA NA structurally identifiable but not determined by these data
lkint -12.25 non_identifiable flat NA NA structurally identifiable but not determined by these data

Clearance, volume and koff are bounded. kon, kdeg, r0 and kint are flat over a factor of 7.4 in each direction: structurally identifiable, but not determined by these data. The standard errors from nlmixr2’s covariance step (0.17–0.48 on the log scale for these four) do not describe this.

pts <- extdata("nimotuzumab-profile-points.csv")
op <- par(mfrow = c(2, 4), mar = c(4, 4, 2, 1))
for (p in unique(pts$parameter)) {
  d <- pts[pts$parameter == p, ]
  plot(d$value, d$dofv_from_minimum, type = "b", pch = 19, xlab = p, ylab = "dOFV",
       ylim = c(0, max(8, d$dofv_from_minimum)), main = p)
  abline(h = 3.84, lty = 2)
}
par(op)

3. Which measurement would determine the rest

Expected RSEs at the fitted values for the actual design (each patient’s own infusions and sampling times) and for candidates with an added measurement at the same times, or with an added 10 mg group. Target assays are assumed to have an error of 0.2 on the log scale.

cmp <- compare_designs(
  m,
  candidates = list(current = current, `+ total target` = with_output("rtot"),
                    `+ free target` = with_output("R"), `+ complex` = with_output("P"),
                    `+ 10 mg group` = c(current, low_dose)),
  values = values,
  error = list(cp = residual_error(exp = 0.668), rtot = residual_error(exp = 0.2),
               R = residual_error(exp = 0.2), P = residual_error(exp = 0.2))
)
p <- extdata("nimotuzumab-designs-parameters.csv")
tab <- reshape(p[, c("candidate", "parameter", "rse_percent")], idvar = "parameter",
               timevar = "candidate", direction = "wide")
names(tab) <- sub("rse_percent.", "", names(tab), fixed = TRUE)
knitr::kable(tab, digits = 1, row.names = FALSE, caption = "Expected RSE (%)")
Expected RSE (%)
parameter current + total target + free target + complex + 10 mg group
cl 35.1 7.9 9.5 7.6 29.4
kdeg 2848.5 7.6 16.0 78.0 2584.2
kint 44217.2 1054.5 16912.2 1055.5 31796.2
koff 241.6 22.9 89.0 21.8 173.4
kon 2837.6 9.4 12.7 78.5 2574.1
r0 2829.5 5.7 1.9 76.9 2568.3
v 9.0 5.4 5.9 5.4 7.7
s <- extdata("nimotuzumab-designs-summary.csv")
knitr::kable(s[, c("candidate", "outputs", "observations", "n_identifiable", "n_parameters")])
candidate outputs observations n_identifiable n_parameters
current cp 321 1 7
+ total target cp, rtot 642 6 7
+ free target cp, R 642 5 7
+ complex cp, P 642 3 7
+ 10 mg group cp 403 2 7

Answer. Measuring total target at the same times would determine kon, kdeg and r0 as well (six of seven parameters with RSE ≤ 30%); free target determines five; a lower dose group does not help. No candidate determines kint: at the estimate, internalisation of the complex barely affects any output.

The expected RSEs (fixed effects of a typical patient, local approximation) and the profiles (the actual mixed-effects fit) agree on which parameters are determined; they differ in degree, for example for koff.