martin
★★

Austria,
2021-06-01 14:43
(10 d 23:33 ago)

Posting: # 22384
Views: 352

## AUC from 0 to tau at steady state [NCA / SHAM]

Dear forum members,

I just come accross a topic relating to calculation of AUC from 0 to tau at steady state and would be happy to get the froum members thoughts on this topic:

Should the concentration for time point zero (for calculation of AUC from 0 to tau) be somehow related to the pre-dose concentrations or set to zero where I think setting to zero would be in-line with the principle of superposition (e.g. have a look here).

best regards & happy to get your thoughts

martin
d_labes
★★★

Berlin, Germany,
2021-06-01 20:31
(10 d 17:46 ago)

@ martin
Posting: # 22385
Views: 302

## AUC from 0 to tau at steady state

Dear Martin,

nice to hear from you. Hope you are healthy.

» Should the concentration for time point zero (for calculation of AUC from 0 to tau) be somehow related to the pre-dose concentrations

Yep.

» or set to zero

Nope.

» where I think setting to zero would be in-line with the principle of superposition (e.g. have a look here).

All the best
Detlew
Helmut
★★★

Vienna, Austria,
2021-06-01 22:13
(10 d 16:04 ago)

@ martin
Posting: # 22386
Views: 306

## AUC from 0 to tau at steady state

Hi Martin,

» I just come accross a topic relating to calculation of AUC from 0 to tau at steady state

Where?

» Should the concentration for time point zero (for calculation of AUC from 0 to tau) be somehow related to the pre-dose concentrations …

Yes.

» … or set to zero where I think setting to zero would be in-line with the principle of superposition (e.g. have a look here).

Why on earth would you ignore the measured pre-dose concentration and impute zero instead?
Since I’m guilty for that one …

… I had the script to generate it. See the one on steroids at the end.

Model    C0   Cmax     Cτ AUC0.25     AUCτ     AUC∞       0.000 60.959 20.839   1.556  962.047 1322.815 NCA (AUC by lin-up/log-down trapezoidal) Dose     C0   Cmax     Cτ AUC0.25     AUCτ     AUC∞    1  0.000 60.959 20.839   1.508  960.939 1321.727    2 20.839 77.648 26.048   6.681 1231.522    3 26.048 81.953 27.351   7.974 1299.168    4 27.351 83.030 27.676   8.297 1316.079  Inf 27.785 83.389 27.785   8.405 1321.716 C0,ss forced to zero        4.932 1318.243

The lin-up/log-down trapezoidal performs nicely, since 1321.716 (AUCss,τ) ≈ 1321.727 (AUCSD,). The latter matches the 1322.815 obtained by the model pretty well. The plot shows also why the trapezoidal rule underestimates increasing concentrations (the thin black line is the model).

If you force the pre-dose concentration to zero, you fall into a trap (see there for a similar case but the other way ’round).
Get the concentrations after the 4th dose with superposition(tau, t, 4)
Correct (trapezoid)$$\small{AUC_{0-0.25}=0.5\times(0.25-0)\times(27.351+39.026)=8.297}$$Wrong (triangle)$$\small{AUC_{0-0.25}=0.5\times(0.25-0)\times39.026=4.878}$$Check

trap.linlog(t, superposition(tau, t, 4), 0, tau)$pAUC[2] # [1] 8.297082 trap.linlog(t, c(0, superposition(tau, t, 4)[2:length(t)]), 0, tau)$pAUC[2] # [1] 4.878223

