PKNCA: Noncompartmental Analysis in R

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

Teun M. Post

Published

August 8, 2026

This book was built against PKNCA 0.12.1.9000. 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.12.2 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.12.2

  • normalize_by_col() / normalize() — normalize results by a column in the concentration data (normalize_by_col()) or a custom normalization table (normalize())
  • tmin parameter — time of minimum observed concentration
  • Tobit regression for half-life, including full pk.nca() pipeline support via PKNCAconc(lloq = )
  • CDISC output formatas.data.frame(results, out_format = "cdisc") translates parameter codes and adds PPTEST
  • Expanded derived parameters — the cl.*, kel.*, mrt.*, vss.*, and vz.* families grew substantially
  • Sparse AUMC and five new sparse-derived parameters (cl.sparse.last, kel.sparse.last, mrt.ivint.last, vss.sparse.last, vz.sparse.last)
  • New excretion parameters: volpk, ermax, ertmax, ertlst, dose-normalized renal clearance (clr.*.dn)
  • lambda.z.corrxy — correlation between x and y in the λz regression
  • pknca_units_table() is now an S3 generic with a PKNCAdata method
  • get_halflife_points() works directly on PKNCAdata objects; handles start ≠ 0 correctly