stepwise-nca-analysis.rmd

Load libraries

library(dplyr)
library(qpNCA)
library(knitr)

Define mutate_cond and locf functions

mutate_cond <- function (.data, condition, ..., envir = parent.frame()){
  condition <- eval(substitute(condition), .data, envir)
  if(!any(condition))return(.data) # do nothing if nothing to do
  .data[condition, ] <- .data[condition, ] %>% mutate(...)
  .data
}
locf <- function(x){
  good <- !is.na(x)
  positions <- seq(length(x))
  good.positions <- good * positions
  last.good.position <- cummax(good.positions)
  last.good.position[last.good.position == 0] <- NA
  x[last.good.position]
}

Check out Theoph data and prepare data for NCA

We use the internal Theoph dataset as input file, modify the data and add necessary columns
Furthermore, we introduce some missing values, LOQ values and time deviations

head(Theoph) %>% kable()
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
input.data <- Theoph

#we need nominal time variable for some tasks.
ntad <- data.frame(rn=c(1:11),ntad=c(0,0.25,0.5,1,2,4,5,7,9,12,24))

input.data %<>% 
           group_by(Subject) %>%
           mutate(subject=as.numeric(Subject),
                  rn=row_number(),
                  dose=Dose*Wt,
                  bloq=ifelse(conc==0,1,0),
                  loq=0.1,
                  excl_th=0
                  ) %>%
           left_join(ntad) %>%
           ungroup %>%
           arrange(subject,ntad) %>%
           select(subject,ntad,tad=Time,conc,dose,bloq,loq,excl_th)
## Joining with `by = join_by(rn)`
input.data %<>%
           mutate_cond(condition=subject==2&ntad%in%c(24),conc=NA) %>%
           mutate_cond(condition=subject==4&ntad%in%c(9),conc=NA) %>%
           mutate_cond(condition=subject==3&ntad==9,excl_th=1) %>%
           mutate_cond(condition=subject==6&ntad==24,conc=0,bloq=1) %>%
           filter(!(subject==5&ntad==12))

Impute LOQ values

loqed.data = input.data %>%
  correct.loq(
  by = "subject",
  nomtimevar = "ntad",
  timevar = "tad",
  depvar = "conc",
  bloqvar = "bloq",
  loqvar = "loq",
  loqrule = 1
)

# Result:

loqed.data %>% filter(loqrule.nr!="") %>% select(subject,ntad,conc,loqrule.nr,loqrule.txt) %>% kable()
subject ntad conc loqrule.nr loqrule.txt
1 0 0 LOQ1 BLOQ values before first measurable concentration set to 0
3 0 0 LOQ1 BLOQ values before first measurable concentration set to 0
4 0 0 LOQ1 BLOQ values before first measurable concentration set to 0
5 0 0 LOQ1 BLOQ values before first measurable concentration set to 0
6 0 0 LOQ1 BLOQ values before first measurable concentration set to 0
6 24 NA LOQ1 BLOQ values after first measurable concentration set to missing
7 0 0 LOQ1 BLOQ values before first measurable concentration set to 0
8 0 0 LOQ1 BLOQ values before first measurable concentration set to 0
9 0 0 LOQ1 BLOQ values before first measurable concentration set to 0
12 0 0 LOQ1 BLOQ values before first measurable concentration set to 0

Estimation of terminal half-life

th = loqed.data %>% 
     est.thalf(
     by = "subject",
     timevar = "tad",
     depvar = "conc",
     includeCmax = "Y",
     exclvar = "excl_th"
     )

# Result:

head(th) %>% kable()
subject no.points intercept lambda_z r.squared adj.r.squared start_th end_th thalf includeCmax points_excluded
1 3 8.212078 0.0915758 0.9989638 0.9979276 9.22 23.85 7.569107 Y N
2 3 8.959057 0.0777431 0.9964163 0.9928325 6.98 12.05 8.915865 Y N
3 6 8.688001 0.0818231 0.9962482 0.9953103 2.02 24.12 8.471285 Y Y
4 3 8.703249 0.0962171 0.9999286 0.9998572 7.03 24.08 7.203989 Y N
5 5 10.568234 0.0948933 0.9957650 0.9943534 3.62 24.17 7.304489 Y N
6 3 12.790536 0.1192526 0.9867217 0.9734435 7.03 12.00 5.812428 Y N

Plot individual regression plots

