BE-proff
●    

2016-12-14 09:56
(2662 d 01:24 ago)

Posting: # 16843
Views: 5,782
 

 Sample size calculation [RSABE / ABEL]

Hi All,

Let's say I want to calculate sample size for a BE-study using the following data:

CVintra of Cmax= 39.8%
Power= at least 80%
GMR = 1.15

I want to utilize 2x2x4 design with reference scaling and PowerTOST gives me:

library(PowerTOST)
sampleN.scABEL.ad(CV=0.398, theta0=1.15, targetpower=0.80, design="2x2x4")

+++++++++++ scaled (widened) ABEL +++++++++++
            Sample size estimation
        for iteratively adjusted alpha
---------------------------------------------
Study design: 2x2x4 (RTRT|TRTR)
log-transformed data (multiplicative model)
1,000,000 studies in each iteration simulated.

Expected CVwR 0.398
Nominal alpha      : 0.05
True ratio         : 1.1500
Target power       : 0.8
Regulatory settings: EMA (ABEL)
Switching CVwR     : 0.3
 Regulatory constant: 0.76
Expanded limits    : 0.7472...1.3383
Upper scaling cap  : CVwR > 0.5
PE constraints     : 0.8000 ... 1.2500
n  48,   adj. alpha: 0.04444 (power 0.8100), TIE: 0.05000


Is it correct that:

- at least 48 subjects to be randomized
- CI for Cmax is 0.74 - 1.34
- CIs for AUCs are 0.80-1.25
Helmut
★★★
avatar
Homepage
Vienna, Austria,
2016-12-14 17:24
(2661 d 17:56 ago)

@ BE-proff
Posting: # 16845
Views: 5,287
 

 Sample size estimation for iteratively adjusted α

Hi BE-proff,

library(PowerTOST)

sampleN.scABEL.ad(CV=0.398, theta0=1.15, targetpower=0.80, design="2x2x4")


THX for being concerned about the consumer risk! With a CVwR of 39.8% we can expect a slight inflation of the Type I Error (TIE).

❝ Is it correct that:

❝ - at least 48 subjects to be randomized


Yes.

❝ - CI for Cmax is 0.74 - 1.34


No. For Cmax the expanded limits are 0.7472...1.3383. The confidence interval has to lie entirely within these limits and additionally the PE must lie within 0.8–1.25.
Note that you have to use an adjusted α. Only if the CVwR in the study would be exactly as assumed and there will be no dropouts, you could used the adjusted α from the sample size estimation above and calculate the 100(1–2×0.04444)=91.112% CI.