one.comp <- function(f, D, V, k01, k10, t, p.t, t.last) { # no lagtime   if (!isTRUE(all.equal(k01, k10))) { # common: k01 ≠ k10     C    <- f*D*k01/(V*(k01-k10))*(exp(-k10*t)-exp(-k01*t))     tmax <- log(k01/k10)/(k01-k10)     Cmax <- f*D*k01/(V*(k01-k10))*(exp(-k10*tmax)-exp(-k01*tmax))     AUC  <- f*D/V/k10     x    <- micro.macro(f, D, V, k01, k10)     pAUC <- (x$C[["A"]]-x$C[["A"]]*exp(-x$E[["alpha"]]*p.t))/x$E[["alpha"]]+             (x$C[["B"]]-x$C[["B"]]*exp(-x$E[["beta"]]*p.t))/x$E[["beta"]]     AUCt <- (x$C[["A"]]-x$C[["A"]]*exp(-x$E[["alpha"]]*t.last))/x$E[["alpha"]]+             (x$C[["B"]]-x$C[["B"]]*exp(-x$E[["beta"]]*t.last))/x$E[["beta"]]   } else {                            # flip-flop     k    <- k10     C    <- f*D/V*k*t*exp(-k*t)     tmax <- 1/k     Cmax <- f*D/V*k*tmax*exp(-k*tmax)     AUC  <- f*D/V/k     pAUC <- AUCt <- NA # no idea   }   res <- list(C = C, tmax = tmax, Cmax = Cmax,               AUC = AUC, pAUC = pAUC, AUCt = AUCt)   return(res) } micro.macro <- function(f, D, V, k01, k10) {   # Coefficients (C) and exponents (E)   C <- f*D*k01/(V*(k01-k10))   C <- setNames(c(-C, +C), c("A", "B"))   E <- setNames(c(k01, k10), c("alpha", "beta"))   macro <- list(C = C, E = E)   return(macro) } trap.linlog <- function(t, C, t.first, t.last) {   pAUC.linlog <- 0   for (j in seq(which(t == t.first), which(t == t.last))) {     if (t[j] == t.first) {  # first triangle if 0       pAUC.linlog <- c(pAUC.linlog, 0.5*(t[j]-t[j-1])*C[j])       } else {       if (C[j] >= C[j-1]) { # linear up         pAUC.linlog <- c(pAUC.linlog, 0.5*(t[j]-t[j-1])*(C[j]+C[j-1]))       } else {              # log down         pAUC.linlog <- c(pAUC.linlog,                          (t[j]-t[j-1])*(C[j]-C[j-1])/                          (log(C[j]/C[j-1])))       }     }   }   AUC.linlog <- cumsum(pAUC.linlog)   res <- list(pAUC = pAUC.linlog, AUC = tail(AUC.linlog, 1))   return(res) } lz <- function(t, C) {   m <- lm(log(C) ~ t)   return(as.numeric(-coef(m)[2])) } superposition <- function(tau, t, N) {   x <- micro.macro(f, D, V, k01, k10)   if (!N == Inf) { # Nth dose: Gibaldi/Perrier (3.18)     f.alpha <- (1-exp(-N*x$E[["alpha"]]*tau))/ (1-exp(-x$E[["alpha"]]*tau))     f.beta  <- (1-exp(-N*x$E[["beta"]]*tau))/ (1-exp(-x$E[["beta"]]*tau))     C <- f.alpha*x$C[["A"]]*exp(-x$E[["alpha"]]*t) +          f.beta*x$C[["B"]]*exp(-x$E[["beta"]]*t)   } else {         # Steady state: Gibaldi/Perrier (3.19)     C <- x$C[["A"]]*exp(-x$E[["alpha"]]*t)/            (1-exp(-x$E[["alpha"]]*tau)) + x$C[["B"]]*exp(-x$E[["beta"]]*t)/ (1-exp(-x$E[["beta"]]*tau))   }   return(C) } # input # f        <- 2/3 D        <- 400 V        <- 3.49 t12.01   <- 1 t12.10   <- 12 k01      <- log(2)/t12.01 k10      <- log(2)/t12.10 tau      <- 24 doses    <- 4 t        <- c(0, 0.25, 0.6, 1, 1.5, 1.83, 2.23, 2.71, 3.3,               3.910868183, 4.89, 5.95, 7.24, 8.77798079, 10.9,               13.53, 16.8, 20.84355645, 24)           # crazy but good looking res      <- one.comp(f, D, V, k01, k10, t, t[2], tau) # model t.first  <- t[!is.na(res$C)][1] t.last <- rev(t[!is.na(res$C)])[1] lambda.z <- lz(t = tail(t, 3), tail(res$C, 3)) C0.sup <- Ctau.sup <- setNames(rep(NA, doses-1), paste0("dose.", 2:doses)) Cmax.sup <- AUC.sup <- setNames(rep(NA, doses-1), paste0("dose.", 2:doses)) pAUC.sup <- setNames(rep(NA, doses-1), paste0("dose.", 2:doses)) for (dose in 2:doses) { C <- superposition(tau, dose) C0.sup[dose-1] <- C[1] Ctau.sup[dose-1] <- tail(C, 1) Cmax.sup[dose-1] <- max(C) x <- trap.linlog(t, C, 0, tau) AUC.sup[dose-1] <- x$AUC   pAUC.sup[dose-1] <- x$pAUC[2] } C.ss <- superposition(tau, Inf) AUC.ss <- trap.linlog(t, C.ss, 0, tau)$AUC C.ss.0   <- c(0, C.ss[2:length(C.ss)]) AUC.ss.0 <- trap.linlog(t, C.ss.0, 0, tau)$AUC heading <- paste(" C0 Cmax C\u03C4 AUC0.25 AUC\u03C4 AUC\u221E") txt <- paste("\nModel", heading, "\n", sprintf("%10.3f", head(res$C, 1)), sprintf("%6.3f", res$Cmax), sprintf("%6.3f", tail(res$C, 1)), sprintf("%7.3f", res$pAUC), sprintf("%8.3f", res$AUCt), sprintf("%8.3f", res$AUC)) txt <- paste(txt, "\nNCA (AUC by lin-up/log-down trapezoidal)\nDose ", heading, "\n ", 1, sprintf("%6.3f", head(res$C, 1)),              sprintf("%6.3f", max(res$C)), sprintf("%6.3f", tail(res$C, 1)),              sprintf("%7.3f", trap.linlog(t, res$C, 0, tail(t, 1))$pAUC[2]),              sprintf("%8.3f", trap.linlog(t, res$C, 0, tail(t, 1))$AUC),              sprintf("%8.3f",              trap.linlog(t, res$C, 0, tau)$AUC+tail(res$C, 1)/lambda.z)) for (j in seq_along(C0.sup)) { txt <- paste(txt, "\n ", j+1, sprintf("%6.3f", C0.sup[j]), sprintf("%6.3f", Cmax.sup[j]), sprintf("%6.3f", Ctau.sup[j]), sprintf("%7.3f", pAUC.sup[j]), sprintf("%8.3f", AUC.sup[j])) } txt <- paste(txt, "\n Inf", sprintf("%6.3f", C.ss[1]), sprintf("%6.3f", max(C.ss)), sprintf("%6.3f", tail(C.ss, 1)), sprintf("%7.3f", trap.linlog(t, C.ss, 0, tail(t, 1))$pAUC[2]),              sprintf("%8.3f", AUC.ss)) txt <- paste(txt, "\nC0,ss forced to zero",              sprintf("%12.3f", trap.linlog(t, C.ss.0, 0, tail(t, 1))\$pAUC[2]),              sprintf("%8.3f", AUC.ss.0), "\n") cat(txt, "\n") # Steady state plot # t1 <- t[1:2] C1 <- C.ss[1:2] C0 <- C.ss.0[1:2] tm <- seq(0, t[2], length.out = 501) Cm <- superposition(tau, tm, Inf) dev.new(width = 4.5, height = 4.5) op <- par(no.readonly = TRUE) par(mar = c(3.4, 3.1, 0, 0.1), cex.axis = 0.9) plot(t1, C1, type = "n", ylim = c(0, max(C1)),      xlab = "", ylab = "", axes = FALSE) mtext(expression(italic(t)*" (h)"), 1, line = 2.5) mtext(expression(italic(C)[ss]*" (µg/mL)"), 2, line = 2) grid(nx = NA, ny = NULL) polygon(c(t1, rev(t1)), c(rep(0, length(C1)), rev(C1)),         border = "#87CEFA80", col = "#87CEFA80") polygon(c(t1, rev(t1)), c(rep(0, length(C0)), rev(C0)),         border = "#FF808080", col = "#FF808080") lines(tm, Cm) # model lines(t1, C0, col = "red", lwd = 2) lines(t1, C1, col = "blue", lwd = 2) points(t1[1], C0[1], cex = 1.25, pch = 19, col = "red") points(t1, C1, cex = 1.25, pch = 19, col = "blue") axis(1, t1) axis(2, las = 1) box() par(op)

PS: I derived the definite integral $$\small{\int_{0}^{t}C(t)\,\textrm{d}t}$$ based on the micro-constants $$\small{A,\alpha,B,\beta}$$ back in 1983 because I couldn’t find any reference. Ugly. If you can simplify it, let me know.

Dif-tor heh smusma 🖖
Helmut Schütz

The quality of responses received is directly proportional to the quality of the question asked. 🚮
Science Quotes