plot_reg(
  loqed.data,
  by = "subject",
  th = th,
  bloqvar = "bloq",
  timevar = "tad",
  depvar = "conc",
  timelab = "Time (h)",
  deplab = "Conc (ng/mL)",
  exclvar = "excl_th",
  plotdir = NA
)
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

## 
## [[5]]

## 
## [[6]]

## 
## [[7]]

## 
## [[8]]

## 
## [[9]]

## 
## [[10]]

## 
## [[11]]

## 
## [[12]]

Calculate Cmax and Tmax

ctmax = input.data %>% calc.ctmax(
  by = "subject",
  timevar="tad",
  depvar="conc"
)

# Result:

head(ctmax) %>% kable()
subject cmax tmax
1 6.44 1.15
2 7.09 3.48
3 7.56 2.02
4 8.00 0.98
5 8.20 1.02
6 8.33 1.92

Correct time deviations at critical time points

ct.data= loqed.data %>%
    correct.time(
    by="subject",
    nomtimevar="ntad",
    timevar="tad",
    depvar="conc",
    th=th,
    tau=24,
    tstart=4,
    tend=9,
    teval=12,
    reg="sd",
    method=1
  ) 
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
# Result:

ct.data %>% filter(subject<=5&(trule.nr!=""|create.nr!="")) %>% select(subject,ntad,conc,applies.to.time,trule.nr,trule.txt,create.txt) %>% kable()
subject ntad conc applies.to.time trule.nr trule.txt create.txt
1 4 5.53 TSTART SDT-2 Concentration ( 5.53 ) at deviating time ( t=3.57 instead of 4 ) corrected to 5.353 by interpolation (sample taken too early)
1 9 3.46 TEND SDT-2 Concentration ( 3.46 ) at deviating time ( t=9.22 instead of 9 ) corrected to 3.515 by interpolation (sample taken too late)
1 12 2.78 TEVAL SDT-2 Concentration ( 2.78 ) at deviating time ( t=12.1 instead of 12 ) corrected to 2.804 by interpolation (sample taken too late)
1 24 0.92 TAU SDT-3 Concentration ( 0.92 ) at deviating time ( t=23.85 instead of 24 ) corrected to 0.907 by extrapolation (sample taken too early)
2 4 7.09 TSTART SDT-2 Concentration ( 7.09 ) at deviating time ( t=3.48 instead of 4 ) corrected to 6.943 by interpolation (sample taken too early)
2 12 3.53 TEVAL SDT-2 Concentration ( 3.53 ) at deviating time ( t=12.05 instead of 12 ) corrected to 3.544 by interpolation (sample taken too late)
2 24 NA TAU SDT-2 Concentration ( NA ) at deviating time ( t=24.22 instead of 24 ) corrected to NA by interpolation (sample taken too late)
3 4 6.59 TSTART SDT-2 Concentration ( 6.59 ) at deviating time ( t=3.53 instead of 4 ) corrected to 6.37 by interpolation (sample taken too early)
3 9 4.57 TEND SDT-2 Concentration ( 4.57 ) at deviating time ( t=9.07 instead of 9 ) corrected to 4.576 by interpolation (sample taken too late)
3 12 3.00 TEVAL SDT-2 Concentration ( 3 ) at deviating time ( t=12.1 instead of 12 ) corrected to 3.052 by interpolation (sample taken too late)
3 24 1.25 TAU SDT-2 Concentration ( 1.25 ) at deviating time ( t=24.12 instead of 24 ) corrected to 1.267 by interpolation (sample taken too late)
4 4 5.87 TSTART SDT-2 Concentration ( 5.87 ) at deviating time ( t=3.6 instead of 4 ) corrected to 5.687 by interpolation (sample taken too early)
4 9 NA TEND SDT-2 Concentration ( NA ) at deviating time ( t=9.03 instead of 9 ) corrected to NA by interpolation (sample taken too late)
4 12 2.69 TEVAL SDT-2 Concentration ( 2.69 ) at deviating time ( t=12.12 instead of 12 ) corrected to 2.731 by interpolation (sample taken too late)
4 24 0.86 TAU SDT-2 Concentration ( 0.86 ) at deviating time ( t=24.08 instead of 24 ) corrected to 0.872 by interpolation (sample taken too late)
5 4 7.50 TSTART SDT-2 Concentration ( 7.5 ) at deviating time ( t=3.62 instead of 4 ) corrected to 7.162 by interpolation (sample taken too early)
5 12 NA Missing record at t=12 added
5 24 1.05 TAU SDT-2 Concentration ( 1.05 ) at deviating time ( t=24.17 instead of 24 ) corrected to 1.093 by interpolation (sample taken too late)

