skills/pkpd-modeling/references/nca-conventions.md
NCA is arithmetic on a concentration-time curve. What makes two analyses of the same data disagree is never the arithmetic — it is the four conventions below, which are frequently left unstated.
| Rule | Segment AUC | When |
|---|---|---|
| Linear | (C1+C2)/2 * dt | Rising phase; sparse data; regulatory default for some agencies on ascending segments |
| Linear-up / log-down | linear while rising, log while falling | The usual default for a drug with log-linear decline |
| Log-linear | (C1-C2)/k, k = ln(C1/C2)/dt | Whole curve; fails on any rising or flat segment |
Linear trapezoid overestimates AUC on a convex declining curve, because the chord lies above the exponential. The error grows with the sampling interval, so a sparse late-phase schedule biases AUC upward under the linear rule and the two rules can differ by several percent.
Under log-down, the AUMC segment is
AUMC = (t1*C1 - t2*C2)/k + (C1 - C2)/k^2 with k = ln(C1/C2)/(t2 - t1)
which is not what you get by applying the AUC substitution naively.
The dominant convention: fit ln C on time over the last three quantifiable points, extend the
window backwards one point at a time, and keep the longer window only when adjusted r-squared
improves by more than 0.0001.
Reportability criteria, all conventions rather than regulation, and all worth pre-specifying:
| Diagnostic | Usual threshold | What it means when it fails |
|---|---|---|
| Points in the window | ≥ 3 | The slope is an interpolation between two points |
| Adjusted r-squared | ≥ 0.80 (sometimes 0.85) | The terminal phase is not log-linear, or is noise |
| Span ratio: window duration / t½ | ≥ 2 | The true terminal phase may not have been reached |
| % AUC extrapolated | ≤ 20% | AUCinf is driven by the fit, not by data |
A profile can pass all four and still be wrong if sampling stopped during a distribution phase: the "terminal" slope is then the beta phase of a drug whose gamma phase was never observed, and Vz and t½ are both underestimated. Only the sampling duration relative to the true terminal half-life fixes this, and NCA cannot detect it.
| Rule | Effect |
|---|---|
| Set to zero | Standard for leading BLQ before the first quantifiable sample |
| LLOQ/2 | Common for embedded BLQ; biases AUC upward slightly and t½ downward |
| Treated as missing | Standard for trailing BLQ; avoids fabricating a tail |
The usual regulatory-acceptable combination is: leading BLQ = 0, embedded BLQ = 0 or LLOQ/2 with the choice stated, trailing BLQ excluded. Whatever you choose, apply it identically to every profile and to every treatment arm — a rule applied to the test formulation and not the reference biases the ratio directly.
AUCinf_obs = AUClast + Clast_observed / lambda_z
AUCinf_pred = AUClast + Clast_predicted / lambda_z (Clast_predicted from the lambda_z fit)
They differ whenever the last observation sits off the fitted line, which is exactly when the last
observation is noisy. _pred is more stable; _obs is more common. Report which.
| Parameter | Definition | Notes |
|---|---|---|
| Cmax, Tmax | Highest observed concentration and its time | Observed values, never interpolated. Tmax is summarised as median and range, not mean and SD |
| AUClast | AUC to the last quantifiable concentration | The only exposure metric that involves no extrapolation |
| AUCinf | AUClast + Clast/lambda_z | |
| AUMCinf | AUMClast + tlast·Clast/λz + Clast/λz² | |
| MRT | AUMCinf/AUCinf | Subtract Tinf/2 for a zero-order infusion |
| CL or CL/F | Dose/AUCinf | Apparent (/F) for any extravascular route |
| Vz or Vz/F | Dose/(λz · AUCinf) | Terminal-phase volume; depends on λz and inherits its error |
| Vss | CL · MRT | Intravenous only. Vss from extravascular data is not defined, because MRT then includes mean absorption time |
| AUC(0-tau) | AUC over one dosing interval at steady state | The reportable exposure metric at steady state |
| Cavg | AUC(0-tau)/tau | |
| PTF% | 100·(Cmax − Cmin)/Cavg | Peak-trough fluctuation |
| Swing | (Cmax − Cmin)/Cmin | More sensitive than PTF to a low trough |
| Rac | AUC(0-tau),ss / AUC(0-tau),first dose | Observed accumulation; compare with 1/(1 − e^(−λz·tau)) |
Vz versus Vss. Vz is a terminal-phase parameter and is systematically larger than Vss for a multi-compartment drug. They are not alternative estimates of the same thing, and a covariate model built on one does not transfer to the other.
Do not compute AUCinf from a truncated steady-state profile. The nca.py extrapolation finding
fires on exactly this, because the tail beyond tau is not observed and the extrapolated area is a
fiction. Report AUC(0-tau).
Attainment of steady state should be demonstrated, not assumed — by trough concentrations across at least three consecutive intervals showing no trend, not by counting half-lives, because the half life you would count with is the one you are trying to estimate.
Ae — cumulative amount excreted unchanged; fe = Ae(0-inf)/DoseCLr = Ae(0-t)/AUC(0-t) over the same interval; mismatching the intervals is the standard errorCLnr = CL − CLrIncomplete collection biases fe and CLr downward and is not detectable from the data alone.
With one or two samples per subject, per-subject NCA is not possible. The Bailer method and its Nedelman-Jia extension estimate a mean AUC and its standard error across a batch design. Do not average per-subject AUCs computed from single points; do not run the destructive-sampling data through an individual NCA and summarise the result.
State, for every NCA: the trapezoidal rule; the BLQ rule at each position; the lambda_z selection rule with the window and number of points per subject; whether AUCinf is observed- or predicted-based; and the exclusion criteria applied, decided before unblinding. Summarise exposure metrics as geometric mean with geometric CV%, and Tmax as median with range.