## EMA: Waiving MD study [Regulatives / Guidelines]

Dear all,

at the end an script to play with.

For any elimination half life longer than ~7 hours and an intended dosing interval of 24 hours it will be impossible to get the MD study waived. Red are formulations with flip-flop PK (kakel).

last <- 72 ke   <- log(2)/7 tlag <- 0 If the half life is short (say, 3 hours) you don’t have to dive deep into flip-flop PK and may succeed. However, such a limited extension might not match your development target.

last <- 36 ke   <- log(2)/3 tlag <- 1 C.t <- function(f, D, V, ka, ke, t, tlag) { # 1-compartment   if (any(c(length(f) > 1, length(D) > 1, length(V) > 1,             length(ka) > 1, length(ke) > 1)))     stop("f, D, V, ka, ke have to be scalars.")   if (f <= 0 | f > 1) stop("f has to be positive <= 1.")   if (any(c(D <= 0, V <= 0, ka <= 0, ke <= 0)))     stop("D, V, ka, ke have to be positive.")   if (missing(tlag)) tlag <- 0   if (tlag < 0) stop("tlag has to be >= 0.")   if (ka != ke) {     C <- f*D*ka/(V*(ka-ke))*(exp(-ke*(t-tlag))-exp(-ka*(t-tlag)))   } else { # flip-flop PK     k <- ka     C <- f*D*k*(t-tlag)/V*exp(-k*(t-tlag))   }   C[C < 0] <- NA # negatives due to lag-time   return(C) } AUC.t <- function(C, t, tau) { # lin-up/log-down method   t <- t[t <= tau]             # for AUC until tau   AUC.t <- 0   for (j in 2:length(t)) {     if (!is.na(C[j-1])) {       if (C[j] >= C[j-1]) { # linear-up         AUC.t <- AUC.t+0.5*(t[j]-t[j-1])*(C[j]+C[j-1])       } else {              # logarithmic-down         AUC.t <- AUC.t+(t[j]-t[j-1])*(C[j]-C[j-1])/log(C[j]/C[j-1])       }     }   }   return(AUC.t) } AUC.i <- function(AUC.tau, C, t, last, tau) { # extrapolation   tlast.3  <- tail(t[t <= last], 3)   Clast.3  <- tail(C[t <= last], 3)   Clast    <- tail(Clast.3, 1)   Ctau     <- C[t == tau]   mod      <- lm(log(Clast.3) ~ tlast.3)   lambda.z <- -coef(mod)[]   if (lambda.z <= 0) stop("increasing concentrations")   AUC.inf  <- AUC.tau+Ctau/lambda.z   return(AUC.inf) } last  <- 72 tau   <- 24 f     <- 1 D     <- 100 V     <- 5 ke    <- log(2)/7       # moderate elimination half life tlag  <- 0              # optional >= 0 forms <- 15             # no. of formulations ka    <- log(2)/1:forms # vary absorption t     <- seq(0, last, 0.1) AUC.ext <- numeric() windows(width = 6, height = 6) op    <- par(no.readonly = TRUE) par(mar = c(4, 4, 0.2, 0) + 0.1, family = "sans") split.screen(c(2, 1)) screen(1)   for (j in 1:forms) {     C <- C.t(f, D, V, ka[j], ke, t, tlag)     if (j == 1) {       plot(t, C, type = "l", col = "blue", axes = FALSE,            xlab = "time", ylab = "concentration")       abline(v = tau, lty = 3)       axis(1, labels = seq(0, last, 6), at = seq(0, last, 6))       axis(2, las = 1)     } else {       if (ka[j] > ke) {         lines(t, C, col = "blue")       } else { # flip-flop         lines(t, C, col = "red")       }     }     AUC.tau    <- AUC.t(C, t, tau)     AUC.inf    <- AUC.i(AUC.tau, C, t, last, tau)     AUC.ext[j] <- (AUC.inf-AUC.tau)/AUC.inf   }   clr <- ifelse (ka/ke > 1, clr <- "blue", clr <- "red")   par(family = "mono")   legend("topright", title = "ka / kel", box.lty = 0,          legend = sprintf("%.4f", ka/ke), title.col = "black",          text.col = clr, cex = 0.75, ncol = 3); box() screen(2)   par(family = "sans")   plot(ka/ke, 100*AUC.ext, ylim = c(0, max(100*AUC.ext)), log = "x",        axes = FALSE, xlab = "ka / kel", ylab = "extrapolated AUC",        pch = 19, col = clr)   points(rev(ka/ke)[which(rev(AUC.ext) <= 0.1)],          rev(100*AUC.ext)[rev(AUC.ext) <= 0.1], pch = 21, col = "#00C000",          bg = "transparent", cex = 1.55)   xticks <- c(axTicks(side = 1, log = TRUE), max(ka/ke))   axis(1, at = xticks, labels = xticks)   axis(2, las = 1, at = c(0, pretty(100*AUC.ext)),        labels = sprintf("%.0f%%", c(0, pretty(100*AUC.ext))))   abline(v = 1, lty = 3)  # flip-flop limit   abline(h = 10, lty = 3) # MD waiver limit   par(family = "mono")   legend("topright", title = "ka / kel, extrapolated AUC", box.lty = 0,          legend = sprintf("%.4f %.2f%%", rev(ka/ke), rev(100*AUC.ext)),          title.col = "black", text.col = rev(clr), cex = 0.75, ncol = 3,          bg = "white"); box() close.screen(all = TRUE) par(op)

Dif-tor heh smusma 🖖
Helmut Schütz The quality of responses received is directly proportional to the quality of the question asked. 🚮
Science Quotes Ing. Helmut Schütz 