R/auciv.R

Defines functions pk.calc.auciv_pbext pk.calc.auciv

Documented in pk.calc.auciv pk.calc.auciv_pbext

#' Calculate AUC for intravenous dosing
#'
#' @details The AUC for intravenous (IV) dosing extrapolates the AUC back from
#'   the first measurement to time 0 using c0 and the AUC calculated by another
#'   method (for example the auclast).
#'
#' The calculation method takes the following steps:
#'
#' \itemize{
#'   \item{\code{time = 0} must be present in the data with a measured concentration.}
#'   \item{The AUC between \code{time = 0} and the next time point is calculated (\code{auc_first}).}
#'   \item{The AUC between \code{time = 0} with \code{c0} and the next time point is calculated (\code{auc_second}).}
#'   \item{The final AUC is the initial AUC plus the difference between the two AUCs (\code{auc_final <- auc + auc_second - auc_first}).}
#' }
#' @inheritParams pk.calc.auxc
#' @param c0 The concentration at time 0, typically calculated using
#'   \code{pk.calc.c0()}
#' @param auc The AUC calculated using \code{conc} and \code{time} without
#'   \code{c0} (it may be calculated using any method)
#' @return \code{pk.calc.auciv}: The AUC calculated using \code{c0}
#' @export
pk.calc.auciv <- function(conc, time, c0, auc, ..., check=TRUE) {
  if (check) {
    check.conc.time(conc, time)
  }
  if (!(0 %in% time)) {
    return(structure(NA_real_, exclude="No time 0 in data"))
  }
  data <- data.frame(conc, time)
  auc_first <- pk.calc.auc.last(conc = data$conc[1:2], time = data$time[1:2], ..., check=FALSE)
  auc_second <- pk.calc.auc.last(conc = c(c0, data$conc[2]), time = data$time[1:2], ..., check=FALSE)
  auc_final <- auc + auc_second - auc_first
  auc_final
}

add.interval.col(
  name = "aucivlast",
  FUN = "pk.calc.auciv",
  unit_type = "auc",
  pretty_name = "AUClast (IV dosing)",
  depends = c("auclast", "c0"),
  desc = "The AUClast calculated with back-extrapolation for intravenous dosing using extrapolated C0",
  sparse = FALSE,
  formalsmap = list(auc="auclast")
)

add.interval.col(
  name = "aucivall",
  FUN = "pk.calc.auciv",
  unit_type = "auc",
  pretty_name = "AUCall (IV dosing)",
  depends = c("aucall", "c0"),
  desc = "The AUCall calculated with back-extrapolation for intravenous dosing using extrapolated C0",
  sparse = FALSE,
  formalsmap = list(auc="aucall")
)

add.interval.col(
  name = "aucivint.last",
  FUN = "pk.calc.auciv",
  unit_type = "auc",
  pretty_name = "AUCint,last (IV dosing)",
  depends = c("aucint.last", "c0"),
  desc = "The AUCint,last calculated with back-extrapolation for intravenous dosing using extrapolated C0",
  sparse = FALSE,
  formalsmap = list(auc="aucint.last")
)

add.interval.col(
  name = "aucivint.all",
  FUN = "pk.calc.auciv",
  unit_type = "auc",
  pretty_name = "AUCint,all (IV dosing)",
  depends = c("aucint.all", "c0"),
  desc = "The AUCint,all calculated with back-extrapolation for intravenous dosing using extrapolated C0",
  sparse = FALSE,
  formalsmap = list(auc="aucint.all")
)

add.interval.col(
  name = "aucivinf.obs",
  FUN = "pk.calc.auciv",
  unit_type = "auc",
  pretty_name = "AUCinf,obs (IV dosing)",
  depends = c("aucinf.obs", "c0"),
  desc = "The AUCinf,obs calculated with back-extrapolation for intravenous dosing using extrapolated C0",
  sparse = FALSE,
  formalsmap = list(auc="aucinf.obs")
)

