# Non-compartmental analysis: conventions that change the answer 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. ## 1. Which trapezoidal rule | 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. ## 2. How lambda_z was selected 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. - Plain r-squared is monotone in the number of points, so it always selects the longest window. Adjusted r-squared is the only version of this rule that discriminates. - Points at or before Tmax are never eligible. Including Tmax fits the tail of absorption, which biases lambda_z upward and therefore half-life, Vz and AUCinf downward. - Trailing BLQ samples are excluded from the regression, not set to zero — a zero cannot be log-transformed and a half-LLOQ substitution in the tail flattens the slope. 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. ## 3. What happened to BLQ values | 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. ## 4. Observed or predicted Clast ``` 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 definitions | 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. ## Steady state 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. ## Urinary data - `Ae` — cumulative amount excreted unchanged; `fe = Ae(0-inf)/Dose` - `CLr = Ae(0-t)/AUC(0-t)` over the **same** interval; mismatching the intervals is the standard error - `CLnr = CL − CLr` Incomplete collection biases `fe` and `CLr` downward and is not detectable from the data alone. ## Sparse sampling 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. ## Reporting 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.