Impute missing concentrations at critical time points

cc.ct.data = ct.data %>%
    correct.conc(
    by ="subject",
    nomtimevar="ntad",
    tau=24,
    tstart=4,
    tend=9,
    teval=12,
    th=th,
    reg="sd",
    ss="n",
    route="EV",
    method=1
  )
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
## Joining with `by = join_by(ptime)`
# Result:

cc.ct.data %>% filter(crule.nr!="") %>% select(subject,ntad,conc,applies.to.conc,crule.nr,crule.txt) %>% kable()
subject ntad conc applies.to.conc crule.nr crule.txt
2 0 0.15 PREDOSE SDC-1 Missing or measurable concentration at (SD) PREDOSE set to 0
2 24 NA TAU SDC-3 Missing concentration at t=24 corrected to 1.394 by extrapolation
4 9 NA TEND SDC-2 Missing concentration at t=9 corrected to 3.769 by interpolation
5 12 NA TEVAL SDC-2 Missing concentration at t=12 corrected to 4.139 by interpolation
6 24 NA TAU SDC-3 Missing concentration at t=24 corrected to 0.72 by extrapolation
10 0 0.24 PREDOSE SDC-1 Missing or measurable concentration at (SD) PREDOSE set to 0
11 0 0.74 PREDOSE SDC-1 Missing or measurable concentration at (SD) PREDOSE set to 0

Tabulate corrections

tab_corr = cc.ct.data %>% 
     tab.corr(
       by="subject",
       nomtimevar="ntad"
     )

# Result:

