- Introduction
- Supported Designs
- Purpose
- Supported
- Power and Sample Size
- Methods
- Helpers
- Defaults
- Average Bioequivalence
- Reference-Scaled Average Bioequivalence
- Dose-Proportionality
- Power Analysis
- Examples
- Parallel Design
- Crossover Design
- Replicate Designs
- Dose-Proportionality
- Power Analysis
- Speed Comparisons
- Installation
- Session Information

Version 1.5.6 built 2024-03-18 with R 4.3.3

The package contains functions to calculate power and estimate sample size for various study designs used in (not only bio-) equivalence studies.

```
# design name df
# parallel 2 parallel groups n-2
# 2x2 2x2 crossover n-2
# 2x2x2 2x2x2 crossover n-2
# 3x3 3x3 crossover 2*n-4
# 3x6x3 3x6x3 crossover 2*n-4
# 4x4 4x4 crossover 3*n-6
# 2x2x3 2x2x3 replicate crossover 2*n-3
# 2x2x4 2x2x4 replicate crossover 3*n-4
# 2x4x4 2x4x4 replicate crossover 3*n-4
# 2x3x3 partial replicate (2x3x3) 2*n-3
# 2x4x2 Balaam's (2x4x2) n-2
# 2x2x2r Liu's 2x2x2 repeated x-over 3*n-2
# paired paired means n-1
```

Codes of designs follow this pattern:
`treatments x sequences x periods`

.

Although some replicate designs are more ‘popular’ than others, sample
size estimations are valid for *all* of the following designs:

| design | type | sequences | | periods |
|:---------------------:|:-------------------:|:------------------------:|---------------------------------------|:----------------------:|
| `2x2x4`

| full | 2 | TRTR\|RTRT | 4 |
| `2x2x4`

| full | 2 | TRRT\|RTTR | 4 |
| `2x2x4`

| full | 2 | TTRR\|RRTT | 4 |
| `2x4x4`

| full | 4 | TRTR\|RTRT\|TRRT\|RTTR | 4 |
| `2x4x4`

| full | 4 | TRRT\|RTTR\|TTRR\|RRTT | 4 |
| `2x2x3`

| full | 2 | TRT\|RTR | 3 |
| `2x2x3`

| full | 2 | TRR\|RTT | 3 |
| `2x4x2`

| full | 4 | TR\|RT\|TT\|RR | 2 |
| `2x3x3`

| partial | 3 | TRR\|RTR\|RRT | 3 |
| `2x2x3`

| partial | 2 | TRR\|RTR | 3 |

Balaam’s design TR\|RT\|TT\|RR should be avoided due to its poor power characteristics. The three period partial replicate design with two sequences TRR\|RTR (a.k.a. extra-reference design) should be avoided because it is biased in the presence of period effects.

For various methods power can be *calculated* based on

- nominal
*α*, coefficient of variation (*CV*), deviation of test from reference (*θ*0), acceptance limits {*θ*1,*θ*2}, sample size (*n*), and design.

For all methods the sample size can be *estimated* based on

- nominal
*α*, coefficient of variation (*CV*), deviation of test from reference (*θ*0), acceptance limits {*θ*1,*θ*2}, target (*i.e.*, desired) power, and design.

Power covers balanced as well as unbalanced sequences in crossover or replicate designs and equal/unequal group sizes in two-group parallel designs. Sample sizes are always rounded up to achieve balanced sequences or equal group sizes.

- Average Bioequivalence (with arbitrary
*fixed*limits). - ABE for Highly Variable Narrow Therapeutic Index Drugs by simulations: U.S. FDA, China CDE.
- Scaled Average Bioequivalence based on simulations.
- Average Bioequivalence with Expanding Limits (ABEL) for Highly Variable Drugs / Drug Products: EMA, WHO and many others.
- Average Bioequivalence with
*fixed*widened limits of 75.00–133.33% if*CV*wR >30%: Gulf Cooperation Council. - Reference-scaled Average Bioequivalence (RSABE) for HVDP(s): U.S. FDA, China CDE.
- Iteratively adjust
*α*to control the type I error in ABEL and RSABE for HVDP(s). - RSABE for NTIDs: U.S. FDA, China CDE.
- Two simultaneous TOST procedures.
- Non-inferiority
*t*-test. - Ratio of two means with normally distributed data on the original scale based on Fieller’s (‘fiducial’) confidence interval.
- ‘Expected’ power in case of uncertain (estimated) variability and/or
uncertain
*θ*0. - Dose-Proportionality using the power model.

