α-adjustments? [Regulatives / Guidelines]

posted by Helmut Homepage – Vienna, Austria, 2025-11-04 12:15 (224 d 07:25 ago) – Posting: # 24477
Views: 2,036

Hi Mikkabel,

❝ In our study, we intend to apply a hierarchical testing approach, considering that one of the formulations has shown more promising in-vitro results.

❝ Specifically, our plan is to first assess BE between Formulation 1 and the comparator. If BE is demonstrated, we would then proceed to assess Formulation 2 versus the comparator.

❝ Could you please confirm whether, under this hierarchical testing approach, an alpha adjustment is required, or if it can be omitted in accordance with the statement from the M13A Q&A:

❝ “Formally, there is no need for multiplicity correction for each individual test, but the type I error (consumer risk) is still controlled.”

You are right that in hierarchical testing you specify the order of tests in the SAP. Then the tests are performed with unadjusted α.
In your case test 1 = Formulation 1 vs comparator → test 2 = Formulation 2 vs comparator. Now it gets a bit tricky. In hierarchical testing:
  1. If you show BE with test 1, you continue to test 2 (where you may show BE or not).
  2. If you don’t show BE with test 1, you stop, i.e., are not allowed to perform the confirmatory test 2.
    You are only allowed to report the CI of test 2. Even if it would be within the limits, bad luck.
The latter case would be nasty.

Which alternatives do you have?
The influence of α on the sample size is overrated by many. I’m not convinced that the risk of failure in hierarchical testing is really worth the efforts:

library(PowerTOST)
CV      <- 0.20
theta0  <- 0.95
target  <- 0.80
alpha   <- 0.05
k       <- 2    # number of tests
alphas  <- alpha / (1:k)
example <- data.frame(alpha = alphas, n = NA_integer_, penalty = "")
for (j in seq_along(alphas)) {
  example[j, 2] <- sampleN.TOST(alpha = alphas[j], CV = CV, theta0 = theta0,
                                targetpower = target, design = "2x2x2",
                                print = FALSE)[["Sample size"]]
  if (j > 1) {
    example[j, 3] <- sprintf("%+.1f%%",
                             100 * ((example$n[j] / example$n[1]) - 1))
  }
}
example$alpha <- signif(example$alpha, 4) # cosmetics
print(example, row.names = FALSE)

 alpha  n penalty
 0.050 20     
 0.025 24  +20.0%



PS: Don’t perform a pooled ANOVA but evaluate the tests according to the ‘Two at a Time’ approach. Whichever α you prefer, in sample size estimation by the [image]-package PowerTOST specify design = "2x2x2" in the function sampleN.TOST().
Don’t specify design = "3x6x3" (Williams’ design) or design = "3x3" (Latin Squares).

Dif-tor heh smusma 🖖🏼 Довге життя Україна! [image]
Helmut Schütz
[image]

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

Complete thread:

UA Flag
Activity
 Admin contact
23,654 posts in 4,992 threads, 1,571 registered users;
117 visitors (0 registered, 117 guests [including 9 identified bots]).
Forum time: 20:40 CEST (Europe/Vienna)

Always listen to experts.
They’ll tell you what can’t be done and why.
Then do it.    Robert A. Heinlein

The Bioequivalence and Bioavailability Forum is hosted by
BEBAC Ing. Helmut Schütz
HTML5