Pomalidomide in renal impairment and hemodialysis (Li 2017)
Source:vignettes/articles/Li_2017_pomalidomide.Rmd
Li_2017_pomalidomide.RmdModel and source
Li 2017 reports three separately fitted population PK models for pomalidomide, differing only in how renal function enters apparent clearance, plus a simulation model that adds the measured dialyzer clearance on top of the categorical fit. Each is packaged as its own model file; all four point at this one article.
| Model | Renal function enters as | Source |
|---|---|---|
Li_2017_pomalidomide_renalcat |
four-level categorical variable | Table 3 |
Li_2017_pomalidomide_crcl |
continuous Cockcroft-Gault CrCl, reverse hockey stick | Table 5, CrCl column |
Li_2017_pomalidomide_egfr |
continuous MDRD eGFR, reverse hockey stick | Table 5, eGFR column |
Li_2017_pomalidomide_hemodialysis |
categorical, plus a gated dialyzer clearance | Table 3 + Equation 6 / Figures 5-6 |
- Citation: Li Y, Wang X, O’Mara E, Dimopoulos MA, Sonneveld P, Weisel KC, Matous J, Siegel DS, Shah JJ, Kueenburg E, Sternas L, Cavanaugh C, Zaki M, Palmisano M, Zhou S. Population pharmacokinetics of pomalidomide in patients with relapsed or refractory multiple myeloma with various degrees of impaired renal function. Clin Pharmacol Adv Appl. 2017;9:133-145. doi:10.2147/CPAA.S144606
- Article: https://doi.org/10.2147/CPAA.S144606 (open access; PMC5685150)
mods <- lapply(
c(
renalcat = "Li_2017_pomalidomide_renalcat",
crcl = "Li_2017_pomalidomide_crcl",
egfr = "Li_2017_pomalidomide_egfr",
hemodialysis = "Li_2017_pomalidomide_hemodialysis"
),
function(nm) rxode2::rxode(readModelDb(nm))
)
#> ℹ parameter labels from comments will be replaced by 'label()'
#> ℹ parameter labels from comments will be replaced by 'label()'
#> ℹ parameter labels from comments will be replaced by 'label()'
#> ℹ parameter labels from comments will be replaced by 'label()'
vapply(mods, function(u) paste(u$state, collapse = " + "), character(1))
#> renalcat crcl egfr hemodialysis
#> "depot + central" "depot + central" "depot + central" "depot + central"All four are one-compartment models with first-order oral absorption. The categorical and hemodialysis models additionally carry the Table 3 absorption lag time; the two continuous models do not, because Table 5 reports no lag time.
Population
Sixty-three patients with relapsed or refractory multiple myeloma (rrMM) were pooled from two Celgene studies – CC-4047-MM-008 (Phase 1, n = 20) and CC-4047-MM-013 (Phase 2, n = 43) – and dosed with 2-4 mg oral pomalidomide once daily together with low-dose dexamethasone. Median age was 69 years (range 46-86) and median body weight 78.2 kg (range 39.9-116.6); median CrCl was 28.3 mL/min (range 8.7-115.4) and median eGFR 27 mL/min/1.73 m^2 (range 5-84) (Li 2017 Table 2). The cohort was deliberately enriched for renal impairment (Table 1): 8 patients with normal renal function, 15 with moderate impairment, 30 with severe impairment not requiring dialysis, and 10 with severe impairment requiring hemodialysis. Sex distribution and race/ethnicity are not reported.
The same information is available programmatically:
str(mods$renalcat$population, max.level = 1)
#> List of 13
#> $ species : chr "human"
#> $ n_subjects : num 63
#> $ n_studies : num 2
#> $ age_range : chr "46-86 years"
#> $ age_median : chr "69 years"
#> $ weight_range : chr "39.9-116.6 kg"
#> $ weight_median : chr "78.2 kg"
#> $ disease_state : chr "relapsed or refractory multiple myeloma (rrMM) with normal, moderately impaired, or severely impaired renal fun"| __truncated__
#> $ dose_range : chr "2-4 mg once daily, oral"
#> $ renal_function: chr "CrCl median 28.3 mL/min (range 8.7-115.4); eGFR median 27 mL/min/1.73 m^2 (range 5-84). Group sizes (Table 1): "| __truncated__
#> $ co_medication : chr "low-dose dexamethasone"
#> $ regions : chr "North America (USA, Canada) and Europe (France, Germany, Greece, Italy, Netherlands, Spain, UK, Austria)"
#> $ notes : chr "Pooled intensive and sparse plasma sampling from studies CC-4047-MM-008 (Phase 1, n = 20) and CC-4047-MM-013 (P"| __truncated__Source trace
Every ini() entry carries an in-file comment pointing at
its source location. Collected here for review:
| Model | Parameter | Value | Source |
|---|---|---|---|
| renalcat / hemodialysis | lka |
0.724 1/h | Table 3, Ka |
| renalcat / hemodialysis | lvc |
58.300 L | Table 3, V/F |
| renalcat / hemodialysis | lcl |
5.130 L/h | Table 3, CL/F normal |
| renalcat / hemodialysis | ltlag |
0.154 h | Table 3, Tlag |
| renalcat / hemodialysis | e_renalimp_mod_cl |
1.020 | Table 3, CL/F ratio group 2 vs 1 |
| renalcat / hemodialysis | e_renalimp_sev_cl |
1.010 | Table 3, CL/F ratio group 3 vs 1 |
| renalcat / hemodialysis | e_rrt_hemodial_status_cl |
0.724 | Table 3, CL/F ratio group 4 vs 1 |
| renalcat / hemodialysis | etalka |
0.782 | Table 3, omega^2 (Ka) |
| renalcat / hemodialysis |
etalvc, etalcl block |
0.139 / 0.163 / 0.198 | Table 3, omega^2 (V/F), omega(V/F):omega(CL/F), omega^2 (CL/F) |
| renalcat / hemodialysis | expSd |
0.5840 | Table 3, delta^2 = 0.341; sqrt(0.341) |
| hemodialysis | lcl_hemodialysis |
12 L/h | Results, median CL_D from 7 patients via Equation 6 |
| crcl | lka |
0.68 1/h | Table 5, CrCl column, Ka |
| crcl | lvc |
60.7 L | Table 5, CrCl column, V/F |
| crcl | lcl_nonren |
3.71 L/h | Table 5, CrCl column, Intercept |
| crcl | e_crcl_cl_renal |
0.0469 L/h per mL/min | Table 5, CrCl column, Slope |
| crcl | crcl_hinge |
37.7 mL/min | Table 5, CrCl column, CrCl0 |
| crcl |
etalka / etalvc /
etalcl_nonren / etae_crcl_cl_renal
|
0.986 / 0.0293 / 0.163 / 0.3 | Table 5, CrCl column, omega^2 rows |
| crcl | expSd |
0.5925 | Table 5, delta^2 = 0.351; sqrt(0.351) |
| egfr | lka |
0.678 1/h | Table 5, eGFR column, Ka |
| egfr | lvc |
60.5 L | Table 5, eGFR column, V/F |
| egfr | lcl_nonren |
3.96 L/h | Table 5, eGFR column, Intercept |
| egfr | e_crcl_cl_renal |
0.0483 L/h per mL/min/1.73 m^2 | Table 5, eGFR column, Slope |
| egfr | crcl_hinge |
26.0 mL/min/1.73 m^2 | Table 5, eGFR column, eGFR0 |
| egfr |
etalka / etalvc /
etalcl_nonren / etae_crcl_cl_renal
|
0.99 / 0.0278 / 0.147 / 0.516 | Table 5, eGFR column, omega^2 rows |
| egfr | expSd |
0.5925 | Table 5, delta^2 = 0.351; sqrt(0.351) |
| all | IIV form P_i = P * exp(eta)
|
n/a | Equation 1 |
| all | Residual ln(Cobs) = ln(Cpred) + eps
|
n/a | Equation 2 |
| renalcat / hemodialysis | Categorical covariate form
P = theta * (1 + theta_cov * Z)
|
n/a | Equation 5 |
| hemodialysis | CL_D = Q * (Ca - Cv) / Ca |
n/a | Equation 6 |
| crcl / egfr | Reverse hockey stick
CL/F = intercept + slope * min(marker, marker0)
|
n/a | Equation 7 |
Two readings that had to be settled
The Table 3 off-diagonal is a covariance, not a
correlation. Table 3’s row
omega(V/F):omega(CL/F) = 0.163 sits between two
omega^2 rows and the table’s Notes define only
omega^2. Three checks agree it is the block covariance: the
Results prose says “the estimated IIV and associated covariance
were reasonably precise”; the NONMEM $OMEGA BLOCK
convention reports the off-diagonal as a covariance; and the bootstrap
90% CI for that row (0.088-0.236) brackets the geometric mean of the two
variance CIs (sqrt(0.069*0.121) = 0.091 and
sqrt(0.236*0.273) = 0.254), which only holds if the
off-diagonal tracks sqrt(var_V * var_CL) across the whole
bootstrap distribution. The implied correlation is therefore 0.982 and
the block is positive definite:
om <- matrix(c(0.139, 0.163, 0.163, 0.198), 2, 2)
c(
correlation = 0.163 / sqrt(0.139 * 0.198),
determinant = det(om),
min_eigenvalue = min(eigen(om)$values)
)
#> correlation determinant min_eigenvalue
#> 0.98253405 0.00095300 0.00285203
stopifnot(det(om) > 0, min(eigen(om)$values) > 0)A near-degenerate V/F-CL/F block is the expected signature of an
oral model: both parameters carry the same unestimated
1/F, so shared bioavailability variability dominates each
of them.
The dialyzer clearance is additive, not a replacement. See the hemodialysis section below, where the two readings are simulated side by side against the paper’s own reported exposure ratios.
Virtual cohort
Original observed data are not publicly available. The cohort below places 150 virtual subjects in each of the paper’s four renal-function groups and doses them 4 mg once daily for 10 days, with observations over the final (steady-state) dosing interval.
# set.seed() seeds R's RNG, NOT rxode2's simulation RNG, and rxode2 partitions
# its streams per solver thread -- so this cohort differs between a 16-thread
# workstation and a 2-core CI runner. Every assertion below is written to hold
# for any cohort the model can produce (or is run on zeroRe() typical values,
# which are fully deterministic).
set.seed(20171108)
N_PER_GROUP <- 150L # <= 200/arm cap
DOSE_MG <- 4
N_DOSES <- 10L
TAU <- 24
groups <- tibble::tribble(
~group, ~label, ~RENALIMP_MOD, ~RENALIMP_SEV, ~RRT_HEMODIAL_STATUS,
"Group 1", "Normal", 0, 0, 0,
"Group 2", "Moderate", 1, 0, 0,
"Group 3", "Severe, no HD", 0, 1, 0,
"Group 4", "Severe, HD", 0, 0, 1
)
make_cohort <- function(g, id_offset) {
subj <- tibble(
id = id_offset + seq_len(N_PER_GROUP),
group = g$group,
label = g$label,
RENALIMP_MOD = g$RENALIMP_MOD,
RENALIMP_SEV = g$RENALIMP_SEV,
RRT_HEMODIAL_STATUS = g$RRT_HEMODIAL_STATUS
)
dose <- subj |>
mutate(time = 0, amt = DOSE_MG, evid = 1L, cmt = "depot", ii = TAU, addl = N_DOSES - 1L)
# Observations over the LAST dosing interval only. cmt is the ODE STATE
# `central`, never the algebraic observable `Cc`.
obs <- subj |>
tidyr::crossing(time = (N_DOSES - 1L) * TAU + seq(0, TAU, by = 0.25)) |>
mutate(amt = NA_real_, evid = 0L, cmt = "central", ii = 0, addl = 0L)
bind_rows(dose, obs) |> arrange(id, time, desc(evid))
}
events <- bind_rows(lapply(seq_len(nrow(groups)), function(i) {
make_cohort(groups[i, ], id_offset = (i - 1L) * N_PER_GROUP)
}))
# Disjoint IDs across cohorts are mandatory: rxSolve treats id as the subject
# key and silently merges duplicates into one subject receiving the summed dose.
stopifnot(
!anyDuplicated(unique(events[, c("id", "time", "evid")])),
length(unique(events$id)) == nrow(groups) * N_PER_GROUP
)Simulation
sim <- rxode2::rxSolve(
mods$renalcat,
events = events,
keep = c("group", "label")
) |>
as.data.frame() |>
mutate(tad = time - (N_DOSES - 1L) * TAU)
# Typical-value (zeroRe) profiles, one per group -- fully deterministic.
typ_events <- events |>
group_by(group) |>
filter(id == min(id)) |>
ungroup()
sim_typ <- rxode2::rxSolve(
rxode2::zeroRe(mods$renalcat),
events = typ_events,
keep = c("group", "label")
) |>
as.data.frame() |>
mutate(tad = time - (N_DOSES - 1L) * TAU)
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl'
#> Warning: multi-subject simulation without without 'omega'
stopifnot(nrow(sim) > 0, !anyNA(sim$Cc), all(sim$Cc >= 0))Replicate published figures
Figure 3 – steady-state profiles by renal-function group
# Replicates Figure 3 of Li 2017: median steady-state plasma concentration
# profiles with a 90% interval, by renal-function group.
sim |>
group_by(tad, label) |>
summarise(
Q05 = quantile(Cc, 0.05),
Q50 = quantile(Cc, 0.50),
Q95 = quantile(Cc, 0.95),
.groups = "drop"
) |>
ggplot(aes(tad, Q50, colour = label, fill = label)) +
geom_ribbon(aes(ymin = Q05, ymax = Q95), alpha = 0.15, colour = NA) +
geom_line(linewidth = 0.8) +
labs(
x = "Time after dose (h)", y = "Pomalidomide (ng/mL)",
colour = NULL, fill = NULL,
title = "Figure 3 - steady-state profiles by renal function group",
caption = "Replicates Figure 3 of Li 2017 (4 mg once daily, day 10)."
) +
theme_bw()
The four groups overlie one another almost exactly except for the hemodialysis group, which sits higher – the paper’s central finding that renal impairment short of dialysis does not alter pomalidomide exposure.
Figure 4 – apparent clearance versus renal function
# Replicates Figure 4 of Li 2017: the reverse-hockey-stick relationship between
# CL/F and CrCl (panel A) or eGFR (panel B). Typical values, so deterministic.
cl_curve <- function(model, marker_grid) {
ev <- rxode2::et(amt = DOSE_MG, cmt = "depot")
ev <- rxode2::et(ev, 0:1)
vapply(marker_grid, function(x) {
d <- as.data.frame(ev)
d$CRCL <- x
unique(rxode2::rxSolve(rxode2::zeroRe(model), d, returnType = "data.frame")$cl)
}, numeric(1))
}
marker_grid <- seq(0, 120, by = 1)
curves <- bind_rows(
tibble(marker = marker_grid, cl = cl_curve(mods$crcl, marker_grid), panel = "A: Cockcroft-Gault CrCl (mL/min)"),
tibble(marker = marker_grid, cl = cl_curve(mods$egfr, marker_grid), panel = "B: MDRD eGFR (mL/min/1.73 m^2)")
)
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
ggplot(curves, aes(marker, cl)) +
geom_line(linewidth = 0.9, colour = "firebrick") +
geom_hline(yintercept = 5.13, linetype = "dotted") +
facet_wrap(~panel, scales = "free_x") +
ylim(0, 10) +
labs(
x = "Renal function marker", y = "Pomalidomide CL/F (L/h)",
title = "Figure 4 - CL/F vs renal function (reverse hockey stick)",
caption = paste(
"Replicates Figure 4 of Li 2017. Dotted line is the 5.13 L/h",
"normal-renal-function CL/F of the categorical model (Table 3)."
)
) +
theme_bw()
# Deterministic structural gates on Equation 7. These are exact arithmetic on
# typical values (no cohort, no RNG), so they are asserted tightly.
knee <- tibble::tribble(
~model, ~hinge, ~intercept, ~slope,
"crcl", 37.7, 3.71, 0.0469,
"egfr", 26.0, 3.96, 0.0483
) |>
rowwise() |>
mutate(
cl_at_zero = cl_curve(mods[[model]], 0),
cl_at_knee = cl_curve(mods[[model]], hinge),
cl_far_above = cl_curve(mods[[model]], 120),
plateau_expected = intercept + slope * hinge
) |>
ungroup()
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl_nonren', 'etae_crcl_cl_renal'
knitr::kable(
knee |>
dplyr::rename(
"Model" = model, "Breakpoint" = hinge, "Intercept (L/h)" = intercept,
"Slope" = slope, "CL/F at marker 0" = cl_at_zero,
"CL/F at breakpoint" = cl_at_knee, "CL/F at marker 120" = cl_far_above,
"Expected plateau" = plateau_expected
),
digits = 4,
caption = "Reverse-hockey-stick structure: the linear arm meets the flat arm continuously at the breakpoint."
)| Model | Breakpoint | Intercept (L/h) | Slope | CL/F at marker 0 | CL/F at breakpoint | CL/F at marker 120 | Expected plateau |
|---|---|---|---|---|---|---|---|
| crcl | 37.7 | 3.71 | 0.0469 | 3.71 | 5.4781 | 5.4781 | 5.4781 |
| egfr | 26.0 | 3.96 | 0.0483 | 3.96 | 5.2158 | 5.2158 | 5.2158 |
stopifnot(
# Intercept is recovered exactly at marker = 0.
all(abs(knee$cl_at_zero - knee$intercept) < 1e-8),
# The two arms meet continuously: plateau = intercept + slope * breakpoint.
all(abs(knee$cl_at_knee - knee$plateau_expected) < 1e-8),
# Flat above the breakpoint.
all(abs(knee$cl_far_above - knee$cl_at_knee) < 1e-8)
)
# Cross-model consistency the paper itself asserts: the intercept (non-renal
# clearance) is "approximately 70%" of the 5.13 L/h total body clearance, and
# the plateau reproduces that total.
pct_nonrenal <- knee$intercept / 5.13 * 100
plateau_vs_total <- knee$plateau_expected / 5.13 * 100
stopifnot(
all(pct_nonrenal > 65), all(pct_nonrenal < 82), # paper: "roughly 70%"
all(abs(plateau_vs_total - 100) < 10) # plateau agrees with Table 3 CL/F
)The independently fitted group-4 clearance of the categorical model and the non-renal intercept of the continuous model agree to within a tenth of a percent – patients on dialysis have essentially no renal function, so their CL/F should equal the non-renal intercept, and it does:
cross <- tibble(
quantity = c(
"Categorical model, group 4 CL/F = 5.13 * 0.724",
"Continuous CrCl model, non-renal intercept",
"Continuous eGFR model, non-renal intercept"
),
value_L_per_h = c(5.13 * 0.724, 3.71, 3.96)
)
knitr::kable(cross, digits = 3, caption = "Two independent fits agree on pomalidomide's non-renal clearance.")| quantity | value_L_per_h |
|---|---|
| Categorical model, group 4 CL/F = 5.13 * 0.724 | 3.714 |
| Continuous CrCl model, non-renal intercept | 3.710 |
| Continuous eGFR model, non-renal intercept | 3.960 |
PKNCA validation
NCA is run over the final steady-state dosing interval, stratified by renal-function group.
sim_nca <- sim |>
dplyr::filter(!is.na(Cc)) |>
dplyr::mutate(time = tad) |>
dplyr::select(id, time, Cc, label)
# Guarantee a time = 0 record per subject so PKNCA can anchor AUC0-tau. For an
# extravascular steady-state interval the trough carried into t = 0 is the
# value already simulated there, so distinct() keeps the simulated row and the
# synthetic Cc = 0 row is only a fallback if the grid ever lacks t = 0.
sim_nca <- bind_rows(
sim_nca,
sim_nca |> distinct(id, label) |> mutate(time = 0, Cc = 0)
) |>
distinct(id, label, time, .keep_all = TRUE) |>
arrange(id, label, time)
conc_obj <- PKNCA::PKNCAconc(sim_nca, Cc ~ time | label + id)
dose_df <- sim_nca |>
distinct(id, label) |>
mutate(time = 0, amt = DOSE_MG)
dose_obj <- PKNCA::PKNCAdose(dose_df, amt ~ time | label + id)
intervals <- data.frame(
start = 0, end = TAU,
cmax = TRUE, tmax = TRUE, auclast = TRUE, cmin = TRUE
)
nca_res <- PKNCA::pk.nca(PKNCA::PKNCAdata(conc_obj, dose_obj, intervals = intervals))
nca_summary <- as.data.frame(nca_res) |>
filter(PPTESTCD %in% c("cmax", "tmax", "auclast", "cmin")) |>
group_by(label, PPTESTCD) |>
summarise(median = median(PPORRES), .groups = "drop") |>
tidyr::pivot_wider(names_from = PPTESTCD, values_from = median)
nca_summary |>
dplyr::rename(
"Renal group" = label,
"AUC0-24 (ng*h/mL)" = auclast,
"Cmax (ng/mL)" = cmax,
"Cmin (ng/mL)" = cmin,
"Tmax (h)" = tmax
) |>
knitr::kable(digits = 1, caption = "Median steady-state NCA by renal-function group (150 virtual subjects per group).")| Renal group | AUC0-24 (ng*h/mL) | Cmax (ng/mL) | Cmin (ng/mL) | Tmax (h) |
|---|---|---|---|---|
| Moderate | 784.7 | 58.3 | 11.9 | 3.2 |
| Normal | 777.1 | 57.2 | 11.4 | 3.5 |
| Severe, HD | 1047.3 | 65.2 | 21.1 | 3.5 |
| Severe, no HD | 823.8 | 57.7 | 12.9 | 3.5 |
Comparison against published NCA
Li 2017 Table 4 reports the mean AUC0-24 at steady state from 200 Monte Carlo trials per renal-function group. The comparison below uses typical-value (zeroRe) profiles, which are deterministic and therefore reproducible across machines; the paper’s Monte Carlo means land within ~2% of them.
typ_nca <- sim_typ |>
filter(!is.na(Cc)) |>
mutate(time = tad) |>
select(id, time, Cc, label)
typ_nca <- bind_rows(
typ_nca,
typ_nca |> distinct(id, label) |> mutate(time = 0, Cc = 0)
) |>
distinct(id, label, time, .keep_all = TRUE) |>
arrange(id, label, time)
typ_conc <- PKNCA::PKNCAconc(typ_nca, Cc ~ time | label + id)
typ_dose <- PKNCA::PKNCAdose(
typ_nca |> distinct(id, label) |> mutate(time = 0, amt = DOSE_MG),
amt ~ time | label + id
)
typ_res <- PKNCA::pk.nca(PKNCA::PKNCAdata(
typ_conc, typ_dose,
intervals = data.frame(start = 0, end = TAU, auclast = TRUE, cmax = TRUE, tmax = TRUE)
))
published <- tibble::tribble(
~label, ~auclast,
"Normal", 787.8,
"Moderate", 773.5,
"Severe, no HD", 789.7,
"Severe, HD", 1070.0
)
cmp <- nlmixr2lib::ncaComparisonTable(
simulated = typ_res,
reference = published,
by = "label",
params = "auclast",
units = c(auclast = "ng*h/mL"),
tolerance_pct = 20
)
knitr::kable(
cmp,
caption = "Simulated typical-value AUC0-24 at steady state vs Li 2017 Table 4. * differs by >20%."
)| NCA parameter | label | Reference | Simulated | % diff |
|---|---|---|---|---|
| AUClast (ng*h/mL) | Normal | 788 | 780 | -1.0% |
| AUClast (ng*h/mL) | Moderate | 774 | 765 | -1.2% |
| AUClast (ng*h/mL) | Severe, no HD | 790 | 772 | -2.2% |
| AUClast (ng*h/mL) | Severe, HD | 1070 | 1080 | +0.7% |
sim_auc <- as.data.frame(typ_res) |>
filter(PPTESTCD == "auclast") |>
select(label, sim = PPORRES) |>
left_join(published, by = "label") |>
mutate(
pct_diff = (sim - auclast) / auclast * 100,
sim_norm = sim / sim[label == "Normal"] * 100,
pub_norm = auclast / auclast[label == "Normal"] * 100
)
knitr::kable(
sim_auc |>
dplyr::rename(
"Renal group" = label, "Simulated AUC0-24" = sim, "Li 2017 Table 4" = auclast,
"% difference" = pct_diff, "Simulated, normalized (%)" = sim_norm,
"Li 2017, normalized (%)" = pub_norm
),
digits = 1,
caption = "Absolute and normalized steady-state exposure vs Li 2017 Table 4."
)| Renal group | Simulated AUC0-24 | Li 2017 Table 4 | % difference | Simulated, normalized (%) | Li 2017, normalized (%) |
|---|---|---|---|---|---|
| Moderate | 764.5 | 773.5 | -1.2 | 98.0 | 98.2 |
| Normal | 779.8 | 787.8 | -1.0 | 100.0 | 100.0 |
| Severe, HD | 1077.1 | 1070.0 | 0.7 | 138.1 | 135.8 |
| Severe, no HD | 772.1 | 789.7 | -2.2 | 99.0 | 100.2 |
# Deterministic (typical-value) gates. Realised |% difference| was
# 1.0 / 1.2 / 2.2 / 0.7 across the four groups; 6 leaves headroom for solver
# and grid differences while still breaking on a mis-transcribed clearance,
# dose or unit, all of which move exposure by tens of percent.
stopifnot(max(abs(sim_auc$pct_diff)) < 6)
# The normalized exposures are the paper's headline claim: groups 1-3 within a
# few percent of each other, group 4 about 35% higher. Realised spread against
# the published normalized values was <= 2.3 percentage points.
stopifnot(
max(abs(sim_auc$sim_norm - sim_auc$pub_norm)) < 5,
# Groups 2 and 3 are indistinguishable from normal (paper: 98.2%, 100.2%).
all(abs(sim_auc$sim_norm[sim_auc$label %in% c("Moderate", "Severe, no HD")] - 100) < 5),
# Group 4 is materially higher (paper: 135.8%; abstract: "approximately 35%").
sim_auc$sim_norm[sim_auc$label == "Severe, HD"] > 125,
sim_auc$sim_norm[sim_auc$label == "Severe, HD"] < 150
)
# Mass balance: at steady state AUC0-tau * CL/F must return the dose exactly,
# independent of Ka, lag time and volume. Cc is in ng/mL and CL/F in L/h, so
# the product is in ng and 1e6 ng = 1 mg.
cl_by_group <- c("Normal" = 5.13, "Moderate" = 5.13 * 1.02, "Severe, no HD" = 5.13 * 1.01, "Severe, HD" = 5.13 * 0.724)
recovered_mg <- sim_auc$sim * cl_by_group[sim_auc$label] * 1000 / 1e6
stopifnot(all(abs(recovered_mg - DOSE_MG) / DOSE_MG < 0.005))Hemodialysis (Figures 5 and 6)
Li 2017 measured the dialyzer clearance directly from paired
arterial-side and venous-side plasma samples (Equation 6) and found a
median CL_D of about 12 L/h in 7 patients – roughly twice
pomalidomide’s 5 L/h total body clearance. It then simulated two
scenarios:
- Scenario 1 – hemodialysis begins after the dose. Reported exposure: approximately 50-70% of a non-dialysis day.
- Scenario 2 – hemodialysis is completed before the dose. Reported exposure: approximately 83-91% of a non-dialysis day.
HD_HOURS <- 4
LAST_DOSE <- (N_DOSES - 1L) * TAU
hd_events <- function(hd_start_rel) {
# hd_start_rel: hours relative to the last dose at which the session begins.
# NA = no dialysis. Negative = session ends at/before the dose (scenario 2).
#
# The observation grid must SPAN the dialysis window, including the
# pre-dose part of it. A time-varying covariate only takes a value on rows
# that exist: with observations starting at the last dose, a session running
# from -4 h to 0 h would touch no rows at all and the dialysis arm would
# silently never switch on (exposure would come back as exactly 100% of a
# non-dialysis day). The grid therefore starts 8 h before the last dose.
dose <- tibble(
id = 1L, time = 0, amt = DOSE_MG, evid = 1L, cmt = "depot",
ii = TAU, addl = N_DOSES - 1L
)
obs <- tibble(
id = 1L,
time = seq(LAST_DOSE - 8, LAST_DOSE + TAU, by = 0.1),
amt = NA_real_, evid = 0L, cmt = "central", ii = 0, addl = 0L
)
d <- bind_rows(dose, obs) |>
arrange(id, time, desc(evid)) |>
mutate(
RENALIMP_MOD = 0, RENALIMP_SEV = 0, RRT_HEMODIAL_STATUS = 1,
RRT_HEMODIAL_ACTIVE = if (is.na(hd_start_rel)) {
0
} else {
as.numeric(time >= LAST_DOSE + hd_start_rel &
time < LAST_DOSE + hd_start_rel + HD_HOURS)
}
)
d
}
hd_auc <- function(hd_start_rel) {
d <- rxode2::rxSolve(
rxode2::zeroRe(mods$hemodialysis),
events = hd_events(hd_start_rel),
# locf, not the default linear interpolation: RRT_HEMODIAL_ACTIVE is a 0/1
# gate and linear interpolation would ramp it across each grid step.
covsInterpolation = "locf",
returnType = "data.frame"
)
d <- d[d$time >= LAST_DOSE & d$time <= LAST_DOSE + TAU, ]
sum(diff(d$time) * (head(d$Cc, -1) + tail(d$Cc, -1)) / 2)
}
ref_auc <- hd_auc(NA)
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl'
scen1 <- tibble(start_h = c(0.5, 1, 2, 3, 4, 6, 8)) |>
mutate(auc = vapply(start_h, hd_auc, numeric(1)), pct = auc / ref_auc * 100)
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl'
scen2_pct <- hd_auc(-HD_HOURS) / ref_auc * 100
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl'
knitr::kable(
scen1 |>
dplyr::rename(
"HD start, h after dose" = start_h,
"AUC0-24 (ng*h/mL)" = auc,
"% of non-dialysis day" = pct
),
digits = 1,
caption = "Scenario 1 (Figure 5): hemodialysis begins after the dose. Li 2017 reports 50-70%."
)| HD start, h after dose | AUC0-24 (ng*h/mL) | % of non-dialysis day |
|---|---|---|
| 0.5 | 633.8 | 58.8 |
| 1.0 | 621.5 | 57.7 |
| 2.0 | 624.4 | 58.0 |
| 3.0 | 646.3 | 60.0 |
| 4.0 | 676.0 | 62.8 |
| 6.0 | 740.6 | 68.8 |
| 8.0 | 801.8 | 74.4 |
Scenario 2 (Figure 6), with the 4 h session completed immediately before the dose, gives 87% of a non-dialysis day, against the paper’s reported 83-91%.
# The paper's abstract says dialysis "increased total body pomalidomide
# clearance from 5 L/h to 12 L/h", which reads like a REPLACEMENT rule, while
# Equation 6 defines CL_D as an extraction clearance across an extracorporeal
# circuit operating in PARALLEL with the body -- an ADDITIVE arm. The two
# readings are distinguishable against the paper's own reported ratios.
cl4 <- 5.13 * 0.724
replacement <- rxode2::rxode2({
ka <- 0.724
vc <- 58.3
cl <- (1 - HDACT) * 3.71448 + HDACT * 12
d / dt(depot) <- -ka * depot
d / dt(central) <- ka * depot - cl / vc * central
alag(depot) <- 0.154
Cc <- 1000 * central / vc
})
rep_auc <- function(hd_start_rel) {
d <- hd_events(hd_start_rel)
d$HDACT <- d$RRT_HEMODIAL_ACTIVE
r <- rxode2::rxSolve(replacement, d, covsInterpolation = "locf", returnType = "data.frame")
r <- r[r$time >= LAST_DOSE & r$time <= LAST_DOSE + TAU, ]
sum(diff(r$time) * (head(r$Cc, -1) + tail(r$Cc, -1)) / 2)
}
rep_ref <- rep_auc(NA)
rep_s1 <- vapply(scen1$start_h, function(h) rep_auc(h) / rep_ref * 100, numeric(1))
reading <- tibble(
Reading = c("Additive (packaged model)", "Replacement"),
`Scenario 1 range (%)` = c(
sprintf("%.0f-%.0f", min(scen1$pct), max(scen1$pct)),
sprintf("%.0f-%.0f", min(rep_s1), max(rep_s1))
),
`Scenario 2 (%)` = c(
sprintf("%.0f", scen2_pct),
sprintf("%.0f", rep_auc(-HD_HOURS) / rep_ref * 100)
),
`Li 2017 reports` = c("50-70 / 83-91", "50-70 / 83-91")
)
knitr::kable(reading, caption = "The additive reading of CL_D reproduces the paper's reported exposure ratios; the replacement reading sits too high.")| Reading | Scenario 1 range (%) | Scenario 2 (%) | Li 2017 reports |
|---|---|---|---|
| Additive (packaged model) | 58-74 | 87 | 50-70 / 83-91 |
| Replacement | 68-80 | 90 | 50-70 / 83-91 |
stopifnot(
# Deterministic typical-value quantities (zeroRe, no cohort and no RNG), so
# these are stable across machines and thread counts. Realised 57.7-74.4%
# for scenario 1 and 86.5% for scenario 2, against the paper's 50-70% and
# 83-91%. The bounds keep headroom around those while still breaking on a
# mis-transcribed CL_D, session length or clearance, each of which moves the
# ratio by tens of percent.
min(scen1$pct) > 45, min(scen1$pct) < 65,
max(scen1$pct) < 80,
scen2_pct > 80, scen2_pct < 95,
# Dialysis must materially reduce exposure -- guards against a silently
# inert gate (the cl_total trap), which would give exactly 100%.
max(scen1$pct) < 90,
# The additive reading sits lower than the replacement reading throughout,
# which is what makes the paper's 50-70% band discriminate them.
all(scen1$pct < rep_s1)
)
# Replicates Figures 5 and 6 of Li 2017.
prof <- function(hd_start_rel, lab) {
d <- rxode2::rxSolve(
rxode2::zeroRe(mods$hemodialysis),
events = hd_events(hd_start_rel), covsInterpolation = "locf",
returnType = "data.frame"
)
d <- d[d$time >= LAST_DOSE & d$time <= LAST_DOSE + TAU, ]
tibble(tad = d$time - LAST_DOSE, Cc = d$Cc, scenario = lab)
}
bind_rows(
prof(NA, "No dialysis"),
prof(1, "Scenario 1: HD starts 1 h after dose"),
prof(4, "Scenario 1: HD starts 4 h after dose"),
prof(-HD_HOURS, "Scenario 2: HD completed before dose")
) |>
ggplot(aes(tad, Cc, colour = scenario)) +
geom_line(linewidth = 0.8) +
labs(
x = "Time after dose (h)", y = "Pomalidomide (ng/mL)", colour = NULL,
title = "Figures 5 and 6 - effect of hemodialysis timing",
caption = "Replicates Figures 5 and 6 of Li 2017 (4 h session, group-4 typical patient)."
) +
theme_bw() +
theme(legend.position = "bottom", legend.direction = "vertical")
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl'
#> ℹ omega/sigma items treated as zero: 'etalka', 'etalvc', 'etalcl'
This is the paper’s clinical conclusion: giving pomalidomide after the dialysis session preserves most of the exposure, whereas dosing before a session loses roughly a third to a half of it.
Assumptions and deviations
-
Four model files, one paper. Li 2017 fitted three
separate NONMEM models (Table 3 categorical, Table 5 CrCl, Table 5 eGFR)
and then simulated a fourth configuration by adding the measured
CL_Dto the categorical fit. Each is packaged separately so that no file mixes estimated with measured parameters;Li_2017_pomalidomide_renalcatis an exact transcription of Table 3 andLi_2017_pomalidomide_hemodialysisis that model plus the gated dialyzer arm. -
Renal-group encoding. The paper’s four-level
categorical covariate is encoded as three mutually exclusive binary
indicators against a normal-renal-function reference. Groups 3 and 4
share the same renal classification (CrCl < 30 mL/min or eGFR < 30
mL/min/1.73 m^2) and differ only in whether the patient requires
dialysis, so group 4 is carried by
RRT_HEMODIAL_STATUS(a dialysis treatment-status flag) rather than a furtherRENALIMP_*severity band. The paper’s “moderate” band (30 < eGFR < 45 mL/min/1.73 m^2) is narrower than the usual FDA/EMA 30-59 definition;RENALIMP_MODcarries the paper’s own band. -
The plateau of Equation 7 is not separately
tabulated. Equation 7 states only that
CL/F = constantabove the breakpoint. No plateau parameter appears in Table 5, so the relationship is implemented as a continuous hinge whose plateau is the value the linear arm reaches at the breakpoint (5.478 L/h for CrCl, 5.216 L/h for eGFR). Both agree with the 5.13 L/h normal-renal-function CL/F of Table 3 to within 7%, which is the arithmetic support for the continuity reading. -
CL_Dis an observed median, not an estimate. The 12 L/h dialyzer clearance comes from Equation 6 applied to 7 patients, with no reported uncertainty or IIV, so it is encoded asfixed()with no eta. It is also mixed with apparent clearances (CL/F) in the paper’s own simulations even though an extracorporeal extraction clearance is not divided by bioavailability; that inconsistency is the paper’s and is reproduced here so the packaged model matches Figures 5 and 6. -
Residual error is log-normal, not proportional.
Equation 2 writes
ln(Cij) = ln(Cmij) + eij, i.e. additive on the natural-log scale, which is nlmixr2’slnorm()and notprop().expSdissqrt(delta^2). - Bootstrap CI labelling in Table 5. The CrCl column of Table 5 is headed “95% bootstrap CI” while the eGFR column and all of Table 3 are headed “90% bootstrap CI”, and the Methods describe a single 90% CI (5th-95th percentile) bootstrap procedure throughout. The CrCl heading appears to be a typographical slip. No model parameter is affected – only the interval annotations in the source-trace comments.
-
MDRD female factor. Li 2017 Equation 4 prints the
female multiplier as
0.724, whereas the published MDRD-175 equation uses0.742; the printed value looks like a digit transposition. This affects only how a user would derive an eGFR covariate value, never a model parameter, and users supplying their own eGFR column are unaffected. The model file records the published MDRD value incovariateData$CRCL$notes. - Sex and race are not reported in Table 2, so the virtual cohorts above carry no sex or race covariates. Neither is needed: the final models retain renal function as their only covariate (“None of the other tested covariates were significant enough to be included in the final model”).
- Cohort dosing. Simulations use 4 mg once daily, the upper end of the paper’s 2-4 mg range and the dose at which Table 4’s absolute AUC values are reproduced. Because the models are linear, exposures at 2 mg are exactly half.
-
Cccarries no residual error. The percentiles plotted above are individual predictions (IIV only). TheexpSdresidual term applies to simulated observations, not toCc.