If you observe a different CVwR in the study (likely) and there were dropouts you have to check whether the original iteratively adjusted α still suits and – if not – get a new one based on the study’s data. Examples for one dropout in the first sequence and two in the other:
  • CVwR 38% (lower than expected):

    library(PowerTOST)
    scABEL.ad(CV=0.38, theta0=1.15, design="2x2x4", n=c(23, 22), alpha.pre=0.0444)

    +++++++++++ scaled (widened) ABEL +++++++++++
             iteratively adjusted alpha
    ---------------------------------------------
    Study design: 2x2x4 (RTRT|TRTR)
    log-transformed data (multiplicative model)
    1,000,000 studies in each iteration simulated.

    CVwR 0.38, n(i) 23|22 (N 45)
    Nominal alpha                 : 0.05, pre-specified alpha 0.0444
    True ratio                    : 1.1500
    Regulatory settings           : EMA (ABEL)
    Empiric TIE for alpha 0.0444  : 0.05485
    Power for theta0 1.1500       : 0.761
    Iteratively adjusted alpha    : 0.03910
    Empiric TIE for adjusted alpha: 0.05000
    Power for theta0 1.1500       : 0.745


    Since the CVwR is closer to the critical range (maximum TIE at CVwR 30%) you have to use the adjusted α 0.03910 (which is lower than the planned one). Hence you loose some power. Assess ABEL based on the 100(1–2×0.03910)=92.18% CI.

  • CVwR 42% (higher than expected):

    scABEL.ad(CV=0.42, theta0=1.15, design="2x2x4", n=c(23, 22), alpha.pre=0.0444)

    +++++++++++ scaled (widened) ABEL +++++++++++
             iteratively adjusted alpha
    ---------------------------------------------
    Study design: 2x2x4 (RTRT|TRTR)
    log-transformed data (multiplicative model)
    1,000,000 studies in each iteration simulated.

    CVwR 0.42, n(i) 23|22 (N 45)
    Nominal alpha                 : 0.05, pre-specified alpha 0.0444
    True ratio                    : 1.1500
    Regulatory settings           : EMA (ABEL)
    Empiric TIE for alpha 0.0444  : 0.04491
    Power for theta0 1.1500       : 0.811
    TIE not > nominal alpha; the chosen pre-specified alpha is justified.


    Since no inflation of the TIE is expected with α 0.0444, drop it from the arguments (i.e., try with the nominal α 0.05 only).

    scABEL.ad(CV=0.42, theta0=1.15, design="2x2x4", n=c(23, 22))

    +++++++++++ scaled (widened) ABEL +++++++++++
             iteratively adjusted alpha
    ---------------------------------------------
    Study design: 2x2x4 (RTRT|TRTR)
    log-transformed data (multiplicative model)
    1,000,000 studies in each iteration simulated.

    CVwR 0.42, n(i) 23|22 (N 45)
    Nominal alpha                 : 0.05
    True ratio                    : 1.1500
    Regulatory settings           : EMA (ABEL)
    Empiric TIE for alpha 0.0500  : 0.04803
    Power for theta0 1.1500       : 0.823
    TIE not > nominal alpha; no adjustment of alpha is required.


    Perfect. Use the nominal α 0.05 and assess ABEL based on the 100(1–2×0.05)=90% CI. You gain power.

❝ - CIs for AUCs are 0.80-1.25


The acceptance limits.

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
BE-proff
●    

2016-12-14 20:43
(2661 d 14:37 ago)

@ Helmut
Posting: # 16846
Views: 4,993
 

 Sample size estimation for iteratively adjusted α

Hi Helmut,

Many thanks for your very detailed explanation! :ok:
It really helps!
BE-proff
●    

2016-12-20 22:47
(2655 d 12:33 ago)

@ Helmut
Posting: # 16868
Views: 4,834
 

 Sample size estimation for iteratively adjusted α

Hi Helmut,

Which R script should be used to assess BE in 92.18% CI?:confused:

Afaik, "classic" BE is analysed in 90% CI. Correct? ;-)
d_labes
★★★

Berlin, Germany,
2016-12-21 12:15
(2654 d 23:05 ago)

@ BE-proff
Posting: # 16870
Views: 4,821
 

 (1-2*alpha) CI

Dear BE-prof!

❝ Which R script should be used to assess BE in 92.18% CI?:confused:

Which script do you use until now?
A serious script should IMHO not have a hard coded alpha=0.05 or the other way round a hard coded 90% CI. But rather allow the specification of the alpha to use.

Have a look into the function CI.BE() of the package PowerTOST.
For a 92.18% CI specify alpha=(1-0.9218)/2=0.0391, give the point estimate, CV and number of subjects in your study and voila you get the 1-2*alpha CI.
Example:
CI.BE(alpha=(1-0.9218)/2, pe=1.1557, CV=0.3567, n=24, design="2x2")
    lower     upper
0.9609407 1.3899323

Now compare this to the (widened) acceptance range to judge BE or not BE.

❝ Afaik, "classic" BE is analysed in 90% CI. Correct? ;-)

Correct. alpha=0.05.

Regards,

Detlew
Helmut
★★★
avatar
Homepage
Vienna, Austria,
2016-12-21 19:09
(2654 d 16:11 ago)

