PKNCA: Noncompartmental Analysis in R

A comprehensive guide to the PKNCA R package (≥ 0.13.0) — covering every function, parameter, and workflow with runnable examples.
Author

Teun M. Post

Published

October 26, 2026

This book was built against PKNCA 0.12.1.9002. Examples are verified against that version. For the function reference, see the pkgdown site.

PKNCA is an R package for automated noncompartmental analysis (NCA). It calculates PK parameters (AUC, Cmax, half-life, clearance, volume, and many more) from concentration-time data, supports IV and extravascular routes, urine excretion, sparse sampling, multiple-dose designs, and CDISC-aligned output. This book documents PKNCA ≥ 0.13.0 with runnable examples throughout. For the package authors’ own orientation material, see the vignettes Introduction to PKNCA and Usage Instructions and PKNCA – an R package for noncompartmental analysis of pharmacokinetic data.

0.1 What is NCA?

Noncompartmental analysis (NCA) derives pharmacokinetic parameters directly from observed data using numerical integration — no compartmental model assumptions required. NCA is used to answer:

  • How much drug was absorbed? → AUC
  • How fast was drug eliminated? → half-life, λz
  • How high did concentrations get? → Cmax
  • How quickly was drug cleared? → CL
  • How widely did drug distribute? → Vz

0.2 Core workflow

flowchart LR
    A["Concentration<br/>data frame"] --> B[PKNCAconc]
    C["Dose<br/>data frame"] --> D[PKNCAdose]
    B --> E[PKNCAdata]
    D --> E
    F["Intervals<br/>specification"] -.->|optional override| E
    E --> G[pk.nca]
    G --> H[PKNCAresults]
    H --> I[summary]
    H --> J[as.data.frame]

Object Purpose
PKNCAconc Concentration data location and grouping
PKNCAdose Dose amount, time, and route
PKNCAdata Parameters and analysis intervals
PKNCAresults Computed NCA parameters, units, exclusion flags

The vignette Computing NCA Parameters for Theophylline runs this exact pipeline end-to-end.

0.3 Route-specific parameters

Parameter IV Extravascular
C0 (extrapolated at t=0) ✓ —
Cmax ✓ ✓
Tmax ✓ ✓
AUClast / AUCinf ✓ ✓
Half-life / λz ✓ ✓
CL (true clearance) ✓ — (apparent: CL/F)
Vz (volume) ✓ — (apparent: Vz/F)
Bioavailability (F) — (serves as reference) ✓

For bioavailability, IV data serve as the reference against which extravascular exposure is compared.

0.4 What’s new in 0.13.0

PKNCA 0.13.0 is a large release; the package NEWS lists every change. Changes that alter default results are marked breaking.

  • Automatic intervals rebuilt (breaking) — when no intervals are given, PKNCAdata() builds them from the dosing regimen: a single dose gets one interval from the dose to infinity with start_predose_conc0 imputation, and repeated dosing gets an interval between each pair of sampled consecutive doses, chosen segment by segment when the regimen changes. auto.interval.method = "legacy" restores the previous behavior. See Automatic Intervals and Dosing Regimens.
  • Dosing-regimen detection — find.dose.regimen() and a reworked find.tau(), nominal times, and time units for tau.
  • Secondary parameters in one run — bioavailability, accumulation and metabolite ratios, and renal clearance computed across intervals and groups with interval_id/*_ref columns and interval_add_secondary(). See Secondary Parameters.
  • Bioavailability renamed (breaking) — f is now f.obs, alongside f.pred, f.last, and the f.int.* family.
  • Bioequivalence — the be_* functions assess average, scaled, and narrow-therapeutic-index bioequivalence and descriptive comparisons. See Bioequivalence.
  • Sparse NCA unified (breaking names) — sparse results use the standard parameter names (auclast, aucinf.obs, aucivinf.obs, …) with _se and _df companions; the AUC to infinity includes the uncertainty of λz by the delta method; IV bolus, batch designs, and sparse_bootstrap() are supported. See Sparse PK Sampling.
  • Dose-aware partial AUCs (breaking) — every aucint/aumcint parameter is dose-aware; the .dose variants are retired.
  • Data quality checks — pknca_missing_samples() and the exclude_nca_tmax_coverage() exclusion rule. See Data Quality Checks.
  • Date-time data and CDISC output — POSIXct/Date times, SDTM time references (PPSTINT, PPENINT, PPTPTREF, PPRFTDTC), PPGRPID, and as.data.frame(results, out_format = "cdisc"). See Date-Time Data and Time References and Regulatory & CDISC.
  • Half-life — Tobit regression through the full pk.nca() pipeline (PKNCAconc(lloq = )), point-selection controls, lambda.z.corrxy, and get_halflife_fit()/get_halflife_curve() for plotting the fit.
  • Interval tools — pknca_interval_table(), pknca_presets(), pknca_parameter_table(), and the interval_add_param() family.
  • Expanded parameters — the cl.*, kel.*, mrt.*, vss.*, and vz.* families, aumciv*, aumcint*, tmin, and excretion parameters (volpk, ermax, ertmax, ertlst, clr.*.dn).
  • Post-processing and units — normalize()/normalize_by_col(), and pknca_units_table() built automatically by PKNCAdata().