tab_corr %>% kable()
subject ntad applies.to rule.nr rule.txt
1 0 NA LOQ1 BLOQ values before first measurable concentration set to 0
1 4 TSTART SDT-2 Concentration ( 5.53 ) at deviating time ( t=3.57 instead of 4 ) corrected to 5.353 by interpolation (sample taken too early)
1 9 TEND SDT-2 Concentration ( 3.46 ) at deviating time ( t=9.22 instead of 9 ) corrected to 3.515 by interpolation (sample taken too late)
1 12 TEVAL SDT-2 Concentration ( 2.78 ) at deviating time ( t=12.1 instead of 12 ) corrected to 2.804 by interpolation (sample taken too late)
1 24 TAU SDT-3 Concentration ( 0.92 ) at deviating time ( t=23.85 instead of 24 ) corrected to 0.907 by extrapolation (sample taken too early)
2 0 PREDOSE SDC-1 Missing or measurable concentration at (SD) PREDOSE set to 0
2 4 TSTART SDT-2 Concentration ( 7.09 ) at deviating time ( t=3.48 instead of 4 ) corrected to 6.943 by interpolation (sample taken too early)
2 12 TEVAL SDT-2 Concentration ( 3.53 ) at deviating time ( t=12.05 instead of 12 ) corrected to 3.544 by interpolation (sample taken too late)
2 24 TAU SDT-2 Concentration ( NA ) at deviating time ( t=24.22 instead of 24 ) corrected to NA by interpolation (sample taken too late)
2 24 TAU SDC-3 Missing concentration at t=24 corrected to 1.394 by extrapolation
3 0 NA LOQ1 BLOQ values before first measurable concentration set to 0
3 4 TSTART SDT-2 Concentration ( 6.59 ) at deviating time ( t=3.53 instead of 4 ) corrected to 6.37 by interpolation (sample taken too early)
3 9 TEND SDT-2 Concentration ( 4.57 ) at deviating time ( t=9.07 instead of 9 ) corrected to 4.576 by interpolation (sample taken too late)
3 12 TEVAL SDT-2 Concentration ( 3 ) at deviating time ( t=12.1 instead of 12 ) corrected to 3.052 by interpolation (sample taken too late)
3 24 TAU SDT-2 Concentration ( 1.25 ) at deviating time ( t=24.12 instead of 24 ) corrected to 1.267 by interpolation (sample taken too late)
4 0 NA LOQ1 BLOQ values before first measurable concentration set to 0
4 4 TSTART SDT-2 Concentration ( 5.87 ) at deviating time ( t=3.6 instead of 4 ) corrected to 5.687 by interpolation (sample taken too early)
4 9 TEND SDT-2 Concentration ( NA ) at deviating time ( t=9.03 instead of 9 ) corrected to NA by interpolation (sample taken too late)
4 9 TEND SDC-2 Missing concentration at t=9 corrected to 3.769 by interpolation
4 12 TEVAL SDT-2 Concentration ( 2.69 ) at deviating time ( t=12.12 instead of 12 ) corrected to 2.731 by interpolation (sample taken too late)
4 24 TAU SDT-2 Concentration ( 0.86 ) at deviating time ( t=24.08 instead of 24 ) corrected to 0.872 by interpolation (sample taken too late)
5 0 NA LOQ1 BLOQ values before first measurable concentration set to 0
5 4 TSTART SDT-2 Concentration ( 7.5 ) at deviating time ( t=3.62 instead of 4 ) corrected to 7.162 by interpolation (sample taken too early)
5 12 NA - Missing record at t=12 added
5 12 TEVAL SDC-2 Missing concentration at t=12 corrected to 4.139 by interpolation
5 24 TAU SDT-2 Concentration ( 1.05 ) at deviating time ( t=24.17 instead of 24 ) corrected to 1.093 by interpolation (sample taken too late)
6 0 NA LOQ1 BLOQ values before first measurable concentration set to 0
6 4 TSTART SDT-2 Concentration ( 6.85 ) at deviating time ( t=3.5 instead of 4 ) corrected to 6.597 by interpolation (sample taken too early)
6 24 NA LOQ1 BLOQ values after first measurable concentration set to missing
6 24 TAU SDT-2 Concentration ( NA ) at deviating time ( t=24.3 instead of 24 ) corrected to NA by interpolation (sample taken too late)
6 24 TAU SDC-3 Missing concentration at t=24 corrected to 0.72 by extrapolation
7 0 NA LOQ1 BLOQ values before first measurable concentration set to 0
7 4 TSTART SDT-2 Concentration ( 7.54 ) at deviating time ( t=3.5 instead of 4 ) corrected to 7.323 by interpolation (sample taken too early)
7 9 TEND SDT-2 Concentration ( 5.33 ) at deviating time ( t=9.02 instead of 9 ) corrected to 5.335 by interpolation (sample taken too late)
7 12 TEVAL SDT-2 Concentration ( 4.19 ) at deviating time ( t=11.98 instead of 12 ) corrected to 4.185 by interpolation (sample taken too early)
7 24 TAU SDT-2 Concentration ( 1.15 ) at deviating time ( t=24.65 instead of 24 ) corrected to 1.306 by interpolation (sample taken too late)
8 0 NA LOQ1 BLOQ values before first measurable concentration set to 0
8 4 TSTART SDT-2 Concentration ( 5.66 ) at deviating time ( t=3.53 instead of 4 ) corrected to 5.663 by interpolation (sample taken too early)
8 9 TEND SDT-2 Concentration ( 4.11 ) at deviating time ( t=8.8 instead of 9 ) corrected to 4.042 by interpolation (sample taken too early)
8 12 TEVAL SDT-2 Concentration ( 3.16 ) at deviating time ( t=11.6 instead of 12 ) corrected to 3.096 by interpolation (sample taken too early)
8 24 TAU SDT-2 Concentration ( 1.12 ) at deviating time ( t=24.43 instead of 24 ) corrected to 1.188 by interpolation (sample taken too late)
9 0 NA LOQ1 BLOQ values before first measurable concentration set to 0
9 4 TSTART SDT-2 Concentration ( 9.75 ) at deviating time ( t=3.52 instead of 4 ) corrected to 9.385 by interpolation (sample taken too early)
9 9 TEND SDT-2 Concentration ( 6.11 ) at deviating time ( t=9.03 instead of 9 ) corrected to 6.117 by interpolation (sample taken too late)
9 12 TEVAL SDT-2 Concentration ( 4.57 ) at deviating time ( t=12.05 instead of 12 ) corrected to 4.595 by interpolation (sample taken too late)
9 24 TAU SDT-2 Concentration ( 1.17 ) at deviating time ( t=24.15 instead of 24 ) corrected to 1.212 by interpolation (sample taken too late)
10 0 PREDOSE SDC-1 Missing or measurable concentration at (SD) PREDOSE set to 0
10 4 TSTART SDT-2 Concentration ( 10.21 ) at deviating time ( t=3.55 instead of 4 ) corrected to 9.901 by interpolation (sample taken too early)
10 9 TEND SDT-2 Concentration ( 7.14 ) at deviating time ( t=9.38 instead of 9 ) corrected to 7.285 by interpolation (sample taken too late)
10 12 TEVAL SDT-2 Concentration ( 5.68 ) at deviating time ( t=12.1 instead of 12 ) corrected to 5.734 by interpolation (sample taken too late)
10 24 TAU SDT-3 Concentration ( 2.42 ) at deviating time ( t=23.7 instead of 24 ) corrected to 2.366 by extrapolation (sample taken too early)
11 0 PREDOSE SDC-1 Missing or measurable concentration at (SD) PREDOSE set to 0
11 4 TSTART SDT-2 Concentration ( 8.58 ) at deviating time ( t=3.82 instead of 4 ) corrected to 8.549 by interpolation (sample taken too early)
11 9 TEND SDT-2 Concentration ( 6.89 ) at deviating time ( t=9.05 instead of 9 ) corrected to 6.904 by interpolation (sample taken too late)
11 12 TEVAL SDT-2 Concentration ( 5.94 ) at deviating time ( t=12.12 instead of 12 ) corrected to 5.977 by interpolation (sample taken too late)
11 24 TAU SDT-2 Concentration ( 3.28 ) at deviating time ( t=24.37 instead of 24 ) corrected to 3.36 by interpolation (sample taken too late)
12 0 NA LOQ1 BLOQ values before first measurable concentration set to 0
12 4 TSTART SDT-2 Concentration ( 8.74 ) at deviating time ( t=3.5 instead of 4 ) corrected to 8.352 by interpolation (sample taken too early)
12 9 TEND SDT-2 Concentration ( 5.9 ) at deviating time ( t=9.1 instead of 9 ) corrected to 5.957 by interpolation (sample taken too late)
12 24 TAU SDT-2 Concentration ( 1.57 ) at deviating time ( t=24.35 instead of 24 ) corrected to 1.649 by interpolation (sample taken too late)

