## ----setup, echo=FALSE, include=FALSE-----------------------------------------
library(PKNCA)

## ----setup_data---------------------------------------------------------------
library(PKNCA)
library(dplyr, quietly=TRUE)

## Load the PK concentration data
d_conc <-
  as.data.frame(datasets::Theoph) %>%
  mutate(Subject=as.numeric(as.character(Subject)))
## Generate the dosing data
d_dose <- d_conc[d_conc$Time == 0,]
d_dose$Time <- 0

## Create a concentration object specifying the concentration, time, and
## subject columns.  (Note that any number of grouping levels is
## supported; you are not restricted to just grouping by subject.)
conc_obj <-
  PKNCAconc(
    d_conc,
    conc~Time|Subject
  )
## Create a dosing object specifying the dose, time, and subject
## columns.  (Note that the grouping factors should be the same as or a
## subset of the grouping factors for concentration, and the grouping
## columns must have the same names between concentration and dose
## objects.)
dose_obj <-
  PKNCAdose(
    d_dose,
    Dose~Time|Subject
  )
## Combine the concentration and dosing information both to
## automatically define the intervals for NCA calculation and provide
## doses for calculations requiring dose.
data_obj <- PKNCAdata(conc_obj, dose_obj)

## Calculate the NCA parameters
results_obj <- pk.nca(data_obj)

## Summarize the results
summary(results_obj)

## -----------------------------------------------------------------------------
PKNCA.options()

## ----eval=FALSE---------------------------------------------------------------
#  PKNCA.options(default=TRUE)

## ----eval=FALSE---------------------------------------------------------------
#  PKNCA.set.summary(
#    name = "cmax",
#    description = "geometric mean and geometric coefficient of variation",
#    point = business.geomean,
#    spread = business.geocv,
#    rounding = list(signif=3)
#  )

## ----eval=FALSE---------------------------------------------------------------
#  PKNCA.set.summary(
#    name = "tmax",
#    description = "median and range",
#    point = business.median,
#    spread = business.range,
#    rounding = list(round=2)
#  )

## ----custom_summary_fun, eval=FALSE-------------------------------------------
#  median_na <- function(x) {
#    median(x, na.rm = TRUE)
#  }
#  quantprob_na <- function(x) {
#    quantile(x, probs = c(0.05, 0.95), na.rm=TRUE)
#  }
#  PKNCA.set.summary(
#    name="auclast",
#    description = "median and 5th to 95th percentile",
#    point=median_na,
#    spread=quantprob_na,
#    rounding=list(signif=3)
#  )

## ----multi_summary_settings, eval=FALSE---------------------------------------
#  median_na <- function(x) {
#    median(x, na.rm=TRUE)
#  }
#  quantprob_na <- function(x) {
#    quantile(x, probs=c(0.05, 0.95), na.rm=TRUE)
#  }
#  PKNCA.set.summary(
#    name=c("auclast", "cmax", "tmax", "half.life", "aucinf.pred"),
#    description = "median and 5th to 95th percentile",
#    point=median_na,
#    spread=quantprob_na,
#    rounding=list(signif=3)
#  )

## ----grouping, eval=FALSE-----------------------------------------------------
#  ## Generate a faux multi-study, multi-analyte dataset.
#  d_conc_parent <- d_conc
#  d_conc_parent$Subject <- as.numeric(as.character(d_conc_parent$Subject))
#  d_conc_parent$Study <- d_conc_parent$Subject <= 6
#  d_conc_parent$Analyte <- "Parent"
#  d_conc_metabolite <- d_conc_parent
#  d_conc_metabolite$conc <- d_conc_metabolite$conc/2
#  d_conc_metabolite$Analyte <- "Metabolite"
#  d_conc_both <- rbind(d_conc_parent, d_conc_metabolite)
#  d_conc_both <- d_conc_both[with(d_conc_both, order(Study, Subject, Time, Analyte)),]
#  d_dose_both <- d_conc_both[d_conc_both$Time == 0 & d_conc_both$Analyte %in% "Parent",
#                             c("Study", "Subject", "Dose", "Time")]
#  
#  ## Create a concentration object specifying the concentration, time,
#  ## study, and subject columns.  (Note that any number of grouping
#  ## levels is supporting; you are not restricted to this list.)
#  conc_obj <- PKNCAconc(d_conc_both,
#                        conc~Time|Study+Subject/Analyte)
#  ## Create a dosing object specifying the dose, time, study, and
#  ## subject columns.  (Note that the grouping factors should be a
#  ## subset of the grouping factors for concentration, and the columns
#  ## must have the same names between concentration and dose objects.)
#  dose_obj <- PKNCAdose(d_dose_both,
#                       Dose~Time|Study+Subject)
#  
#  # Perform and summarize the PK data as previously described
#  data_obj <- PKNCAdata(conc_obj, dose_obj)
#  results_obj <- pk.nca(data_obj)
#  summary(results_obj)

## -----------------------------------------------------------------------------
intervals <-
  data.frame(
    start=0, end=c(24, Inf),
    cmax=c(FALSE, TRUE),
    tmax=c(FALSE, TRUE),
    auclast=TRUE,
    aucinf.obs=c(FALSE, TRUE)
  )

## ----asis=TRUE, echo=FALSE----------------------------------------------------
knitr::kable(PKNCA.options()$single.dose.aucs)

## -----------------------------------------------------------------------------
## find.tau can work when all doses have the same interval...
dose_times <- seq(0, 168, by=24)
print(dose_times)
PKNCA::find.tau(dose_times)

## or when the doses have mixed intervals (10 and 24 hours).
dose_times <- sort(c(seq(0, 168, by=24),
                     seq(10, 178, by=24)))
print(dose_times)
PKNCA::find.tau(dose_times)

## ----eval=FALSE---------------------------------------------------------------
#  intervals_manual <-
#    data.frame(
#      start=0, end=c(24, Inf),
#      cmax=c(FALSE, TRUE),
#      tmax=c(FALSE, TRUE),
#      auclast=TRUE,
#      aucinf.obs=c(FALSE, TRUE)
#    )
#  data_obj <-
#    PKNCAdata(
#      conc_obj, dose_obj,
#      intervals=intervals_manual
#    )

## ----eval=FALSE---------------------------------------------------------------
#  data_obj <- PKNCAdata(conc_obj, dose_obj)
#  intervals_manual <- data_obj$intervals
#  intervals_manual$aucinf.obs[1] <- TRUE
#  data_obj$intervals <- intervals_manual

## ----eval=FALSE---------------------------------------------------------------
#  data_obj <- PKNCAdata(conc_obj, dose_obj, options = list(keep_interval_cols = "dosetype"))

## ----eval=FALSE---------------------------------------------------------------
#  summary(o_nca)