add.interval.col(
  name = "aucivinf.pred",
  FUN = "pk.calc.auciv",
  unit_type = "auc",
  pretty_name = "AUCinf,pred (IV dosing)",
  depends = c("aucinf.pred", "c0"),
  desc = "The  calculated with back-extrapolation for intravenous dosing using extrapolated C0",
  sparse = FALSE,
  formalsmap = list(auc="aucinf.pred")
)

PKNCA.set.summary(
  name=c("aucivlast", "aucivall", "aucivint.last", "aucivint.all", "aucivinf.obs", "aucivinf.pred"),
  description="geometric mean and geometric coefficient of variation",
  point=business.geomean,
  spread=business.geocv
)

#' @describeIn pk.calc.auciv Calculate the percent back-extrapolated AUC for IV administration
#' @details The calculation for back-extrapolation is \code{100*(1 - auc/auciv)}.
#' @param auciv The AUC calculated using \code{c0}
#' @return \code{pk.calc.auciv_pctbackextrap}: The AUC percent back-extrapolated
#' @export
pk.calc.auciv_pbext <- function(auc, auciv) {
  100*(1 - auc/auciv)
}

add.interval.col(
  name = "aucivpbextlast",
  FUN = "pk.calc.auciv_pbext",
  unit_type = "%",
  pretty_name = "AUCbext (based on AUClast)",
  depends = c("auclast", "aucivlast"),
  desc = "The back-extrapolation percent for intravenous dosing based on AUClast",
  sparse = FALSE,
  formalsmap = list(auc="auclast", auciv="aucivlast")
)

add.interval.col(
  name = "aucivpbextall",
  FUN = "pk.calc.auciv_pbext",
  unit_type = "%",
  pretty_name = "AUCbext (based on AUCall)",
  depends = c("aucall", "aucivall"),
  desc = "The back-extrapolation percent for intravenous dosing based on AUCall",
  sparse = FALSE,
  formalsmap = list(auc="aucall", auciv="aucivall")
)

add.interval.col(
  name = "aucivpbextint.last",
  FUN = "pk.calc.auciv_pbext",
  unit_type = "%",
  pretty_name = "AUCbext (based on AUCint,last)",
  depends = c("aucint.last", "aucivint.last"),
  desc = "The back-extrapolation percent for intravenous dosing based on AUCint,last",
  sparse = FALSE,
  formalsmap = list(auc="aucint.last", auciv="aucivint.last")
)

add.interval.col(
  name = "aucivpbextint.all",
  FUN = "pk.calc.auciv_pbext",
  unit_type = "%",
  pretty_name = "AUCbext (based on AUCint,all)",
  depends = c("aucint.all", "aucivint.all"),
  desc = "The back-extrapolation percent for intravenous dosing based on AUCint,all",
  sparse = FALSE,
  formalsmap = list(auc="aucint.all", auciv="aucivint.all")
)

add.interval.col(
  name = "aucivpbextinf.obs",
  FUN = "pk.calc.auciv_pbext",
  unit_type = "%",
  pretty_name = "AUCbext (based on AUCinf,obs)",
  depends = c("aucinf.obs", "aucivinf.obs"),
  desc = "The back-extrapolation percent for intravenous dosing based on AUCinf,obs",
  sparse = FALSE,
  formalsmap = list(auc="aucinf.obs", auciv="aucivinf.obs")
)

add.interval.col(
  name = "aucivpbextinf.pred",
  FUN = "pk.calc.auciv_pbext",
  unit_type = "%",
  pretty_name = "AUCbext (based on AUCinf,pred)",
  depends = c("aucinf.pred", "aucivinf.pred"),
  desc = "The back-extrapolation percent for intravenous dosing based on AUCinf,pred",
  sparse = FALSE,
  formalsmap = list(auc="aucinf.pred", auciv="aucivinf.pred")
)

PKNCA.set.summary(
  name = c("aucivpbextlast", "aucivpbextall", "aucivpbextint.last", "aucivpbextint.all", "aucivpbextinf.obs", "aucivpbextinf.pred"),
  description="arithmetic mean and standard deviation",
  point=business.mean,
  spread=business.sd
)

Try the PKNCA package in your browser

Any scripts or data that you put into this service are public.

PKNCA documentation built on April 30, 2023, 1:08 a.m.