Calculate PK parameters NOT based on lambda_z

par = cc.ct.data %>%
      calc.par(by = 'subject',
               tau=24,
               teval=12,
               tstart=4,
               tend=9,
               route="EV",
               method=1)

# Result:

head(par) %>% kable()
subject route method tlast clast.obs tlast.ok t0.ok aucall auclast aumcall aumclast mrtall mrtlast calc.tau auctau aumctau tau calc.teval auc12 teval calc.part auc4_9 tstart tend c0 area.back.extr
1 EV 1 23.85 0.92 1 1 73.77555 73.77555 609.1524 609.1524 8.256833 8.256833 1 73.97837 612.3497 24 1 51.75887 12 1 21.64179 4 9 NA NA
2 EV 1 12.05 3.53 1 1 62.25685 62.25685 354.0998 354.0998 5.687724 5.687724 1 91.67850 808.1730 24 1 62.08000 12 1 28.32875 4 9 NA NA
3 EV 1 24.12 1.25 1 1 88.55995 88.55995 739.5346 739.5346 8.350666 8.350666 1 88.40890 737.1499 24 1 62.71486 12 1 26.17989 4 9 NA NA
4 EV 1 24.08 0.86 1 1 80.44595 80.44595 614.9855 614.9855 7.644705 7.644705 1 80.37666 614.1894 24 1 58.89166 12 1 23.37641 4 9 NA NA
5 EV 1 24.17 1.05 1 1 102.32475 102.32475 767.2143 767.2143 7.497837 7.497837 1 102.14258 767.7359 24 1 70.75194 12 1 28.50079 4 9 NA NA
6 EV 1 12.00 3.01 1 1 67.48030 67.48030 349.9481 349.9481 5.185929 5.185929 1 89.85776 670.2872 24 1 67.48030 12 1 27.80327 4 9 NA NA

Calculate PK parameters based on lambda_z

# Create a covariates file, containing at least the dose given

cov = input.data %>%
      distinct(subject,dose)

par <- par %>% 
  calc.par.th(
    by="subject",
    th=th ,
    covariates=cov,
    dose="dose",
    factor=1,  
    reg="sd",
    ss="n"
    )