- Exact
- Owen’s Q.
- Direct integration of the bivariate non-central
*t*-distribution. - Approximations
- Non-central
*t*-distribution. - ‘Shifted’ central
*t*-distribution.

- Calculate
*CV*from*MSE*or*SE*(and vice versa). - Calculate
*CV*from given confidence interval. - Calculate
*CV*wR from the upper expanded limit of an ABEL study. - Confidence interval of
*CV*. - Pool
*CV*from several studies. - Confidence interval for given
*α*,*CV*, point estimate, sample size, and design. - Calculate
*CV*wT and*CV*wR from a (pooled)*CV*w assuming a ratio of intra-subject variances. *p*-values of the TOST procedure.- Analysis tool for exploration/visualization of the impact of expected
values (
*CV*,*θ*0, reduced sample size due to dropouts) on power of BE decision. - Construct design matrices of incomplete block designs.

*α*0.05, {*θ*1,*θ*2} (0.80, 1.25), target power 0.80. Details of the sample size search (and the regulatory settings in reference-scaled average bioequivalence) are shown in the console.- Note: In all functions values have to be given as ratios, not in percent.

Design `"2x2"`

(TR\|RT), exact method (Owen’s Q).

Design `"2x2x4"`

(TRTR\|RTRT), upper limit of the confidence interval of
*σ*wT/*σ*wR ≤2.5, approximation by the non-central
*t*-distribution, 100,000 simulations.

Point estimate constraints (0.80, 1.25), homoscedasticity
(*CV*wT = *CV*wR), scaling is based on
*CV*wR, design `"2x3x3"`

(TRR\|RTR\|RRT), approximation by
the non-central *t*-distribution, 100,000 simulations.

- EMA, WHO, Health Canada, and many other jurisdictions: Average Bioequivalence with Expanding Limits (ABEL).
- U.S. FDA, China CDE: RSABE.

*θ*0 0.90.1

Regulatory constant `0.760`

, upper cap of scaling at *CV*wR
50%, evaluation by ANOVA.

Regulatory constant `0.760`

, upper cap of scaling at *CV*wR
~57.4%, evaluation by intra-subject contrasts.

Regulatory constant `log(1/0.75)/sqrt(log(0.3^2+1))`

, widened limits
75.00–133.33% if *CV*wR >30%, no upper cap of scaling,
evaluation by ANOVA.

Regulatory constant `log(1.25)/0.25`

, no upper cap of scaling,
evaluation by linearized scaled
ABE (Howe’s approximation).

*θ*0 0.975, regulatory constant `log(1.11111)/0.1`

, implicit
upper cap of scaling at *CV*wR ~21.4%, design `"2x2x4"`

(TRTR\|RTRT), evaluation by linearized scaled
ABE (Howe’s approximation),
upper limit of the confidence interval of
*σ*wT/*σ*wR ≤2.5.

*β*0 (slope) `1+log(0.95)/log(rd)`

where `rd`

is the ratio of
the highest and lowest dose, target power 0.80, crossover design,
details of the sample size search suppressed.

Minimum acceptable power 0.70. *θ*0; design, conditions, and
sample size method depend on defaults of the respective approaches (ABE,
ABEL, RSABE, NTID, HVNTID).

Before running the examples attach the library.

```
library(PowerTOST)
```

If not noted otherwise, the functions’ defaults are employed.

Power for total *CV* 0.35 (35%), group sizes 52 and 49.

```
power.TOST(CV = 0.35, n = c(52, 49), design = "parallel")
# [1] 0.8011186
```

Sample size for assumed within- (intra-) subject *CV* 0.20 (20%).

```
sampleN.TOST(CV = 0.20)
#
# +++++++++++ Equivalence test - TOST +++++++++++
# Sample size estimation
# -----------------------------------------------
# Study design: 2x2 crossover
# log-transformed data (multiplicative model)
#
# alpha = 0.05, target power = 0.8
# BE margins = 0.8 ... 1.25
# True ratio = 0.95, CV = 0.2
#
# Sample size (total)
# n power
# 20 0.834680
```

Sample size for assumed within- (intra-) subject *CV* 0.40 (40%),
*θ*0 0.90, four period full replicate study (any of
TRTR\|RTRT, TRRT\|RTTR, TTRR\|RRTT). Wider acceptance range for
*C*max (South Africa).

```
sampleN.TOST(CV = 0.40, theta0 = 0.90, theta1 = 0.75, design = "2x2x4")
#
# +++++++++++ Equivalence test - TOST +++++++++++
# Sample size estimation
# -----------------------------------------------
# Study design: 2x2x4 (4 period full replicate)
# log-transformed data (multiplicative model)
#
# alpha = 0.05, target power = 0.8
# BE margins = 0.75 ... 1.333333
# True ratio = 0.9, CV = 0.4
#
# Sample size (total)
# n power
# 30 0.822929
```

Sample size for assumed within- (intra-) subject *CV* 0.125 (12.5%),
*θ*0 0.975. Narrower acceptance range for
NTIDs (most
jurisdictions).

```
sampleN.TOST(CV = 0.125, theta0 = 0.975, theta1 = 0.90)
#
# +++++++++++ Equivalence test - TOST +++++++++++
# Sample size estimation
# -----------------------------------------------
# Study design: 2x2 crossover
# log-transformed data (multiplicative model)
#
# alpha = 0.05, target power = 0.8
# BE margins = 0.9 ... 1.111111
# True ratio = 0.975, CV = 0.125
#
# Sample size (total)
# n power
# 32 0.800218
```

Sample size for equivalence of the ratio of two means with normality on
the original scale based on Fieller’s (‘fiducial’) confidence
interval.2 Within- (intra-) subject
*CV*w 0.20 (20%), between- (inter-) subject *CV*b
0.40 (40%).
Note the default *α* 0.025 (95% CI) of this function because it is
intended for studies with clinical endpoints.

```
sampleN.RatioF(CV = 0.20, CVb = 0.40)
#
# +++++++++++ Equivalence test - TOST +++++++++++
# based on Fieller's confidence interval
# Sample size estimation
# -----------------------------------------------
# Study design: 2x2 crossover
# Ratio of means with normality on original scale
# alpha = 0.025, target power = 0.8
# BE margins = 0.8 ... 1.25
# True ratio = 0.95, CVw = 0.2, CVb = 0.4
#
# Sample size
# n power
# 28 0.807774
```

Sample size for assumed within- (intra-) subject *CV* 0.45 (45%),
*θ*0 0.90, three period full replicate study (TRT\|RTR *or*
TRR\|RTT).

```
sampleN.TOST(CV = 0.45, theta0 = 0.90, design = "2x2x3")
#
# +++++++++++ Equivalence test - TOST +++++++++++
# Sample size estimation
# -----------------------------------------------
# Study design: 2x2x3 (3 period full replicate)
# log-transformed data (multiplicative model)
#
# alpha = 0.05, target power = 0.8
# BE margins = 0.8 ... 1.25
# True ratio = 0.9, CV = 0.45
#
# Sample size (total)
# n power
# 124 0.800125
```

Note that the conventional model assumes homoscedasticity (equal
variances of treatments). For heteroscedasticity we can ‘switch off’ all
conditions of one of the methods for reference-scaled
ABE. We assume a
*σ*2-ratio of ⅔ (*i.e.*, the test has a lower variability
than the reference). Only relevant columns of the data frame shown.

```
reg <- reg_const("USER", r_const = NA, CVswitch = Inf,
CVcap = Inf, pe_constr = FALSE)
CV <- CVp2CV(CV = 0.45, ratio = 2/3)
res <- sampleN.scABEL(CV=CV, design = "2x2x3", regulator = reg,
details = FALSE, print = FALSE)
print(res[c(3:4, 8:9)], digits = 5, row.names = FALSE)
# CVwT CVwR Sample size Achieved power
# 0.3987 0.49767 126 0.8052
```

Similar sample size because the pooled *CV*w is still 0.45.

Sample size assuming heteroscedasticity (*CV*w 0.45,
variance-ratio 2.5, *i.e.*, the test treatment has a substantially
higher variability than the reference). TRTR\|RTRT according to the
FDA’s
guidances.3,4,5
Assess additionally which one of the components
(ABE,
*s*wT/*s*wR-ratio) drives the sample size.

```
CV <- signif(CVp2CV(CV = 0.45, ratio = 2.5), 4)
n <- sampleN.HVNTID(CV = CV, details = FALSE)[["Sample size"]]
#
# +++++++++ FDA method for HV NTIDs ++++++++++++
# Sample size estimation
# ----------------------------------------------
# Study design: 2x2x4 (TRTR|RTRT)
# log-transformed data (multiplicative model)
# 1e+05 studies for each step simulated.
#
# alpha = 0.05, target power = 0.8
# CVw(T) = 0.549, CVw(R) = 0.3334
# True ratio = 0.95
# ABE limits = 0.8 ... 1.25
#
# Sample size
# n power
# 50 0.812820
suppressMessages(power.HVNTID(CV = CV, n = n, details = TRUE))
# p(BE) p(BE-ABE) p(BE-sratio)
# 0.81282 0.87052 0.93379
```

The ABE component shows a lower probability to demonstrate BE than the
*s*wT/*s*wR component and hence, drives the sample
size.

Sample size assuming homoscedasticity (*CV*wT =
*CV*wR = 0.45).

```
sampleN.scABEL(CV = 0.45)
#
# +++++++++++ scaled (widened) ABEL +++++++++++
# Sample size estimation
# (simulation based on ANOVA evaluation)
# ---------------------------------------------
# Study design: 2x3x3 (partial replicate)
# log-transformed data (multiplicative model)
# 1e+05 studies for each step simulated.
#
# alpha = 0.05, target power = 0.8
# CVw(T) = 0.45; CVw(R) = 0.45
# True ratio = 0.9
# ABE limits / PE constraint = 0.8 ... 1.25
# EMA regulatory settings
# - CVswitch = 0.3
# - cap on scABEL if CVw(R) > 0.5
# - regulatory constant = 0.76
# - pe constraint applied
#
#
# Sample size search
# n power
# 36 0.7755
# 39 0.8059
```

Iteratively adjust *α* to control the Type I
Error.6 Heteroscedasticity
(*CV*wT 0.30, *CV*wR 0.40, *i.e.*, variance-ratio
~0.58), four period full replicate study (any of TRTR\|RTRT, TRRT\|RTTR,
TTRR\|RRTT), 24 subjects, balanced sequences.

```
scABEL.ad(CV = c(0.30, 0.40), design = "2x2x4", n = 24)
# +++++++++++ scaled (widened) ABEL ++++++++++++
# iteratively adjusted alpha
# (simulations based on ANOVA evaluation)
# ----------------------------------------------
# Study design: 2x2x4 (4 period full replicate)
# log-transformed data (multiplicative model)
# 1,000,000 studies in each iteration simulated.
#
# CVwR 0.4, CVwT 0.3, n(i) 12|12 (N 24)
# Nominal alpha : 0.05
# True ratio : 0.9000
# Regulatory settings : EMA (ABEL)
# Switching CVwR : 0.3
# Regulatory constant : 0.76
# Expanded limits : 0.7462 ... 1.3402
# Upper scaling cap : CVwR > 0.5
# PE constraints : 0.8000 ... 1.2500
# Empiric TIE for alpha 0.0500 : 0.05953
# Power for theta0 0.9000 : 0.805
# Iteratively adjusted alpha : 0.03997
# Empiric TIE for adjusted alpha: 0.05000
# Power for theta0 0.9000 : 0.778
```

With the nominal *α* 0.05 the Type I Error will be inflated (0.05953).
With the adjusted *α* 0.03997 (*i.e.*, a ~92%
CI) the
TIE will be controlled, although with
a slight loss in power (decreases from 0.805 to 0.778).
Consider `sampleN.scABEL.ad(CV = c(0.30, 0.35), design = "2x2x4")`

to
estimate the sample size preserving both the
TIE and target power. In this example
26 subjects would be required.

ABEL
cannot be applied for *AUC* (except for the
WHO). Hence, in many cases
ABE drives the sample size.
Four period full replicate study (any of TRTR\|RTRT, TRRT\|RTTR,
TTRR\|RRTT).

```
PK <- c("Cmax", "AUC")
CV <- c(0.45, 0.30)
# extract sample sizes and power
r1 <- sampleN.scABEL(CV = CV[1], design = "2x2x4",
print = FALSE, details = FALSE)[8:9]
r2 <- sampleN.TOST(CV = CV[2], theta0 = 0.90, design = "2x2x4",
print = FALSE, details = FALSE)[7:8]
n <- as.numeric(c(r1[1], r2[1]))
pwr <- signif(as.numeric(c(r1[2], r2[2])), 5)
# compile results
res <- data.frame(PK = PK, method = c("ABEL", "ABE"),
n = n, power = pwr)
print(res, row.names = FALSE)
# PK method n power
# Cmax ABEL 28 0.81116
# AUC ABE 40 0.80999
```

*AUC* drives the sample size.

For Health Canada it is the opposite (ABE for *C*max and ABEL
for *AUC*).

```
PK <- c("Cmax", "AUC")
CV <- c(0.45, 0.30)
# extract sample sizes and power
r1 <- sampleN.TOST(CV = CV[1], theta0 = 0.90, design = "2x2x4",
print = FALSE, details = FALSE)[7:8]
r2 <- sampleN.scABEL(CV = CV[2], design = "2x2x4",
print = FALSE, details = FALSE)[8:9]
n <- as.numeric(c(r1[1], r2[1]))
pwr <- signif(as.numeric(c(r1[2], r2[2])), 5)
# compile results
res <- data.frame(PK = PK, method = c("ABE", "ABEL"),
n = n, power = pwr)
print(res, row.names = FALSE)
# PK method n power
# Cmax ABE 84 0.80569
# AUC ABEL 34 0.80281
```

Here *C*max drives the sample size.

Sample size assuming homoscedasticity (*CV*wT =
*CV*wR = 0.45) for the widened limits of the Gulf Cooperation
Council.

```
sampleN.scABEL(CV = 0.45, regulator = "GCC", details = FALSE)
#
# +++++++++++ scaled (widened) ABEL +++++++++++
# Sample size estimation
# (simulation based on ANOVA evaluation)
# ---------------------------------------------
# Study design: 2x3x3 (partial replicate)
# log-transformed data (multiplicative model)
# 1e+05 studies for each step simulated.
#
# alpha = 0.05, target power = 0.8
# CVw(T) = 0.45; CVw(R) = 0.45
# True ratio = 0.9
# ABE limits / PE constraint = 0.8 ... 1.25
# Widened limits = 0.75 ... 1.333333
# Regulatory settings: GCC
#
# Sample size
# n power
# 54 0.8123
```

Sample size for a four period full replicate study (any of TRTR\|RTRT,
TRRT\|RTTR, TTRR\|RRTT) assuming heteroscedasticity (*CV*wT
0.40, *CV*wR 0.50, *i.e.*, variance-ratio ~0.67). Details of
the sample size search suppressed.

```
sampleN.RSABE(CV = c(0.40, 0.50), design = "2x2x4", details = FALSE)
#
# ++++++++ Reference scaled ABE crit. +++++++++
# Sample size estimation
# ---------------------------------------------
# Study design: 2x2x4 (4 period full replicate)
# log-transformed data (multiplicative model)
# 1e+05 studies for each step simulated.
#
# alpha = 0.05, target power = 0.8
# CVw(T) = 0.4; CVw(R) = 0.5
# True ratio = 0.9
# ABE limits / PE constraints = 0.8 ... 1.25
# Regulatory settings: FDA
#
# Sample size
# n power
# 20 0.81509
```

Sample size assuming heteroscedasticity (*CV*w 0.10,
variance-ratio 2.5, *i.e.*, the test treatment has a substantially
higher variability than the reference). TRTR\|RTRT according to the
FDA’s guidance.7 Assess additionally which one
of the three components (scaled
ABE, conventional
ABE,
*s*wT/*s*wR-ratio) drives the sample size.

```
CV <- signif(CVp2CV(CV = 0.10, ratio = 2.5), 4)
n <- sampleN.NTID(CV = CV)[["Sample size"]]
#
# +++++++++++ FDA method for NTIDs ++++++++++++
# Sample size estimation
# ---------------------------------------------
# Study design: 2x2x4 (TRTR|RTRT)
# log-transformed data (multiplicative model)
# 1e+05 studies for each step simulated.
#
# alpha = 0.05, target power = 0.8
# CVw(T) = 0.1197, CVw(R) = 0.07551
# True ratio = 0.975
# ABE limits = 0.8 ... 1.25
# Implied scABEL = 0.9236 ... 1.0827
# Regulatory settings: FDA
# - Regulatory const. = 1.053605
# - 'CVcap' = 0.2142
#
# Sample size search
# n power
# 32 0.699120
# 34 0.730910
# 36 0.761440
# 38 0.785910
# 40 0.809580
suppressMessages(power.NTID(CV = CV, n = n, details = TRUE))
# p(BE) p(BE-sABEc) p(BE-ABE) p(BE-sratio)
# 0.80958 0.90966 1.00000 0.87447
```

The *s*wT/*s*wR component shows the lowest
probability to demonstrate BE and
hence, drives the sample size.

Compare that with homoscedasticity (*CV*wT =
*CV*wR = 0.10):

```
CV <- 0.10
n <- sampleN.NTID(CV = CV, details = FALSE)[["Sample size"]]
#
# +++++++++++ FDA method for NTIDs ++++++++++++
# Sample size estimation
# ---------------------------------------------
# Study design: 2x2x4 (TRTR|RTRT)
# log-transformed data (multiplicative model)
# 1e+05 studies for each step simulated.
#
# alpha = 0.05, target power = 0.8
# CVw(T) = 0.1, CVw(R) = 0.1
# True ratio = 0.975
# ABE limits = 0.8 ... 1.25
# Regulatory settings: FDA
#
# Sample size
# n power
# 18 0.841790
suppressMessages(power.NTID(CV = CV, n = n, details = TRUE))
# p(BE) p(BE-sABEc) p(BE-ABE) p(BE-sratio)
# 0.84179 0.85628 1.00000 0.97210
```

Here the scaled ABE component shows the lowest probability to demonstrate BE and drives the sample size – which is much lower than in the previous example.

Comparison with *fixed* narrower limits applicable in other
jurisdictions. Note that a replicate design is not mandatory – reducing
the chance of dropouts and requiring less administrations

```
CV <- 0.10
# extract sample sizes and power
r1 <- sampleN.NTID(CV = CV, print = FALSE, details = FALSE)[8:9]
r2 <- sampleN.TOST(CV = CV, theta0 = 0.975, theta1 = 0.90,
design = "2x2x4", print = FALSE, details = FALSE)[7:8]
r3 <- sampleN.TOST(CV = CV, theta0 = 0.975, theta1 = 0.90,
design = "2x2x3", print = FALSE, details = FALSE)[7:8]
r4 <- sampleN.TOST(CV = CV, theta0 = 0.975, theta1 = 0.90,
print = FALSE, details = FALSE)[7:8]
n <- as.numeric(c(r1[1], r2[1], r3[1], r4[1]))
pwr <- signif(as.numeric(c(r1[2], r2[2], r3[2], r4[2])), 5)
# compile results
res <- data.frame(method = c("FDA/CDE", rep ("fixed narrow", 3)),
design = c(rep("2x2x4", 2), "2x2x3", "2x2x2"),
n = n, power = pwr, a = n * c(4, 4, 3, 2))
names(res)[5] <- "adm. #" # number of administrations
print(res, row.names = FALSE)
# method design n power adm. #
# FDA/CDE 2x2x4 18 0.84179 72
# fixed narrow 2x2x4 12 0.85628 48
# fixed narrow 2x2x3 16 0.81393 48
# fixed narrow 2x2x2 22 0.81702 44
```

*CV* 0.20 (20%), doses 1, 2, and 8 units, assumed slope *β*0
1, target power 0.90.

```
sampleN.dp(CV = 0.20, doses = c(1, 2, 8), beta0 = 1, targetpower = 0.90)
#
# ++++ Dose proportionality study, power model ++++
# Sample size estimation
# -------------------------------------------------
# Study design: crossover (3x3 Latin square)
# alpha = 0.05, target power = 0.9
# Equivalence margins of R(dnm) = 0.8 ... 1.25
# Doses = 1 2 8
# True slope = 1, CV = 0.2
# Slope acceptance range = 0.89269 ... 1.1073
#
# Sample size (total)
# n power
# 18 0.915574
```

Note that the acceptance range of the slope depends on the ratio of the
highest and lowest doses (*i.e.*, it gets tighter for wider dose ranges
and therefore, higher sample sizes will be required).
In an exploratory setting wider equivalence margins {*θ*1,
*θ*2} (0.50, 2.00) were proposed,8
translating in this example to an acceptance range of
`0.66667 ... 1.3333`

and a sample size of only six subjects.

Explore impact of deviations from assumptions (higher *CV*, higher
deviation of *θ*0 from 1, dropouts) on power. Assumed
within-subject *CV* 0.20 (20%), target power 0.90. Plot suppressed.

```
res <- pa.ABE(CV = 0.20, targetpower = 0.90)
print(res, plotit = FALSE)
# Sample size plan ABE
# Design alpha CV theta0 theta1 theta2 Sample size Achieved power
# 2x2 0.05 0.2 0.95 0.8 1.25 26 0.9176333
#
# Power analysis
# CV, theta0 and number of subjects leading to min. acceptable power of ~0.7:
# CV= 0.2729, theta0= 0.9044
# n = 16 (power= 0.7354)
```

If the study starts with 26 subjects (power ~0.92), the *CV* can
increase to ~0.27 **or** *θ*0 decrease to ~0.90 **or** the
sample size decrease to 10 whilst power will still be ≥0.70.
However, this is **not** a substitute for the ‘Sensitivity Analysis’
recommended in ICH-E9,9 since in a real study
a combination of all effects occurs simultaneously. It is up to *you* to
decide on reasonable combinations and analyze their respective power.

Performed on a Xeon E3-1245v3 3.4 GHz, 8 MB cache, 16 GB RAM, R 4.3.3 64 bit on Windows 7.

2×2 crossover design, *CV* 0.17. Sample sizes and achieved power for the
supported methods (the 1st one is the default).

```
method n power time (s)
owenq 14 0.80568 0.00128
mvt 14 0.80569 0.11778
noncentral 14 0.80568 0.00100
shifted 16 0.85230 0.00096
```

The 2nd exact method is substantially slower than the
1st. The approximation based on the noncentral
*t*-distribution is slightly faster but matches the 1st exact
method closely. Though the approximation based on the shifted central
*t*-distribution is the fastest, it *might* estimate a larger than
necessary sample size. Hence, it should be used only for comparative
purposes.

Four period full replicate study (any of TRTR\|RTRT, TRRT\|RTTR,
TTRR\|RRTT), homogenicity (*CV*wT = *CV*wR 0.45).
Sample sizes and achieved power for the supported methods.

```
function method n power time (s)
sampleN.scABEL ‘key’ statistics 28 0.81116 0.1348
sampleN.scABEL.sdsims subject simulations 28 0.81196 2.5377
```

Simulating via the ‘key’ statistics is the method of choice for speed
reasons.
However, subject simulations are recommended **if**

- the partial replicate design (TRR\|RTR\|RRT) is planned
**and** - the special case of heterogenicity
*CV*wT >*CV*wR is expected.

You can install the released version of PowerTOST from CRAN with

```
package <- "PowerTOST"
inst <- package %in% installed.packages()
if (length(package[!inst]) > 0) install.packages(package[!inst])
```

… and the development version from GitHub with

```
# install.packages("remotes")
remotes::install_github("Detlew/PowerTOST")
```

Skips installation from a github remote if the
SHA-1 has not changed since last
install. Use `force = TRUE`

to force installation.

Inspect this information for reproducibility. Of particular importance are the versions of R and the packages used to create this workflow. It is considered good practice to record this information with every analysis. Version 1.5.6 built 2024-03-18 with R 4.3.3.

```
options(width = 66)
sessionInfo()
# R version 4.3.3 (2024-02-29 ucrt)
# Platform: x86_64-w64-mingw32/x64 (64-bit)
# Running under: Windows 10 x64 (build 19045)
#
# Matrix products: default
#
#
# locale:
# [1] LC_COLLATE=German_Germany.utf8
# [2] LC_CTYPE=German_Germany.utf8
# [3] LC_MONETARY=German_Germany.utf8
# [4] LC_NUMERIC=C
# [5] LC_TIME=German_Germany.utf8
#
# time zone: Europe/Berlin
# tzcode source: internal
#
# attached base packages:
# [1] stats graphics grDevices utils datasets methods
# [7] base
#
# other attached packages:
# [1] PowerTOST_1.5-6
#
# loaded via a namespace (and not attached):
# [1] cubature_2.1.0 compiler_4.3.3 fastmap_1.1.1
# [4] cli_3.6.2 tools_4.3.3 htmltools_0.5.7
# [7] rstudioapi_0.15.0 yaml_2.3.8 Rcpp_1.0.12
# [10] mvtnorm_1.2-4 rmarkdown_2.26 knitr_1.45
# [13] xfun_0.42 digest_0.6.35 rlang_1.1.3
# [16] evaluate_0.23
```

1. Tóthfalusi L, Endrényi L.
*Sample Sizes for Designing Bioequivalence Studies for Highly Variable
Drugs.* J Pharm Pharmacol Sci. 2012; 15(1): 73–84.
doi:10.18433/j3z88f. Open
access.
↩
2. Fieller EC. *Some Problems In
Interval Estimation.* J Royal Stat Soc B. 1954; 16(2): 175–85.
JSTOR:2984043. ↩
3. U.S. Food and Drug
Administration, Office of Generic Drugs. *Draft Guidance on Dabigatran
Etexilate Mesylate.* Recommended Jun 2012; Revised Sep 2015, Jul 2017.
Online.
↩
4. U.S. Food and Drug
Administration, Office of Generic Drugs. *Draft Guidance on
Rivaroxaban.* Recommended Sep 2015.
Online.
↩
5. U.S. Food and Drug
Administration, Office of Generic Drugs. *Draft Guidance on Edoxaban
Tosylate.* Recommended May 2017; Revised Mar 2020.
Online.
↩
6. Labes D, Schütz H. *Inflation
of Type I Error in the Evaluation of Scaled Average Bioequivalence, and
a Method for its Control.* Pharm Res. 2016; 33(11): 2805–14.
doi:10.1007/s11095-016-2006-1.
↩
7. U.S. Food and Drug
Administration, Center for Drug Evaluation and Research. *Draft Guidance
for Industry. Bioequivalence Studies with Pharmacokinetic Endpoints for
Drugs Submitted Under an ANDA.* August 2021.
Online. ↩
8. Hummel J, McKendrick S,
Brindley C, French R. *Exploratory assessment of dose proportionality:
review of current approaches and proposal for a practical criterion.*
Pharm. Stat. 2009; 8(1): 38–49.
doi:10.1002/pst.326.
↩
9. International Conference on
Harmonisation of Technical Requirements for Registration of
Pharmaceuticals for Human Use. *ICH Harmonised Tripartite Guideline. E9.
Statistical Principles for Clinical Trials.* 5 February 1998.
Online.
↩

**Any scripts or data that you put into this service are public.**

Embedding an R snippet on your website

Add the following code to your website.

For more information on customizing the embed code, read Embedding Snippets.