pharm07
☆

India,
2022-05-03 13:23
(280 d 11:05 ago)

Posting: # 22953
Views: 1,218

## Estimation of sample size for NIT using ISCV By R [Power / Sample Size]

Hi,

Can anyone guide, how to calculate sample size for NTI category drug using R software? I have primary information as ISCV.

Edit: Category changed; see also this post #1[Helmut]

Regards,
pharm07
dshah
★★

India/United Kingdom,
2022-05-03 15:04
(280 d 09:23 ago)

@ pharm07
Posting: # 22954
Views: 1,232

## Estimation of sample size for NTI using ISCV By R

Hello Pharm07!
Kindly use PowerTOST and also search for earlier post.
Regards,
Dshah
Helmut
★★★

Vienna, Austria,
2022-05-03 16:38
(280 d 07:49 ago)

@ pharm07
Posting: # 22955
Views: 1,047

## PowerTOST

Hi pharm07,

as suggested by Dshah, assuming a T/R-ratio of 0.975 and a CV of 0.1:

library(PowerTOST) # attach the library theta0 <- 0.975    # assumed T/R-ratio CV     <- 0.10     # intra-subject CV (assuming CVwT = CVwR) target <- 0.80     # target power design <- "2x2x4"  # 4-period full replicate mandatory for the FDA # EMA and most others: sampleN.TOST(CV = CV, theta0 = theta0, theta1 = 0.90,              design = design, targetpower = target) +++++++++++ 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.9 ... 1.111111 True ratio = 0.975,  CV = 0.1 Sample size (total)  n     power 12   0.856278 # FDA and China CDE: sampleN.NTID(CV = CV, theta0 = theta0, design = design,              targetpower = target) +++++++++++ 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 Implied scABEL = 0.9002 ... 1.1108 Regulatory settings: FDA - Regulatory const. = 1.053605 - 'CVcap'           = 0.2142 Sample size search  n     power 14   0.717480 16   0.788690 18   0.841790 # Beware of unequival variances! CV.bad  <- signif(CVp2CV(CV, ratio = 1.5), 4)     # T worse than R sampleN.NTID(CV = CV.bad, theta0 = theta0, design = design,              targetpower = target) +++++++++++ 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.1096, CVw(R) = 0.0894 True ratio     = 0.975 ABE limits     = 0.8 ... 1.25 Implied scABEL = 0.9103 ... 1.0986 Regulatory settings: FDA - Regulatory const. = 1.053605 - 'CVcap'           = 0.2142 Sample size search  n     power 20   0.758770 22   0.805070 CV.good <- signif(CVp2CV(CV, ratio = 1 / 1.5), 4) # T better than R sampleN.NTID(CV = CV.good, theta0 = theta0, design = design,              targetpower = target) +++++++++++ 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.0894, CVw(R) = 0.1096 True ratio     = 0.975 ABE limits     = 0.8 ... 1.25 Implied scABEL = 0.8912 ... 1.1220 Regulatory settings: FDA - Regulatory const. = 1.053605 - 'CVcap'           = 0.2142 Sample size search  n     power 12   0.735990 14   0.814770

More details and examples in this article.

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

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

India,
2022-05-04 10:08
(279 d 14:19 ago)

@ Helmut
Posting: # 22958
Views: 1,087

## PowerTOST

HI Helmut,

Thanks for the information.