# Result:

head(par) %>% kable()
subject method tlast clast.obs tlast.ok t0.ok aucall auclast aumcall aumclast mrtall mrtlast calc.tau auctau aumctau tau calc.teval auc12 teval calc.part auc4_9 tstart tend c0 area.back.extr no.points intercept lambda_z r.squared adj.r.squared start_th end_th thalf includeCmax points_excluded dose factor reg ss route clast.pred aucinf.obs aucinf.pred aumcinf.obs aumcinf.pred cl.f.obs cl.f.pred mrtinf.obs mrtinf.pred vz.f.obs vz.f.pred vss.obs vss.pred pctextr.obs pctextr.pred pctback.obs pctback.pred cl.obs cl.pred vz.obs vz.pred cl.f.ss cl.ss
1 1 23.85 0.92 1 1 73.77555 73.77555 609.1524 609.1524 8.256833 8.256833 1 73.97837 612.3497 24 1 51.75887 12 1 21.64179 4 9 NA NA 3 8.212078 0.0915758 0.9989638 0.9979276 9.22 23.85 7.569107 Y N 320.000 1 sd n ev 0.9245229 83.82187 83.87126 958.4620 960.1793 3.817620 3.815371 11.434510 11.448252 41.68807 41.66352 NA NA 11.985320 12.037150 NA NA NA NA NA NA NA NA
2 1 12.05 3.53 1 1 62.25685 62.25685 354.0998 354.0998 5.687724 5.687724 1 91.67850 808.1730 24 1 62.08000 12 1 28.32875 4 9 NA NA 3 8.959057 0.0777431 0.9964163 0.9928325 6.98 12.05 8.915865 Y N 319.770 1 sd n ev 3.5108576 107.66280 107.41657 1485.2925 1479.1583 2.970107 2.976915 13.795782 13.770299 38.20411 38.29168 NA NA 42.174223 42.041671 NA NA NA NA NA NA NA NA
3 1 24.12 1.25 1 1 88.55995 88.55995 739.5346 739.5346 8.350666 8.350666 1 88.40890 737.1499 24 1 62.71486 12 1 26.17989 4 9 NA NA 6 8.688001 0.0818231 0.9962482 0.9953103 2.02 24.12 8.471285 Y Y 319.365 1 sd n ev 1.2072785 103.83680 103.31468 1294.7180 1275.7434 3.075644 3.091187 12.468778 12.348132 37.58892 37.77888 NA NA 14.712367 14.281349 NA NA NA NA NA NA NA NA
4 1 24.08 0.86 1 1 80.44595 80.44595 614.9855 614.9855 7.644705 7.644705 1 80.37666 614.1894 24 1 58.89166 12 1 23.37641 4 9 NA NA 3 8.703249 0.0962171 0.9999286 0.9998572 7.03 24.08 7.203989 Y N 319.800 1 sd n ev 0.8579476 89.38407 89.36274 923.1107 922.3753 3.577819 3.578673 10.327463 10.321700 37.18484 37.19372 NA NA 9.999676 9.978193 NA NA NA NA NA NA NA NA
5 1 24.17 1.05 1 1 102.32475 102.32475 767.2143 767.2143 7.497837 7.497837 1 102.14258 767.7359 24 1 70.75194 12 1 28.50079 4 9 NA NA 5 10.568234 0.0948933 0.9957650 0.9943534 3.62 24.17 7.304489 Y N 319.365 1 sd n ev 1.0663923 113.38981 113.56255 1151.2620 1157.2576 2.816523 2.812239 10.153135 10.190486 29.68094 29.63579 NA NA 9.758423 9.895693 NA NA NA NA NA NA NA NA
6 1 12.00 3.01 1 1 67.48030 67.48030 349.9481 349.9481 5.185929 5.185929 1 89.85776 670.2872 24 1 67.48030 12 1 27.80327 4 9 NA NA 3 12.790536 0.1192526 0.9867217 0.9734435 7.03 12.00 5.812428 Y N 318.560 1 sd n ev 3.0577347 92.72084 93.12112 864.4906 872.6506 3.435689 3.420921 9.323585 9.371135 28.81018 28.68634 NA NA 27.222078 27.534915 NA NA NA NA NA NA NA NA

Combine All NCA parameters in one data frame

par_all = left_join(par, ctmax)
## Joining with `by = join_by(subject)`
# Result:

