Perform Pharmacokinetic Non-Compartmental Analysis

Compute standard Non-Compartmental Analysis (NCA) parameters and summarize them. In addition to this core work, it also provides standardized plotting routines, basic assessments for biocomparison or drug interaction, and model-based estimation routines for calculating doses to reach specific values of AUC or Cmax.

CRAN_Status_Badge Travis-CI Build Status Code_Coverage_Badge

The PKNCA R package is designed to perform all noncompartmental analysis (NCA) calculations for pharmacokinetic (PK) data. The package is broadly separated into two parts (calculation and summary) with some additional housekeeping functions.

The primary and secondary goals of the PKNCA package are to 1) only give correct answers to the specific questions being asked and 2) automate as much as possible to simplify the task of the analyst. When automation would leave ambiguity or make a choice that the analyst may have an alternate preference for, it is either not used or is possible to override.

Note that backward compatibility will not be guaranteed until version 1.0. Argument and function changes will continue until then. These will be especially noticable around the inclusion of IV NCA parameters and additional specifications of the dosing including dose amount and route.

Citation information for the PKNCA package is available with a call to citation(package="PKNCA"). The preferred citation until publication of version 1.0 is below:

Denney W, Duvvuri S and Buckeridge C (2015). “Simple, Automatic Noncompartmental Analysis: The PKNCA R Package.” Journal of Pharmacokinetics and Pharmacodynamics, 42(1), pp. 11-107,S65. ISSN 1573-8744, doi: 10.1007/s10928-015-9432-2, <URL:>.



The current stable version of PKNCA is available on CRAN. You can install it and its dependencies using the following command:


From GitHub

To install the development version from GitHub, install the devtools package and then type the following commands:


Calculating parameters

# Load the package
# Set the business rule options with the PKNCA.options() function
# Load your concentration-time data
myrawconcdata <- read.csv("myconc.csv", stringsAsFactors=FALSE)
# Load your dose data
myrawdosedata <- read.csv("mydose.csv", stringsAsFactors=FALSE)
# Put your concentration data into a PKNCAconc object
myconc <- PKNCAconc(data=myrawconcdata,
# Put your dose data into a PKNCAdose object
mydose <- PKNCAdose(data=myrawdosedata,
# Combine the two (and automatically determine the intervals of
# interest
mydata <- PKNCAdata(myconc, mydose)
# Compute the NCA parameters
myresults <- pk.nca(mydata)
# Summarize the results

More help is available in the function help files, and be sure to look at the PKNCA.options function for many choices to make PKNCA conform to your company's business rules for calculations and summarization.

Feature requests

Please use the github issues page ( to make feature requests and bug reports.


Note that backward compatibility of function arguments will not be (near-)guaranteed until version 1.0. Argument and function changes will continue until then. These will be especially noticable around the inclusion of IV NCA parameters and additional specifications of the dosing including dose amount and route.

PKNCA 0.8.4

  • Added AUCint flavors
  • Parameter names for NCA parameters will likely be changing in the next version; code will still work, but some calculation methods and therefore results may be subtly different. These changes will be fully documented.)

PKNCA 0.8.2

  • BACKWARD INCOMPATIBILITY: The function supplied to the exclude argument 'FUN' now requires two arguments and operates on the level of a single group rather than the full object. The function can also return the reason as a character string instead of a logical mask of when to exclude data.

  • BACKWARD INCOMPATIBILITY: Added back-end functionality to only require one function to handle many NCA parameters that are related (e.g. combine pk.calc.aucpext, pk.calc.aucpext.obs, pk.calc.aucpext.pred, etc.). If your current code calls a specific function (like pk.calc.aucpext.pred), you must change to using the generic function (like pk.calc.aucpext)

  • BACKWARD INCOMPATIBILITY: Functions that previously may have returned Infinity due to dividing by zero (e.g. when AUC=0 calculating clearance) now return NA.

  • Added Validation vignette.

  • Corrected issue where time to steady-state with a single estimate may have given more than one estimated time to steady-state.

  • Corrected issue with exclude handling where now a blank string is also accepted as included (not excluded).

  • PKNCAconc now accepts a "volume" argument and pk.nca can now calculate urine/feces-related parameters (fe, ae, clr)

  • exclude_nca* functions added (Fixes issue #20)

  • Add manual half-life point selection (Fixes issue #18)

  • Improved summary settings (Fixes issue #54)

  • Add parameters for Ceoi and intravenous MRT

  • Updated vignettes to improve clarity

  • Added dose-normalized PK parameters (Fixes issue #41)

  • Added checks to confirm that concentration and time are numeric (Fixes feature request #40)

  • Improved test coverage

PKNCA 0.8.1

  • A PKNCAdose is no longer required for calculations.
  • Data may now be excluded from calculations.


This release is not backward compatible. The switch to observed and predicted-related NCA parameters (like aucinf.obs and aucinf.pred) changed the format of the intervals specification.

  • Remove dependency on doBy library
  • Dose-aware interpolation and extrapolation was added with the interp.extrap.conc.dose function.
  • Added Clast.pred related NCA calculations
  • Added N to summary of PKNCAresults
  • Added parameter selection between Clast,observed and Clast,predicted across all parameters
  • Enabled PKNCAdose to be specified with one-sided formula
  • Improved error reporting so that the group and time (interval specification) is reported in addition to the error.
  • PKNCAdose now allows route of administration and IV infusion parameters of rate/duration to be specified

PKNCA 0.7.1

  • Updated vignettes
  • Standardize rounding and significance with missing values in signifString and roundString
  • Enable wide data output with, out.format="wide")
  • Correct calculation of Vz
  • Various CRAN-related cleanups


  • Features added
    • Additional PK parameters to support IV dosing added
    • Fix #11, Intervals can be specified manually, and will apply across appropriate parts of the grouping variables
    • Enable dose and dose.time as parameters to NCA calculations
    • More NCA parameters are calculated, especially related to IV dosing
    • Fix #8, Reporting times for time-based parameters are now within the current interval rather than since first dose (e.g. Tmax on day 14 should be between 0 and 24 not 2724+c(0, 24))
    • Added several vignettes
  • Bugs fixed
    • Dosing without concentration is probably placebo; warn and continue
    • Fix #6, make merge.splitByData work with more than one dosing level
    • Export some generic classes that were not previously exported to simplify their use
    • Superposition extensions when lambda.z cannot be calculated
    • Significance rounding into character strings works when the rounding moves up one order of magnitude.
    • Fix #9, summarization of parameters that are not calculated show not calculated instead of missing.


First release targeting CRAN

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


0.8.4 by Bill Denney, 2 months ago

Report a bug at

Browse source code at

Authors: Bill Denney [aut, cre], Clare Buckeridge [aut], Sridhar Duvvuri [ctb]

Documentation:   PDF Manual  

Task views:

AGPL-3 license

Imports dplyr, digest, plyr, nlme, parallel, lattice, rlang, stats, tidyr, utils

Suggests cowplot, ggplot2, knitr, rmarkdown, testthat

See at CRAN