@ d_labes
Posting: # 16871
Views: 4,960
 

 Script kiddy

Hi Detlew!

I guess BE-proff was referring to this post.

This one should do it all:

library(PowerTOST)
regulator <- "EMA" # "EMA" or "HC"
CV        <- 0.25
theta0    <- 1.15
design    <- "2x2x4"
n         <- c(23, 22)
alpha.pre <- 0.0444
BE.H0 <- CI.H0 <- PE.H0 <- TRUE
res       <- scABEL.ad(CV=CV, theta0=theta0, design=design,
                       n=n, alpha.pre=alpha.pre, print=FALSE)
reg       <- reg_const(regulator=regulator)
AR        <- scABEL(CV=CV, regulator=regulator)
if (is.na(res$alpha.adj)) {
  CI  <- CI.BE(alpha=res$alpha, pe=theta0, CV=CV, n=n, design=design)
} else {
  CI  <- CI.BE(alpha=res$alpha.adj, pe=theta0, CV=CV, n=n, design=design)
}
if (CI[["lower"]] > AR[["lower"]] & CI[["upper"]] < AR[["upper"]]) CI.H0 <- FALSE
if (theta0 > 0.8 & theta0 < 1.25) PE.H0 <- FALSE
if (sum(PE.H0, PE.H0) == 0) BE.H0 <- FALSE
txt <- paste("\nDesign             :", design,
    "\nSubjects / sequence:", paste0(n, collapse=" / "),
    sprintf("\nCVwR               : %.2f%%", 100*CV))
if (CV > 0.3) {
  txt <- paste(txt, "(reference-scaling applicable)",
         "\nRegulatory settings:", regulator,
         sprintf("\nCVswitch           : %.2f%%", 100*reg$CVswitch),
         sprintf("\nCVcap              : %.2f%%", 100*reg$CVcap),
         sprintf("\nRegulatory constant: %.3f", reg$r_const))
}
txt <- paste(txt, sprintf("\nNominal \u03B1          : %.4f", res$alpha),
       sprintf("(TIE %.4f)", res$TIE.unadj))
if (!is.na(res$alpha.adj)) {
  txt <- paste(txt, sprintf("\nIteratively adj. \u03B1 : %.4f", res$alpha.adj),
              sprintf("(TIE %.4f)", res$TIE.adj))
}
  txt <- paste(txt, sprintf("\nPoint estimate     : %6.2f%%", 100*theta0),
         sprintf("\nAcceptance range   : %6.2f %s %6.2f%%",
                                    100*AR[["lower"]], "\u2013",
                                    100*AR[["upper"]]))
if (AR[["lower"]] < 0.8) {
  txt <- paste(txt, "(expanded = \'ABEL\')")
} else
  txt <- paste(txt, "(conventional)")
}
if (is.na(res$alpha.adj)) {
  txt <- paste(txt, sprintf("\n%5.2f%% CI          :", 100*(1-2*res$alpha)))
} else {
  txt <- paste(txt, sprintf("\n%5.2f%% CI          :", 100*(1-2*res$alpha.adj)))
}
txt <- paste(txt, sprintf("%6.2f %s %6.2f%%",
                          100*CI[["lower"]], "\u2013",
                          100*CI[["upper"]]),
    "\nAssessment:")
if (!CI.H0) {
  txt <- paste(txt, "\n  Confidence interval entirely within acceptance range.")
} else {
  txt <- paste(txt, "\n  Confidence interval not entirely within acceptance range.")
}
if (CV < 0.3) {
  if (!CI.H0) {
    txt <- paste(txt, "\n  Passed (ABE shown).\n")
  } else {
    txt <- paste(txt, "\n  Failed (ABE not shown).\n")
  }
} else {
  if (!PE.H0) {
    txt <- paste(txt, "\n  Point estimate within 80.00 \u2013 125.00%.")
  } else {
    txt <- paste(txt, "\n  Point estimate not within 80.00 \u2013 125.00%.")
  }
  if (sum(CI.H0, BE.H0) == 0) {
    txt <- paste(txt, "\n  Passed both criteria (ABEL shown).\n")
  } else {
    txt <- paste(txt, "\n  Failed at least one criterion (ABEL not shown).\n")
  }
}
cat(txt)


