## (Expanded) BE limits, EMA-style [RSABE / ABEL]

Hi libaiyi,

» When we get a CVwr, how to get the BE limits?

The switching CVwR is 30% and hence, the regulatory constant k should be $$\log{(1.25)}/\sqrt{\log{(0.30^2+1)}} = 0.7601283\ldots$$
In R (CVs and BE limits in %):

CVwR <- seq(0.25, 0.55, 0.05) swR  <- sqrt(log(CVwR^2+1)) k    <- log(1.25)/sqrt(log(0.3^2+1)) EL1  <- data.frame(CVwR=100*CVwR, swR=swR, L=100*exp(-k*swR), U=100*exp(+k*swR)) EL1$L[EL1$CV <= 30] <-  80 # conventional EL1$U[EL1$CV <= 30] <- 125 # BE limits EL1$L[EL1$CV >= 50] <- 100*exp(-k*sqrt(log(0.5^2+1))) # upper scaling EL1$U[EL1$CV >= 50] <- 100*exp(+k*sqrt(log(0.5^2+1))) # cap at CV 50% print(EL1, row.names=FALSE) CVwR       swR        L        U   25 0.2462207 80.00000 125.0000   30 0.2935604 80.00000 125.0000   35 0.3399387 77.22885 129.4853   40 0.3852532 74.61401 134.0231   45 0.4294214 72.15055 138.5991   50 0.4723807 69.83255 143.1997   55 0.5140870 69.83255 143.1997

In its eternal wisdom (preferring “nice” numbers) the EMA demands a rounded k 0.76 (which implies a switching CVwR of 30.0053%).*

EL2 <- data.frame(CVwR=100*CVwR, swR=swR, L=100*exp(-0.76*swR), U=100*exp(+0.76*swR)) EL2$L[EL2$CV <= 30] <-  80 EL2$U[EL2$CV <= 30] <- 125 EL2$L[EL2$CV >= 50] <- 100*exp(-0.76*sqrt(log(0.5^2+1))) EL2$U[EL2$CV >= 50] <- 100*exp(+0.76*sqrt(log(0.5^2+1))) print(EL2, row.names=FALSE) CVwR       swR        L        U   25 0.2462207 80.00000 125.0000   30 0.2935604 80.00000 125.0000   35 0.3399387 77.23222 129.4796   40 0.3852532 74.61770 134.0165   45 0.4294214 72.15452 138.5915   50 0.4723807 69.83678 143.1910   55 0.5140870 69.83678 143.1910

More convenient by the function scABEL() of the R-package PowerTOST (by applying the default argument regulator="EMA"). The function then uses k 0.76, returns the conventional ABE limits if CVwR ≤30%, and observes the upper cap of CVwR 50%:

library(PowerTOST) CVwR <- seq(0.25, 0.55, 0.05) EL3  <- data.frame(CVwR=100*CVwR, swR=CV2se(CVwR),                    L=100*scABEL(CV=CVwR)[, "lower"],                    U=100*scABEL(CV=CVwR)[, "upper"]) print(EL3, row.names=FALSE) CVwR       swR        L        U   25 0.2462207 80.00000 125.0000   30 0.2935604 80.00000 125.0000   35 0.3399387 77.23222 129.4796   40 0.3852532 74.61770 134.0165   45 0.4294214 72.15452 138.5915   50 0.4723807 69.83678 143.1910   55 0.5140870 69.83678 143.1910

Don’t apply double rounding! Round the 90% CI in percent to two decimal places but compare it to the expanded limits in full precision.

• Karalis V, Symillides, Macheras P. On the leveling-off properties of the new bioequivalence limits for highly variable drugs of the EMA guideline. Eur J Pharm Sci. 2011;44:497–505. doi:10.1016/j.ejps.2011.09.008.

Edit: Hey Shuanghe, you were faster!

Dif-tor heh smusma 🖖
Helmut Schütz

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