Examples simplify understanding. Below is an example of how to use the theophylline dataset to generate NCA parameters.
## It is always a good idea to look at the data
knitr::kable(head(datasets::Theoph))
Subject | Wt | Dose | Time | conc |
---|---|---|---|---|
1 | 79.6 | 4.02 | 0.00 | 0.74 |
1 | 79.6 | 4.02 | 0.25 | 2.84 |
1 | 79.6 | 4.02 | 0.57 | 6.57 |
1 | 79.6 | 4.02 | 1.12 | 10.50 |
1 | 79.6 | 4.02 | 2.02 | 9.66 |
1 | 79.6 | 4.02 | 3.82 | 8.58 |
The columns that we will be interested in for our analysis are conc, Time, and Subject in the concentration data set and Dose, Time, and Subject for the dosing data set.
## By default it is groupedData; convert it to a data frame for use
my.conc <- PKNCAconc(as.data.frame(datasets::Theoph), conc~Time|Subject)
## Dosing data needs to only have one row per dose, so subset for
## that first.
d.dose <- unique(datasets::Theoph[datasets::Theoph$Time == 0,
c("Dose", "Time", "Subject")])
knitr::kable(d.dose,
caption="Example dosing data extracted from theophylline data set")
Dose | Time | Subject | |
---|---|---|---|
1 | 4.02 | 0 | 1 |
12 | 4.40 | 0 | 2 |
23 | 4.53 | 0 | 3 |
34 | 4.40 | 0 | 4 |
45 | 5.86 | 0 | 5 |
56 | 4.00 | 0 | 6 |
67 | 4.95 | 0 | 7 |
78 | 4.53 | 0 | 8 |
89 | 3.10 | 0 | 9 |
100 | 5.50 | 0 | 10 |
111 | 4.92 | 0 | 11 |
122 | 5.30 | 0 | 12 |
my.dose <- PKNCAdose(d.dose, Dose~Time|Subject)
## Assuming route of administration is extravascular
## Assuming instant dosing (duration=0)
After loading the data, they must be combined to prepare for parameter calculation. Intervals for calculation will automatically be selected based on the single.dose.aucs setting
in PKNCA.options
my.data.automatic <- PKNCAdata(my.conc, my.dose)
knitr::kable(PKNCA.options("single.dose.aucs"))
start | end | auclast | aucall | aumclast | aumcall | cmax | cmin | tmax | tlast | tfirst | clast.obs | cl.last | cl.all | f | mrt.last | cav | ctrough | ptr | tlag | deg.fluc | swing | half.life | r.squared | adj.r.squared | lambda.z | lambda.z.time.first | lambda.z.n.points | clast.pred | span.ratio | aucinf.obs | aucinf.pred | aumcinf.obs | aumcinf.pred | aucpext.obs | aucpext.pred | cl.obs | cl.pred | mrt.obs | mrt.pred | vz.obs | vz.pred | vss.obs | vss.pred | vd.obs | vd.pred | thalf.eff.obs | thalf.eff.pred | kel.obs | kel.pred |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 24 | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
0 | Inf | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
knitr::kable(my.data.automatic$intervals)
start | end | auclast | aucall | aumclast | aumcall | cmax | cmin | tmax | tlast | tfirst | clast.obs | cl.last | cl.all | f | mrt.last | cav | ctrough | ptr | tlag | deg.fluc | swing | half.life | r.squared | adj.r.squared | lambda.z | lambda.z.time.first | lambda.z.n.points | clast.pred | span.ratio | aucinf.obs | aucinf.pred | aumcinf.obs | aumcinf.pred | aucpext.obs | aucpext.pred | cl.obs | cl.pred | mrt.obs | mrt.pred | vz.obs | vz.pred | vss.obs | vss.pred | vd.obs | vd.pred | thalf.eff.obs | thalf.eff.pred | kel.obs | kel.pred | Subject |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 24 | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 1 |
0 | Inf | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 1 |
0 | 24 | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 2 |
0 | Inf | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 2 |
0 | 24 | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 3 |
0 | Inf | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 3 |
0 | 24 | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 4 |
0 | Inf | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 4 |
0 | 24 | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 5 |
0 | Inf | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 5 |
0 | 24 | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 6 |
0 | Inf | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 6 |
0 | 24 | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 7 |
0 | Inf | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 7 |
0 | 24 | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 8 |
0 | Inf | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 8 |
0 | 24 | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 9 |
0 | Inf | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 9 |
0 | 24 | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 10 |
0 | Inf | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 10 |
0 | 24 | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 11 |
0 | Inf | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 11 |
0 | 24 | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 12 |
0 | Inf | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | 12 |
Intervals for calculation can also be specified manually. Manual specification requires at least columns for start
time, end
time, and the parameters requested. The manual specification can also include any grouping factors from the concentration data set. Column order of the intervals is not important. When intervals are manually specified, they are expanded to the full interval set when added to a PKNCAdata object (in other words, a column is created for each parameter. Also, PKNCA automatically calculates parameters required for the NCA, so while lambda.z is required for calculating AUC0-\(\infinity\), you do not have to specify it in the parameters requested.
my.intervals <- data.frame(start=0,
end=Inf,
cmax=TRUE,
tmax=TRUE,
aucinf.obs=TRUE,
auclast=TRUE)
my.data.manual <- PKNCAdata(my.conc, my.dose,
intervals=my.intervals)
knitr::kable(my.data.manual$intervals)
start | end | auclast | aucall | aumclast | aumcall | cmax | cmin | tmax | tlast | tfirst | clast.obs | cl.last | cl.all | f | mrt.last | cav | ctrough | ptr | tlag | deg.fluc | swing | half.life | r.squared | adj.r.squared | lambda.z | lambda.z.time.first | lambda.z.n.points | clast.pred | span.ratio | aucinf.obs | aucinf.pred | aumcinf.obs | aumcinf.pred | aucpext.obs | aucpext.pred | cl.obs | cl.pred | mrt.obs | mrt.pred | vz.obs | vz.pred | vss.obs | vss.pred | vd.obs | vd.pred | thalf.eff.obs | thalf.eff.pred | kel.obs | kel.pred |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Inf | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
Parameter calculation will automatically split the data by the grouping factor(s), subset by the interval, calculate all required parameters, record all options used for the calculations, and include data provenance to show that the calculation was performed as described. For all this, just call the pk.nca
function with your PKNCAdata object.
my.results.automatic <- pk.nca(my.data.automatic)
knitr::kable(head(my.results.automatic$result))
start | end | Subject | PPTESTCD | PPORRES | exclude |
---|---|---|---|---|---|
0 | 24 | 1 | auclast | 92.365442 | NA |
0 | Inf | 1 | cmax | 10.500000 | NA |
0 | Inf | 1 | tmax | 1.120000 | NA |
0 | Inf | 1 | tlast | 24.370000 | NA |
0 | Inf | 1 | clast.obs | 3.280000 | NA |
0 | Inf | 1 | lambda.z | 0.048457 | NA |
summary(my.results.automatic)
start | end | N | auclast | cmax | tmax | half.life | aucinf.obs |
---|---|---|---|---|---|---|---|
0 | 24 | 12 | 74.6 [24.3] | . | . | . | . |
0 | Inf | 12 | . | 8.65 [17.0] | 1.14 [0.630, 3.55] | 8.18 [2.12] | 115 [28.4] |
my.results.manual <- pk.nca(my.data.manual)
knitr::kable(head(my.results.manual$result))
start | end | Subject | PPTESTCD | PPORRES | exclude |
---|---|---|---|---|---|
0 | Inf | 1 | auclast | 147.234748 | NA |
0 | Inf | 1 | cmax | 10.500000 | NA |
0 | Inf | 1 | tmax | 1.120000 | NA |
0 | Inf | 1 | tlast | 24.370000 | NA |
0 | Inf | 1 | clast.obs | 3.280000 | NA |
0 | Inf | 1 | lambda.z | 0.048457 | NA |
summary(my.results.manual)
start | end | N | auclast | cmax | tmax | aucinf.obs |
---|---|---|---|---|---|---|
0 | Inf | 12 | 98.7 [22.5] | 8.65 [17.0] | 1.14 [0.630, 3.55] | 115 [28.4] |
Assessing multiple dose pharmacokinetics is conceptually the same as single-dose in PKNCA.
To assess multiple dose PK, the theophylline data will be extended from single to multiple doses using superposition (see the Superposition vignette for more information).
d.conc <- PKNCAconc(as.data.frame(Theoph), conc~Time|Subject)
my.conc.multi <-
PKNCAconc(
superposition(d.conc,
tau=168,
dose.times=seq(0, 144, by=24),
n.tau=1,
check.blq=FALSE),
conc~time|Subject)
my.conc.multi
## Formula for concentration:
## conc ~ time | Subject
## With 12 subjects defined in the 'Subject' column.
## Nominal time column is not specified.
##
## First 6 rows of concentration data:
## Subject conc time exclude
## 1 0.74000 0.00 <NA>
## 1 2.84000 0.25 <NA>
## 1 4.23875 0.37 <NA>
## 1 6.57000 0.57 <NA>
## 1 10.50000 1.12 <NA>
## 1 9.66000 2.02 <NA>
my.dose.multi <- PKNCAdose(expand.grid(Subject=unique(my.conc.multi$data$Subject),
time=seq(0, 144, by=24)),
~time|Subject)
## Assuming route of administration is extravascular
## Assuming instant dosing (duration=0)
my.dose.multi
## Formula for dosing:
## ~time | Subject
## Nominal time column is not specified.
##
## First 6 rows of dosing data:
## Subject time exclude route duration
## 1 0 <NA> extravascular 0
## 2 0 <NA> extravascular 0
## 3 0 <NA> extravascular 0
## 4 0 <NA> extravascular 0
## 5 0 <NA> extravascular 0
## 6 0 <NA> extravascular 0
The superposition-simulated scenario is not especially realistic as it includes dense sampling on every day. With this scenario, the intervals automatically selected have an interval for every subject on every day.
my.data <- PKNCAdata(my.conc.multi, my.dose.multi)
my.data$intervals[,c("Subject", "start", "end")]
## Subject start end
## 1 1 0 24
## 2 1 24 48
## 3 1 48 72
## 4 1 72 96
## 5 1 96 120
## 6 1 120 144
## 7 1 144 168
## 8 2 0 24
## 9 2 24 48
## 10 2 48 72
## 11 2 72 96
## 12 2 96 120
## 13 2 120 144
## 14 2 144 168
## 15 3 0 24
## 16 3 24 48
## 17 3 48 72
## 18 3 72 96
## 19 3 96 120
## 20 3 120 144
## 21 3 144 168
## 22 4 0 24
## 23 4 24 48
## 24 4 48 72
## 25 4 72 96
## 26 4 96 120
## 27 4 120 144
## 28 4 144 168
## 29 5 0 24
## 30 5 24 48
## 31 5 48 72
## 32 5 72 96
## 33 5 96 120
## 34 5 120 144
## 35 5 144 168
## 36 6 0 24
## 37 6 24 48
## 38 6 48 72
## 39 6 72 96
## 40 6 96 120
## 41 6 120 144
## 42 6 144 168
## 43 7 0 24
## 44 7 24 48
## 45 7 48 72
## 46 7 72 96
## 47 7 96 120
## 48 7 120 144
## 49 7 144 168
## 50 8 0 24
## 51 8 24 48
## 52 8 48 72
## 53 8 72 96
## 54 8 96 120
## 55 8 120 144
## 56 8 144 168
## 57 9 0 24
## 58 9 24 48
## 59 9 48 72
## 60 9 72 96
## 61 9 96 120
## 62 9 120 144
## 63 9 144 168
## 64 10 0 24
## 65 10 24 48
## 66 10 48 72
## 67 10 72 96
## 68 10 96 120
## 69 10 120 144
## 70 10 144 168
## 71 11 0 24
## 72 11 24 48
## 73 11 48 72
## 74 11 72 96
## 75 11 96 120
## 76 11 120 144
## 77 11 144 168
## 78 12 0 24
## 79 12 24 48
## 80 12 48 72
## 81 12 72 96
## 82 12 96 120
## 83 12 120 144
## 84 12 144 168
In a more realistic scenario, dense PK sampling occurs for every subject on the first and last days. To select those intervals manually, specify the intervals of interest in the intervals
argument to the PKNCAdata function call. The intervals are automatically expanded not to calculate anything that was not requested.
my.intervals <- data.frame(start=c(0, 144),
end=c(24, 168),
cmax=TRUE,
auclast=TRUE)
my.data <- PKNCAdata(my.conc.multi, my.dose.multi,
intervals=my.intervals)
my.data$intervals
## start end auclast aucall aumclast aumcall cmax cmin tmax tlast tfirst
## 1 0 24 TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
## 2 144 168 TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
## clast.obs cl.last cl.all f mrt.last cav ctrough ptr tlag
## 1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 2 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## deg.fluc swing half.life r.squared adj.r.squared lambda.z
## 1 FALSE FALSE FALSE FALSE FALSE FALSE
## 2 FALSE FALSE FALSE FALSE FALSE FALSE
## lambda.z.time.first lambda.z.n.points clast.pred span.ratio aucinf.obs
## 1 FALSE FALSE FALSE FALSE FALSE
## 2 FALSE FALSE FALSE FALSE FALSE
## aucinf.pred aumcinf.obs aumcinf.pred aucpext.obs aucpext.pred cl.obs
## 1 FALSE FALSE FALSE FALSE FALSE FALSE
## 2 FALSE FALSE FALSE FALSE FALSE FALSE
## cl.pred mrt.obs mrt.pred vz.obs vz.pred vss.obs vss.pred vd.obs vd.pred
## 1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 2 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## thalf.eff.obs thalf.eff.pred kel.obs kel.pred
## 1 FALSE FALSE FALSE FALSE
## 2 FALSE FALSE FALSE FALSE
After the data is ready, the calculations and summary can progress.
my.results <- pk.nca(my.data)
print(my.results)
## $result
## start end Subject PPTESTCD PPORRES exclude
## 1 0 24 1 auclast 151.189916 <NA>
## 2 0 24 1 cmax 10.500000 <NA>
## 3 144 168 1 auclast 214.860975 <NA>
## 4 144 168 1 cmax 15.096727 <NA>
## 5 0 24 2 auclast 88.457261 <NA>
## 6 0 24 2 cmax 8.330000 <NA>
## 7 144 168 2 auclast 97.381127 <NA>
## 8 144 168 2 cmax 9.221742 <NA>
## 9 0 24 3 auclast 95.698098 <NA>
## 10 0 24 3 cmax 8.200000 <NA>
## 11 144 168 3 auclast 106.131322 <NA>
## 12 144 168 3 cmax 9.252474 <NA>
## 13 0 24 4 auclast 101.860775 <NA>
## 14 0 24 4 cmax 8.600000 <NA>
## 15 144 168 4 auclast 114.219220 <NA>
## 16 144 168 4 cmax 9.815170 <NA>
## 17 0 24 5 auclast 117.621805 <NA>
## 18 0 24 5 cmax 11.400000 <NA>
## 19 144 168 5 auclast 136.309916 <NA>
## 20 144 168 5 cmax 13.096191 <NA>
## 21 0 24 6 auclast 71.834110 <NA>
## 22 0 24 6 cmax 6.440000 <NA>
## 23 144 168 6 auclast 82.177601 <NA>
## 24 144 168 6 cmax 7.374375 <NA>
## 25 0 24 7 auclast 89.021716 <NA>
## 26 0 24 7 cmax 7.090000 <NA>
## 27 144 168 7 auclast 100.992404 <NA>
## 28 144 168 7 cmax 8.069847 <NA>
## 29 0 24 8 auclast 86.655906 <NA>
## 30 0 24 8 cmax 7.560000 <NA>
## 31 144 168 8 auclast 102.163105 <NA>
## 32 144 168 8 cmax 8.807391 <NA>
## 33 0 24 9 auclast 83.447367 <NA>
## 34 0 24 9 cmax 9.030000 <NA>
## 35 144 168 9 auclast 97.525881 <NA>
## 36 144 168 9 cmax 10.308349 <NA>
## 37 0 24 10 auclast 136.329998 <NA>
## 38 0 24 10 cmax 10.210000 <NA>
## 39 144 168 10 auclast 167.865640 <NA>
## 40 144 168 10 cmax 12.382817 <NA>
## 41 0 24 11 auclast 77.824409 <NA>
## 42 0 24 11 cmax 8.000000 <NA>
## 43 144 168 11 auclast 86.903095 <NA>
## 44 144 168 11 cmax 8.878024 <NA>
## 45 0 24 12 auclast 115.043218 <NA>
## 46 0 24 12 cmax 9.750000 <NA>
## 47 144 168 12 auclast 125.838198 <NA>
## 48 144 168 12 cmax 10.746939 <NA>
##
## $data
## Formula for concentration:
## conc ~ time | Subject
## With 12 subjects defined in the 'Subject' column.
## Nominal time column is not specified.
##
## First 6 rows of concentration data:
## Subject conc time exclude
## 1 0.74000 0.00 <NA>
## 1 2.84000 0.25 <NA>
## 1 4.23875 0.37 <NA>
## 1 6.57000 0.57 <NA>
## 1 10.50000 1.12 <NA>
## 1 9.66000 2.02 <NA>
## Formula for dosing:
## timeX ~ (time | Subject)
## Nominal time column is not specified.
##
## First 6 rows of dosing data:
## Subject time exclude route duration timeX
## 1 0 <NA> extravascular 0 NA
## 2 0 <NA> extravascular 0 NA
## 3 0 <NA> extravascular 0 NA
## 4 0 <NA> extravascular 0 NA
## 5 0 <NA> extravascular 0 NA
## 6 0 <NA> extravascular 0 NA
##
## With 2 rows of AUC specifications.
## Options changed from default are:
## $adj.r.squared.factor
## [1] 1e-04
##
## $max.missing
## [1] 0.5
##
## $auc.method
## [1] "lin up/log down"
##
## $conc.na
## [1] "drop"
##
## $conc.blq
## $conc.blq$first
## [1] "keep"
##
## $conc.blq$middle
## [1] "drop"
##
## $conc.blq$last
## [1] "keep"
##
##
## $first.tmax
## [1] TRUE
##
## $allow.tmax.in.half.life
## [1] FALSE
##
## $min.hl.points
## [1] 3
##
## $min.span.ratio
## [1] 2
##
## $max.aucinf.pext
## [1] 20
##
## $min.hl.r.squared
## [1] 0.9
##
## $tau.choices
## [1] NA
##
## $single.dose.aucs
## start end auclast aucall aumclast aumcall cmax cmin tmax tlast tfirst
## 1 0 24 TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 2 0 Inf FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE
## clast.obs cl.last cl.all f mrt.last cav ctrough ptr tlag
## 1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 2 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## deg.fluc swing half.life r.squared adj.r.squared lambda.z
## 1 FALSE FALSE FALSE FALSE FALSE FALSE
## 2 FALSE FALSE TRUE FALSE FALSE FALSE
## lambda.z.time.first lambda.z.n.points clast.pred span.ratio aucinf.obs
## 1 FALSE FALSE FALSE FALSE FALSE
## 2 FALSE FALSE FALSE FALSE TRUE
## aucinf.pred aumcinf.obs aumcinf.pred aucpext.obs aucpext.pred cl.obs
## 1 FALSE FALSE FALSE FALSE FALSE FALSE
## 2 FALSE FALSE FALSE FALSE FALSE FALSE
## cl.pred mrt.obs mrt.pred vz.obs vz.pred vss.obs vss.pred vd.obs vd.pred
## 1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 2 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## thalf.eff.obs thalf.eff.pred kel.obs kel.pred
## 1 FALSE FALSE FALSE FALSE
## 2 FALSE FALSE FALSE FALSE
##
##
## $exclude
## [1] "exclude"
##
## attr(,"class")
## [1] "PKNCAresults" "list"
## attr(,"provenance")
## Provenance hash 51b59f882a9f3a2811324a5ff10bb22b generated on 2017-05-25 15:02:49 with R version 3.3.2 (2016-10-31).
summary(my.results)
## start end N auclast cmax
## 1 0 24 12 98.8 [23.0] 8.65 [17.0]
## 3 144 168 12 115 [28.4] 10.0 [21.0]