Voilà!

Design             : 2x2x4
Subjects / sequence: 23 / 22
CVwR               : 38.00% (reference-scaling applicable)
Regulatory settings: EMA
CVswitch           : 30.00%
CVcap              : 50.00%
Regulatory constant: 0.760
Nominal α          : 0.0500 (TIE 0.0549)
Iteratively adj. α : 0.0391 (TIE 0.0500)
Point estimate     : 115.00%
Acceptance range   :  75.65 – 132.20% (expanded = 'ABEL')
92.18% CI          : 104.35 – 126.74%
Assessment:
  Confidence interval entirely within acceptance range.
  Point estimate within 80.00 – 125.00%.
  Passed both criteria (ABEL shown).


Higher CVwR 41% when the inflation of the Type I Error will hit no more:

Design             : 2x2x4
Subjects / sequence: 23 / 22
CVwR               : 41.00% (reference-scaling applicable)
Regulatory settings: EMA
CVswitch           : 30.00%
CVcap              : 50.00%
Regulatory constant: 0.760
Nominal α          : 0.0500 (TIE 0.0478)
Point estimate     : 115.00%
Acceptance range   :  74.11 – 134.93% (expanded = 'ABEL')
90.00% CI          : 104.33 – 126.76%
Assessment:
  Confidence interval entirely within acceptance range.
  Point estimate within 80.00 – 125.00%.
  Passed both criteria (ABEL shown).


CVwR 28%; no reference-scaling but still some adjustment required:

Design             : 2x2x4
Subjects / sequence: 23 / 22
CVwR               : 28.00%
Nominal α          : 0.0500 (TIE 0.0547)
Iteratively adj. α : 0.0404 (TIE 0.0500)
Point estimate     : 115.00%
Acceptance range   :  80.00 – 125.00% (conventional)
91.93% CI          : 107.00 – 123.60%
Assessment:
  Confidence interval entirely within acceptance range.
  Passed (ABE shown).


Even lower CVwR 27%:

Design             : 2x2x4
Subjects / sequence: 23 / 22
CVwR               : 27.00%
Nominal α          : 0.0500 (TIE 0.0494)
Point estimate     : 115.00%
Acceptance range   :  80.00 – 125.00% (conventional)
90.00% CI          : 107.71 – 122.79%
Assessment:
  Confidence interval entirely within acceptance range.
  Passed (ABE shown).


CVwR 80% (!) and point estimate 124% (‼) for Health Canada’s conditions. Amazing.

Design             : 2x2x4
Subjects / sequence: 23 / 22
CVwR               : 80.00% (reference-scaling applicable)
Regulatory settings: HC
CVswitch           : 30.00%
CVcap              : 57.38%
Regulatory constant: 0.760
Nominal α          : 0.0500 (TIE 0.0440)
Point estimate     : 124.00%
Acceptance range   :  66.67 – 150.00% (expanded = 'ABEL')
90.00% CI          : 104.22 – 147.53%
Assessment:
  Confidence interval entirely within acceptance range.
  Point estimate within 80.00 – 125.00%.
  Passed both criteria (ABEL shown).

No way for the EMA, of course.

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
UA Flag
Activity
 Admin contact
22,957 posts in 4,819 threads, 1,636 registered users;
103 visitors (0 registered, 103 guests [including 7 identified bots]).
Forum time: 11:21 CET (Europe/Vienna)

With four parameters I can fit an elephant,
and with five I can make him wiggle his trunk.    John von Neumann

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