Canakinumab (Chakraborty 2012)
Source:vignettes/articles/Chakraborty_2012_canakinumab.Rmd
Chakraborty_2012_canakinumab.Rmd
library(nlmixr2lib)
library(rxode2)
#> rxode2 5.0.2 using 2 threads (see ?getRxThreads)
#> no cache: create with `rxCreateCache()`
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library(tidyr)
library(ggplot2)
library(PKNCA)
#>
#> Attaching package: 'PKNCA'
#> The following object is masked from 'package:stats':
#>
#> filterCanakinumab population PK / IL-1b binding model
Canakinumab is a fully human anti-interleukin-1b (IL-1b) IgG1/k monoclonal antibody developed by Novartis (commercial name: Ilaris). Its primary regulatory indication is cryopyrin-associated periodic syndromes (CAPS), a group of inherited NALP3-inflammasome-driven autoinflammatory disorders. Chakraborty et al. (2012) integrated data from six clinical studies (n = 233 subjects) into a single population pharmacokinetic-binding model with quasi-steady-state (QSS) drug-target binding, structurally adapted from the Hayashi 2007 omalizumab framework. Two physical compartments (central and peripheral) each carry three species: free drug, free IL-1b, and the canakinumab-IL-1b complex. Drug, ligand, and complex share volumes; complex clearance is set equal to free-drug clearance.
- Citation: Chakraborty A, Tannenbaum S, Rordorf C, Lowe PJ, Floch D, Gram H, Roy S. Pharmacokinetic and pharmacodynamic properties of canakinumab, a human anti-interleukin-1b monoclonal antibody. Clin Pharmacokinet. 2012;51(6):e1-e18. doi:10.2165/11599820-000000000-00000.
- Article: https://doi.org/10.2165/11599820-000000000-00000 (open access)
Population
The pooled model-building dataset contains 233 subjects across six clinical studies (Chakraborty 2012 Table I and Table III):
| Study | Population | Approx. n contribution | Dosing |
|---|---|---|---|
| CACZ885B2101 | Healthy + mild asthma | 37 | 1, 3, 10 mg/kg IV; multiple-dose |
| CACZ885A1101 | Japanese healthy | 30 | 1, 3 mg/kg IV; 600 mg IV; 150, 300 mg SC; combo |
| CACZ885A2101 | Rheumatoid arthritis | 37 | 0.3, 1, 3, 10 mg/kg IV; multiple-dose |
| CAZC885A2202 | Plaque psoriasis | 10 | 150 mg SC single |
| CACZ885A2102 | CAPS (phase II) | 34 | 10 mg/kg IV; 150 mg / 2 mg/kg SC |
| CACZ885D2304 | CAPS (phase III) | 85 | 150 mg SC q8w (registration regimen) |
Median typical CAPS patient: 70 kg, 43 g/L serum albumin, 34 years.
Sex distribution across the analysis cohort was 135 male / 98 female
(42% female; Chakraborty 2012 Section 5.3 page e15). Age range 4-74
years, including paediatric CAPS subjects. The same metadata is
available via
readModelDb("Chakraborty_2012_canakinumab")$population.
This vignette focuses on the typical adult CAPS patient because CAPS is the regulatory indication driving the registration dosing regimen (150 mg SC q8w). Per-population point estimates for Caucasian healthy volunteers, Japanese healthy volunteers, RA, mild asthma, and psoriasis cohorts are reported in Chakraborty 2012 Table IV; they are tabulated in the “Per-population estimates” section below.
Source trace
Per-parameter origin is recorded as inline comments next to each
ini() entry in
inst/modeldb/specificDrugs/Chakraborty_2012_canakinumab.R.
The table below collects them in one place for review.
| Equation / parameter | Value (paper) | Value (file) | Source |
|---|---|---|---|
lcl (CLD, CAPS, 70 kg) |
0.174 L/d | log(0.174) | Table IV |
lvc (VC at 70 kg) |
3.30 L | log(3.30) | Table IV |
lvp (VP at 70 kg) |
2.71 L | log(2.71) | Table IV |
lpsd (PSD) |
0.429 L/d | log(0.429) | Table IV |
lka (Sp2/0, 34 y) |
0.269 1/d | log(0.269) | Table IV |
lcll (CLL, CAPS) |
14.2 L/d | log(14.2) | Table IV |
lrli (RLI, CAPS) |
9.57 ng/d | log(9.57) | Table IV |
lkd (KD, CAPS) |
1.07 nmol/L | log(1.07) | Table IV |
lpsl (PSL) |
0.386 L/d | log(0.386) | Table IV |
lfdepot (F1, Sp2/0) |
70.0% (logit-back-calc) | logit(0.70) = 0.847 | Table IV (footnote a) |
e_wt_cl |
0.695 | 0.695 | Table IV (Covariates) |
e_alb_cl |
-0.916 | -0.916 | Table IV; equation 11 |
e_wt_vc |
0.684 | 0.684 | Table IV; equation 10 |
e_wt_vp |
0.798 | 0.798 | Table IV; equation 10 |
e_age_ka |
-0.555 | -0.555 | Table IV |
etalcl |
omega^2 = 0.0859 (CV ~29%) | 0.0859 | Table IV (CLD IIV) |
etalvc |
omega^2 = 0.0589 (CV ~24%) | 0.0589 | Table IV (VC IIV) |
etalvp |
omega^2 = 0.0817 (CV ~29%) | 0.0817 | Table IV (VP IIV) |
etalpsd |
omega^2 = 0.280 (CV ~53%) | 0.280 | Table IV (PSD IIV) |
etalka |
omega^2 = 0.406 (CV ~64%) | 0.406 | Table IV (ka IIV; on NS0 row) |
etalcll |
omega^2 = 0.371 (CV ~61%) | 0.371 | Table IV (CLL IIV) |
etalrli |
omega^2 = 0.261 (CV ~51%) | 0.261 | Table IV (RLI IIV) |
etalkd |
omega^2 = 0.395 (CV ~63%) | 0.395 | Table IV (KD IIV) |
etalpsl |
omega^2 = 0.254 (CV ~50%) | 0.254 | Table IV (PSL IIV) |
propSd (canakinumab) |
sigma^2 = 0.0527 (CV ~23%) | sqrt(0.0527) = 0.230 | Table IV; eq 8 (Y = log(IPRED) + e) |
propSd_totalIL1b |
sigma^2 = 0.0840 (CV ~29%) | sqrt(0.0840) = 0.290 | Table IV; eq 8 |
| Eq. 1 dA/dt = -ka * A | n/a | n/a | Methods page e7 |
| Eq. 2 dTDC/dt drug central | n/a | n/a | Methods page e7-e8 |
| Eq. 3 dTDP/dt drug periph. | n/a | n/a | Methods page e8 |
| Eq. 4 dTLC/dt ligand cent. | n/a | n/a | Methods page e8 |
| Eq. 5 dTLP/dt ligand per. | n/a | n/a | Methods page e8 |
| Eq. 7 QSS quadratic for XC | n/a | n/a | Methods page e8 |
| MW canakinumab ~150 kDa | 150 kDa | 149.117 kDa | Section 4.2.2 page e10 |
| MW IL-1b 17000 ng/nmol | 17 kDa | 17.000 kDa | Eq. 5 footnote |
| Centred power covariate eq. | y = y70 * (WT/70)^exp | y * (WT/70)^exp | Equation 10 page e15 |
| Albumin scaling | CLD = CLD * (alb/43)^-0.92 | encoded in cl
|
Equation 11 page e15 |
The IIV CV percentages reported by Chakraborty 2012 are well approximated by sqrt(omega^2) (e.g. variance 0.0859 -> 29% CV, variance 0.406 -> 64% CV), so the ini() variance entries can be read directly from Table IV without a log-normal CV-to-variance conversion. The residual error is reported as “additive on log-scale” (eq. 8: Y = log(IPRED) + e); for small sigma this is indistinguishable from a proportional model with propSd = sigma, the encoding used here.
Per-population point estimates from Table IV
The published model treated study population (CAPS, Caucasian HV,
Japanese HV, RA, asthma, psoriasis) as a categorical covariate on CLD,
CLL, RLI, and KD (Section 4.2.2 page e9). The model in this package uses
CAPS as the typical population (regulatory indication and
dosing-driver). For completeness, the per-population point estimates are
tabulated below; they are not encoded as covariates in
inst/modeldb/specificDrugs/Chakraborty_2012_canakinumab.R.
| Population | CLD (L/d) | CLL (L/d) | RLI (ng/d) | KD (nmol/L) |
|---|---|---|---|---|
| CAPS (typical) | 0.174 | 14.2 | 9.57 | 1.07 |
| Caucasian HV | 0.137 | 13.5 | 4.50 | 1.01 |
| Japanese HV | 0.169 | 31.0 | 4.72 | 0.354 |
| Rheumatoid arth. | 0.195 | 22.9 | 8.06 | 0.227 |
| Mild asthma | 0.168 | 24.9 | 6.18 | 0.543 |
| Psoriasis | 0.185 | 19.0 | 7.19 | 0.360 |
Source: Chakraborty 2012 Table IV. To simulate any population other
than CAPS, override the corresponding lcl,
lcll, lrli, lkd values in the
returned rxode2 model.
Virtual cohort
Original observed data are not publicly available. The cohort below reproduces the registered CAPS regimen of 150 mg SC every 8 weeks plus the single-dose IV reference arm at 10 mg/kg used for the Table III NCA comparison. Body weight, age, and serum albumin are sampled to approximate the typical adult CAPS patient.
set.seed(20250509)
n_per_arm <- 50L
obs_times <- c(0.0833, 0.5, 1, 2, 3, 5, 7, 10, 14, 21, 28, 42, 56, 70, 84)
build_sc_arm <- function(n, dose_mg, regimen, id_offset) {
ev <- rxode2::et(amt = dose_mg, cmt = "depot", id = id_offset + seq_len(n)) |>
rxode2::et(obs_times, cmt = "Cc")
ev <- as.data.frame(ev)
ev$regimen <- regimen
ev$WT <- exp(rnorm(n, log(70), 0.15))[match(ev$id, unique(ev$id))]
ev$AGE <- runif(n, 18, 65) [match(ev$id, unique(ev$id))]
ev$ALB <- pmax(30, rnorm(n, 43, 4)) [match(ev$id, unique(ev$id))]
ev
}
build_iv_arm <- function(n, dose_mg, regimen, id_offset) {
# central is in nmol; convert mg dose to nmol via 1000/MWX (149.117 kDa).
amt_nmol <- dose_mg / 149.117 * 1000
ev <- rxode2::et(amt = amt_nmol, cmt = "central", dur = 2 / 24,
id = id_offset + seq_len(n)) |>
rxode2::et(obs_times, cmt = "Cc")
ev <- as.data.frame(ev)
ev$regimen <- regimen
ev$WT <- exp(rnorm(n, log(70), 0.15))[match(ev$id, unique(ev$id))]
ev$AGE <- runif(n, 18, 65) [match(ev$id, unique(ev$id))]
ev$ALB <- pmax(30, rnorm(n, 43, 4)) [match(ev$id, unique(ev$id))]
ev
}
events <- dplyr::bind_rows(
build_sc_arm(n_per_arm, dose_mg = 150, regimen = "150 mg SC SD",
id_offset = 0L),
build_iv_arm(n_per_arm, dose_mg = 700, regimen = "10 mg/kg IV SD",
id_offset = 200L)
)
stopifnot(!anyDuplicated(unique(events[, c("id", "time", "evid")])))Simulation
mod <- readModelDb("Chakraborty_2012_canakinumab")
sim <- rxode2::rxSolve(mod, events = events, keep = c("regimen", "WT", "AGE", "ALB"))
#> ℹ parameter labels from comments will be replaced by 'label()'
sim_df <- as.data.frame(sim)Replicate Figure 1 - 150 mg SC single-dose canakinumab profile (CAPS)
sim_typical <- rxode2::rxSolve(rxode2::zeroRe(mod),
events = dplyr::filter(events, regimen == "150 mg SC SD",
id == 1L))
#> ℹ parameter labels from comments will be replaced by 'label()'
#> ℹ omega/sigma items treated as zero: 'etalcl', 'etalvc', 'etalvp', 'etalpsd', 'etalka', 'etalcll', 'etalrli', 'etalkd', 'etalpsl'
ggplot(as.data.frame(sim_typical), aes(time, Cc)) +
geom_line(linewidth = 0.7) +
labs(x = "Time (days)",
y = "Canakinumab (ug/mL)",
title = "Typical CAPS patient: 150 mg SC single dose",
caption = "Replicates the 150 mg SC profile of Chakraborty 2012 Figure 1.") +
theme_minimal()
Replicates the canakinumab profile of Figure 1 of Chakraborty 2012 (typical CAPS adult, 150 mg SC single dose).
ggplot(as.data.frame(sim_typical), aes(time, totalIL1b)) +
geom_line(linewidth = 0.7, colour = "darkred") +
labs(x = "Time (days)",
y = "Total IL-1b (pg/mL)",
title = "Typical CAPS patient: total IL-1b after 150 mg SC dose",
caption = "Total IL-1b accumulates because complex CL = free-drug CL << free-IL-1b CL.") +
theme_minimal()
Total IL-1b time course in the same simulation; reflects accumulation of canakinumab-bound complex following SC dosing (Chakraborty 2012 Figure 1, lower panel).
PKNCA validation
sim_nca <- sim_df |>
dplyr::filter(!is.na(Cc), Cc > 0) |>
dplyr::select(id, time, Cc, regimen)
dose_df <- events |>
dplyr::filter(evid == 1) |>
dplyr::select(id, time, amt, regimen) |>
dplyr::mutate(
amt = ifelse(regimen == "10 mg/kg IV SD", 700, amt),
route = ifelse(regimen == "10 mg/kg IV SD", "intravascular", "extravascular")
)
conc_obj <- PKNCA::PKNCAconc(sim_nca, Cc ~ time | regimen + id)
dose_obj <- PKNCA::PKNCAdose(dose_df, amt ~ time | regimen + id,
route = "route")
intervals <- data.frame(
start = 0,
end = 84,
cmax = TRUE,
tmax = TRUE,
auclast = TRUE,
aucinf.obs = TRUE,
half.life = TRUE
)
nca_data <- PKNCA::PKNCAdata(conc_obj, dose_obj, intervals = intervals)
nca_res <- suppressMessages(PKNCA::pk.nca(nca_data))
#> Warning: Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
#> Requesting an AUC range starting (0) before the first measurement (0.0833) is not allowed
nca_summary <- summary(nca_res)
knitr::kable(nca_summary,
caption = "Simulated NCA parameters by dosing regimen (PKNCA, n = 50 per arm).")| start | end | regimen | N | auclast | cmax | tmax | half.life | aucinf.obs |
|---|---|---|---|---|---|---|---|---|
| 0 | 84 | 10 mg/kg IV SD | 50 | NC | 205 [28.3] | 0.0833 [0.0833, 0.0833] | 28.7 [8.02] | NC |
| 0 | 84 | 150 mg SC SD | 50 | NC | 14.6 [22.8] | 6.00 [2.00, 21.0] | 28.2 [8.27] | NC |
Comparison against Chakraborty 2012 Table III
| Regimen | Parameter | Paper (mean +/- SD) | Simulation (median, this vignette) |
|---|---|---|---|
| 150 mg SC SD | Cmax (ug/mL) | 15.9 +/- 3.52 (adult CAPS) | see PKNCA table above |
| 150 mg SC SD | Tmax (d) | 6.98 (1.92-14.0) | see PKNCA table above |
| 150 mg SC SD | t1/2 (d) | 26.1 +/- 7.31 | see PKNCA table above |
| 150 mg SC SD | CL/F (L/d) | 0.228 +/- 0.0597 | implicit in dose / AUCinf |
| 10 mg/kg IV SD | Cmax (ug/mL) | 149 +/- 45.4 (n=4 adult CAPS) | see PKNCA table above |
| 10 mg/kg IV SD | t1/2 (d) | 31.2 +/- 3.39 | see PKNCA table above |
Differences within ~20% of the paper’s mean values are expected
because the simulation uses CAPS-typical covariate values whereas Table
III aggregates over patients of varying weight. Larger discrepancies
(e.g. > 30% on Cmax, half-life shorter than 20 days, AUC differing by
an order of magnitude) should trigger a re-audit of the source-trace
table - do not tune the parameters in inst/modeldb/.
Steady-state and accumulation
The paper notes (page e11) that the registration regimen of 150 mg SC q8w reaches steady state at approximately 130 days (~5 half-lives) with about 1.3-fold accumulation in a typical 70 kg CAPS adult. The chunk below verifies the typical-value model behaviour against this benchmark.
ev_q8w <- rxode2::et(amt = 150, cmt = "depot", ii = 56, until = 280) |>
rxode2::et(seq(0, 280, by = 7), cmt = "Cc")
ev_q8w$WT <- 70
ev_q8w$AGE <- 34
ev_q8w$ALB <- 43
sim_ss <- as.data.frame(rxode2::rxSolve(rxode2::zeroRe(mod), ev_q8w))
#> ℹ parameter labels from comments will be replaced by 'label()'
#> ℹ omega/sigma items treated as zero: 'etalcl', 'etalvc', 'etalvp', 'etalpsd', 'etalka', 'etalcll', 'etalrli', 'etalkd', 'etalpsl'
cmax_first <- max(sim_ss$Cc[sim_ss$time <= 56])
cmax_ss <- max(sim_ss$Cc[sim_ss$time >= 224 & sim_ss$time <= 280])
cat(sprintf("Cmax cycle 1: %.2f ug/mL\n", cmax_first))
#> Cmax cycle 1: 15.19 ug/mL
cat(sprintf("Cmax cycle 5: %.2f ug/mL (accumulation factor %.2f vs paper expected ~1.3)\n",
cmax_ss, cmax_ss / cmax_first))
#> Cmax cycle 5: 19.10 ug/mL (accumulation factor 1.26 vs paper expected ~1.3)
ggplot(sim_ss, aes(time, Cc)) +
geom_line(linewidth = 0.7) +
labs(x = "Time (days)", y = "Canakinumab (ug/mL)",
title = "150 mg SC q8w typical CAPS profile",
caption = "Accumulation factor reported in paper: ~1.3 (page e11).") +
theme_minimal()
Typical-value canakinumab profile under the registered 150 mg SC q8w regimen reaching steady state by ~5 half-lives (~130 days) per Chakraborty 2012 page e11.
Assumptions and deviations
Population covariate not encoded. Chakraborty 2012 Table IV reports per-population CLD, CLL, RLI, and KD point estimates for CAPS, Caucasian HV, Japanese HV, RA, mild asthma, and psoriasis cohorts. This package encodes the typical CAPS values; per-population values are tabulated above for downstream users who wish to override. Encoding population type as a covariate column would have required new canonical entries (DIS_RA, DIS_CAPS, DIS_ASTHMA) in
inst/references/covariate-columns.mdand was deferred. CAPS is the regulatory indication and the population whose dosing regimen drove the model’s clinical use.Cell-line covariate not encoded. The paper estimates separate ka and F1 for the NS0 (early development) and Sp2/0 (commercial) cell lines; this file uses the Sp2/0 values (ka = 0.269 1/d, F1 = 0.70) matching the commercial Ilaris product. The NS0 alternatives are ka = 0.299 1/d and F1 = 0.633 (Chakraborty 2012 Table IV) for users reproducing pre-2010 study data.
Bioavailability F1 encoded as a fixed parameter on the logit scale. The paper coded F1 via a logit transformation to constrain it to (0, 1) during estimation (page e9); no IIV was reported on F1, and the back-calculated point estimate (70.0% +/- 8.25%) was reported on the natural scale via simulation (Table IV footnote a). The model file uses
lfdepot <- log(0.70 / 0.30)andf(depot) <- 1 / (1 + exp(-lfdepot))to preserve this structural choice while allowing an end user to perturb F1 explicitly if needed.Initial conditions for endogenous IL-1b set analytically. The paper describes the dosing as starting from steady state without specifying the t = 0 amounts of IL-1b in the central and peripheral compartments. This package sets
central_il1b(0) = RLI * VC / (MWE * 1000 * CLL)andperipheral1_il1b(0) = (VP/VC) * central_il1b(0) * (1 + CLL/PSL), which is the analytical solution of the no-drug steady state (eq. 4 with TDC = TDP = XC = XP = 0).Residual error encoded as proportional. Chakraborty 2012 used Y = log(IPRED) + e (eq. 8) with sigma^2 reported on the log scale. For small sigma this is well approximated by
Y ~ prop(propSd)with propSd = sigma; the largest sigma reported is 0.290 (IL-1b) which is within the regime where the prop approximation is faithful to ~1%.Inter-parameter IIV correlations. Not reported in the paper. All IIVs are encoded as independent / diagonal here.
MW(canakinumab) = 149.117 kDa is taken from the standard human IgG1/k mass for canakinumab; the paper rounds to “~150 kDa” in Section 4.2.2.
Cohort covariate distributions. WT was sampled lognormally around 70 kg (CV 15%); AGE uniform 18-65; ALB normal 43 g/L SD 4 g/L. None of these distributions were reported in the paper; they bracket the paper’s typical-CAPS reference values.