head(par_all) %>% kable()
subject method tlast clast.obs tlast.ok t0.ok aucall auclast aumcall aumclast mrtall mrtlast calc.tau auctau aumctau tau calc.teval auc12 teval calc.part auc4_9 tstart tend c0 area.back.extr no.points intercept lambda_z r.squared adj.r.squared start_th end_th thalf includeCmax points_excluded dose factor reg ss route clast.pred aucinf.obs aucinf.pred aumcinf.obs aumcinf.pred cl.f.obs cl.f.pred mrtinf.obs mrtinf.pred vz.f.obs vz.f.pred vss.obs vss.pred pctextr.obs pctextr.pred pctback.obs pctback.pred cl.obs cl.pred vz.obs vz.pred cl.f.ss cl.ss cmax tmax
1 1 23.85 0.92 1 1 73.77555 73.77555 609.1524 609.1524 8.256833 8.256833 1 73.97837 612.3497 24 1 51.75887 12 1 21.64179 4 9 NA NA 3 8.212078 0.0915758 0.9989638 0.9979276 9.22 23.85 7.569107 Y N 320.000 1 sd n ev 0.9245229 83.82187 83.87126 958.4620 960.1793 3.817620 3.815371 11.434510 11.448252 41.68807 41.66352 NA NA 11.985320 12.037150 NA NA NA NA NA NA NA NA 6.44 1.15
2 1 12.05 3.53 1 1 62.25685 62.25685 354.0998 354.0998 5.687724 5.687724 1 91.67850 808.1730 24 1 62.08000 12 1 28.32875 4 9 NA NA 3 8.959057 0.0777431 0.9964163 0.9928325 6.98 12.05 8.915865 Y N 319.770 1 sd n ev 3.5108576 107.66280 107.41657 1485.2925 1479.1583 2.970107 2.976915 13.795782 13.770299 38.20411 38.29168 NA NA 42.174223 42.041671 NA NA NA NA NA NA NA NA 7.09 3.48
3 1 24.12 1.25 1 1 88.55995 88.55995 739.5346 739.5346 8.350666 8.350666 1 88.40890 737.1499 24 1 62.71486 12 1 26.17989 4 9 NA NA 6 8.688001 0.0818231 0.9962482 0.9953103 2.02 24.12 8.471285 Y Y 319.365 1 sd n ev 1.2072785 103.83680 103.31468 1294.7180 1275.7434 3.075644 3.091187 12.468778 12.348132 37.58892 37.77888 NA NA 14.712367 14.281349 NA NA NA NA NA NA NA NA 7.56 2.02
4 1 24.08 0.86 1 1 80.44595 80.44595 614.9855 614.9855 7.644705 7.644705 1 80.37666 614.1894 24 1 58.89166 12 1 23.37641 4 9 NA NA 3 8.703249 0.0962171 0.9999286 0.9998572 7.03 24.08 7.203989 Y N 319.800 1 sd n ev 0.8579476 89.38407 89.36274 923.1107 922.3753 3.577819 3.578673 10.327463 10.321700 37.18484 37.19372 NA NA 9.999676 9.978193 NA NA NA NA NA NA NA NA 8.00 0.98
5 1 24.17 1.05 1 1 102.32475 102.32475 767.2143 767.2143 7.497837 7.497837 1 102.14258 767.7359 24 1 70.75194 12 1 28.50079 4 9 NA NA 5 10.568234 0.0948933 0.9957650 0.9943534 3.62 24.17 7.304489 Y N 319.365 1 sd n ev 1.0663923 113.38981 113.56255 1151.2620 1157.2576 2.816523 2.812239 10.153135 10.190486 29.68094 29.63579 NA NA 9.758423 9.895693 NA NA NA NA NA NA NA NA 8.20 1.02
6 1 12.00 3.01 1 1 67.48030 67.48030 349.9481 349.9481 5.185929 5.185929 1 89.85776 670.2872 24 1 67.48030 12 1 27.80327 4 9 NA NA 3 12.790536 0.1192526 0.9867217 0.9734435 7.03 12.00 5.812428 Y N 318.560 1 sd n ev 3.0577347 92.72084 93.12112 864.4906 872.6506 3.435689 3.420921 9.323585 9.371135 28.81018 28.68634 NA NA 27.222078 27.534915 NA NA NA NA NA NA NA NA 8.33 1.92