After installing package from local file, (https://cloud.r-project.org/)

response in R console : > utils:::menuInstallLocal()
package ‘PowerTOST’ successfully unpacked and MD5 sums checked

Even after this step i am not able to attach power tost to the library.

After this step i can able to do further.

[Using R 4.2.0]
Please suggest.

Regards,
pharm07
Helmut
★★★

Vienna, Austria,
2022-05-04 12:33
(279 d 11:54 ago)

@ pharm07
Posting: # 22959
Views: 1,023

## PowerTOST

Hi pharm07,

❝ response in R console : > utils:::menuInstallLocal()

package ‘PowerTOST’ successfully unpacked and MD5 sums checked

 
OK, so you ended up as shown there (example for Power2Stage).

❝ Even after this step i am not able to attach power tost to the library.

Package library. Not sure what you mean, can you explain?

❝ After this step i can able to do further.

OK.

❝ Please suggest.

Copy one of the examples of my previous post and paste it to the console. If you want to go for the FDA’s method, just a one-liner because theta0 = 0.975, design = "2x2x4", and targetpower = 0.8 are defaults of the function. Hence, you have to specify only the CV:

sampleN.NTID(CV = 0.1)

Should give:

+++++++++++ 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 Implied scABEL = 0.9002 ... 1.1108 Regulatory settings: FDA - Regulatory const. = 1.053605 - 'CVcap'           = 0.2142 Sample size search  n     power 14   0.717480 16   0.788690 18   0.841790

Since this is a four-period design, you may want to increase the sample size to compensate for a potential loss in power due to dropouts.

balance <- function(n, n.seq) {   # Round up to obtain balanced sequences   return(as.integer(n.seq * (n %/% n.seq + as.logical(n %% n.seq)))) } nadj <- function(n, do.rate, n.seq) {   # Round up to compensate for anticipated dropout-rate   return(as.integer(balance(n / (1 - do.rate), n.seq))) } CV      <- 0.1                 # Assumed CV do.rate <- 0.15                # Anticipated dropout-rate 15% n       <- sampleN.NTID(CV = CV, print = FALSE, details = FALSE)[["Sample size"]] dosed   <- nadj(n, do.rate, 2) # Adjust the sample size df      <- data.frame(dosed = dosed, eligible = dosed:(n - 2)) for (j in 1:nrow(df)) {   df$dropouts[j] <- sprintf("%.1f%%", 100 * (1 - df$eligible[j] / df$dosed[j])) df$power[j]    <- suppressMessages( # We know that some are unbalanced                       power.NTID(CV = CV, n = dfeligible[j])) } print(df, row.names = FALSE) dosed eligible dropouts power 22 22 0.0% 0.91017 22 21 4.5% 0.89602 22 20 9.1% 0.88031 22 19 13.6% 0.86072 22 18 18.2% 0.84179 22 17 22.7% 0.81658 22 16 27.3% 0.78869 If you are confused, see there. Dif-tor heh smusma 🖖🏼 Довге життя Україна! Helmut Schütz The quality of responses received is directly proportional to the quality of the question asked. 🚮 Science Quotes pharm07 ☆ India, 2022-05-04 16:54 (279 d 07:33 ago) @ Helmut Posting: # 22961 Views: 972 ## PowerTOST Hi, Package library. Not sure what you mean, can you explain? I meant i was not able to execute library(PowerTOST) command. Now, i am able to estimate sample size..! Your guidance is much more appreciable. Thanks.. Regards, pharm07 pharm07 ☆ India, 2022-05-11 07:30 (272 d 16:57 ago) @ pharm07 Posting: # 22968 Views: 848 ## PowerTOST Hi Helmut, Let me understand again by looking following framework, Following data is available with me, Target power : eg, 0.8, .85, 0.9, CwT,CwR,sigWT,SigWR,theta0,theta1,theta2. i want to estimate sample size for low to moderate NTID. Also to estimate sample size by assuming 30 & 40 % dropout rate. I have gone through the examples. Sometimes error comes as its beyond implied limit. Heteroscedasticity can be challenging for me as T>R. Can you check and verify if i am using correct programming. This Example. Regards, pharm07 Helmut ★★★ Vienna, Austria, 2022-05-11 15:19 (272 d 09:08 ago) @ pharm07 Posting: # 22970 Views: 820 ## PowerTOST: sampleN.NTID() Hi pharm07, ❝ Let me understand again by looking following framework, ❝ Following data is available with me, ❝ Target power : eg, 0.8, .85, 0.9, CwT,CwR,sigWT,SigWR,theta0,theta1,theta2. Although you could give values of theta1 and theta2, for the FDA keep the defaults of 0.8 and 1.25 (i.e., don’t specify anything): Additionally to passing RSABE and the variance-comparison you must pass conventional ABE. ❝ i want to estimate sample size for low to moderate NTID. More examples are given there. ❝ Also to estimate sample size by assuming 30 & 40 % dropout rate. See the two supportive functions in the section about dropouts in the named article. ❝ I have gone through the examples. Sometimes error comes as its beyond implied limit. That’s possible if you specify a low or high theta0. Background: \eqalign{s_0&=0.1\tag{1}\\ \theta_\text{s}&=\frac{\log_e(1/0.9)}{s_0}\approx1.053605\ldots\\ \left\{\theta_{\text{s}_1},\theta_{\text{s}_2}\right\}&=\exp(\mp\theta_\text{s}\cdot s_\text{wR}), } where $$\small{s_0}$$ is the regulatory switching condition, $$\small{\theta_\text{s}}$$ the regulatory constant, and finally $$\small{\left\{\theta_{\text{s}_1},\theta_{\text{s}_2}\right\}}$$ are the implied limits. Say, you assume $$\small{CV_\text{wR}=0.1}$$. Since $$s_\text{wR}=\sqrt{\log_e(CV_\text{wR}^2+1)}\tag{2}$$ and by using $$\small{(1)}$$ you end up with $$\left\{\theta_{\text{s}_1},\theta_{\text{s}_2}\right\}=\left\{0.9002,1.1108\right\}.\tag{3}$$ In other words, for this $$\small{CV_\text{wR}}$$ any theta0 outside these limits cannot work. That’s by design: library(PowerTOST) sampleN.NTID(CV = 0.1, theta0 = 0.90) +++++++++++ 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.9 ABE limits = 0.8 ... 1.25 Implied scABEL = 0.9002 ... 1.1108 Regulatory settings: FDA - Regulatory const. = 1.053605 - 'CVcap' = 0.2142 Error: theta0 outside implied scABE limits! No sample size estimable. Would you want to estimate a sample size for conventional ABE with a T/R-ratio outside 80–125%? Try: sampleN.TOST(CV = 0.1, theta0 = 0.7999) # any (!) CV, targetpower, design For NTIDs the FDA requires stricter batch-release spec’s (±5% instead of the common ±10%). There­fore, theta0 = 0.975 is the default of this function. I would not go below 0.95 unless the CV is relatively high (no scaling if $$\small{CV_\text{wR}\geq0.2142}$$). ❝ Heteroscedasticity can be challenging for me as T>R. Yes, you are not alone. ❝ Can you check and verify if i am using correct programming. I can’t till you post an example which you consider problematic. Dif-tor heh smusma 🖖🏼 Довге життя Україна! Helmut Schütz The quality of responses received is directly proportional to the quality of the question asked. 🚮 Science Quotes pharm07 ☆ India, 2022-05-18 07:18 (265 d 17:09 ago) @ Helmut Posting: # 22995 Views: 770 ## PowerTOST: sampleN.NTID() Hi Helmut, ❝ Although you could give values of theta1 and theta2, for the FDA keep the defaults of 0.8 and 1.25 (i.e., don’t specify anything): Additionally to passing RSABE and the variance-comparison you must pass conventional ABE. OK. Noted. ❝ More examples are given there. OK. I referred these examples. ❝ See the two supportive functions in the section about dropouts in the named article. Ok, I have pasted one example which i seems to be work upon. ❝ That’s possible if you specify a low or high theta0. OK. ❝ Yes, you are not alone. ❝ I can’t till you post an example which you consider problematic. Please see below example, Note : CV is not in scalar form.' sampleN.NTID(CV = c(0.045,0.07), theta0 = 0.95, targetpower = 0.9) +++++++++++ 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.9 CVw(T) = 0.045, CVw(R) = 0.07 True ratio = 0.95 ABE limits = 0.8 ... 1.25 Implied scABEL = 0.9290 ... 1.0764 Regulatory settings: FDA - Regulatory const. = 1.053605 - 'CVcap' = 0.2142 Sample size search n power 92 0.875810 94 0.882090 96 0.888810 98 0.894060 100 0.898510 102 0.903540 # with 30% DO rate, # as CV was specified as Vector, # is following steps right? balance <- function(n, n.seq) { # Round up to obtain balanced sequences return(as.integer(n.seq * (n %/% n.seq + as.logical(n %% n.seq)))) } nadj <- function(n, do.rate, n.seq) { # Round up to compensate for anticipated dropout-rate return(as.integer(balance(n / (1 - do.rate), n.seq))) } CV <- 0.045 # Assumed CV # how to specify vector CV here? do.rate <- 0.30 # Anticipated dropout-rate 30% n <- sampleN.NTID(CV = CV, print = FALSE, details = FALSE)[["Sample size"]] dosed <- nadj(n, do.rate, 2) # Adjust the sample size df <- data.frame(dosed = dosed, eligible = dosed:(n - 2)) for (j in 1:nrow(df)) { dfdropouts[j] <- sprintf("%.1f%%", 100 * (1 - df$eligible[j] / df$dosed[j]))   df$power[j] <- suppressMessages( # We know that some are unbalanced power.NTID(CV = CV, n = df$eligible[j])) } print(df, row.names = FALSE) dosed eligible dropouts   power    58       58     0.0% 0.92040    58       57     1.7% 0.91575    58       56     3.4% 0.91254    58       55     5.2% 0.90722    58       54     6.9% 0.90364    58       53     8.6% 0.89761    58       52    10.3% 0.89257    58       51    12.1% 0.88767    58       50    13.8% 0.88215    58       49    15.5% 0.87672    58       48    17.2% 0.86952    58       47    19.0% 0.86376    58       46    20.7% 0.85690    58       45    22.4% 0.84922    58       44    24.1% 0.84310    58       43    25.9% 0.83486    58       42    27.6% 0.82810    58       41    29.3% 0.81915    58       40    31.0% 0.81109    58       39    32.8% 0.80105    58       38    34.5% 0.79410

Kindly guide me with this example, i want to check whether i am making a mistake or not.

Regards,
pharm07
Helmut
★★★

Vienna, Austria,
2022-05-18 16:30
(265 d 07:57 ago)

@ pharm07
Posting: # 23002
Views: 733

## sampleN.NTID(): Example

Hi pharm07,

❝ Kindly guide me with this example, i want to check whether i am making a mistake or not.

In your second script you forgot to state theta0 = 0.95. Hence, the default theta = 0.975 was employed.

library(PowerTOST) balance <- function(n, n.seq) {   # Round up to obtain balanced sequences   return(as.integer(n.seq * (n %/% n.seq + as.logical(n %% n.seq)))) } nadj <- function(n, do.rate, n.seq) {   # Round up to compensate for anticipated dropout-rate   return(as.integer(balance(n / (1 - do.rate), n.seq))) } CV      <- c(0.045, 0.07)      # First element CVwT, second CVwR do.rate <- 0.30                # Anticipated dropout-rate 30% n       <- sampleN.NTID(CV = CV, theta0 = 0.95, targetpower = 0.90,                         print = FALSE, details = FALSE)[["Sample size"]] dosed   <- nadj(n, do.rate, 2) # Adjust the sample size df      <- data.frame(dosed = dosed, eligible = dosed:(n - 2)) for (j in 1:nrow(df)) {   df$dropouts[j] <- sprintf("%.1f%%", 100 * (1 - df$eligible[j] / df$dosed[j])) df$power[j]    <- suppressMessages(                       power.NTID(CV = CV, theta0 = 0.95, n = df\$eligible[j])) } print(df, row.names = FALSE)  dosed eligible dropouts   power    146      146     0.0% 0.97046    146      145     0.7% 0.96815    146      144     1.4% 0.96887    146      143     2.1% 0.96730    146      142     2.7% 0.96592    146      141     3.4% 0.96512    146      140     4.1% 0.96470    146      139     4.8% 0.96316    146      138     5.5% 0.96322    146      137     6.2% 0.96172    146      136     6.8% 0.96048    146      135     7.5% 0.95969    146      134     8.2% 0.95892    146      133     8.9% 0.95649    146      132     9.6% 0.95497    146      131    10.3% 0.95505    146      130    11.0% 0.95347    146      129    11.6% 0.95245    146      128    12.3% 0.95101    146      127    13.0% 0.94969    146      126    13.7% 0.94851    146      125    14.4% 0.94723    146      124    15.1% 0.94594    146      123    15.8% 0.94386    146      122    16.4% 0.94258    146      121    17.1% 0.94121    146      120    17.8% 0.94039    146      119    18.5% 0.93931    146      118    19.2% 0.93649    146      117    19.9% 0.93461    146      116    20.5% 0.93393    146      115    21.2% 0.93164    146      114    21.9% 0.92946    146      113    22.6% 0.92741    146      112    23.3% 0.92519    146      111    24.0% 0.92361    146      110    24.7% 0.92132    146      109    25.3% 0.91851    146      108    26.0% 0.91725    146      107    26.7% 0.91563    146      106    27.4% 0.91393    146      105    28.1% 0.91186    146      104    28.8% 0.90848    146      103    29.5% 0.90711    146      102    30.1% 0.90354    146      101    30.8% 0.90250    146      100    31.5% 0.89851

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

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

India,
2022-05-19 07:36
(264 d 16:52 ago)

@ Helmut
Posting: # 23003
Views: 932

## sampleN.NTID(): Example

Hi Helmut,

I got it..!

Thanks for the interaction and time

Regards,
pharm07
Admin contact
22,485 posts in 4,710 threads, 1,603 registered users;
14 visitors (0 registered, 14 guests [including 8 identified bots]).
Forum time: 23:28 CET (Europe/Vienna)

The difference between a surrogate and a true endpoint
is like the difference between a cheque and cash.
You can get the cheque earlier but then,
of course, it might bounce.    Stephen Senn

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