pharm07
☆

India,
2022-05-03 13:23
(325 d 17:59 ago)

Posting: # 22953
Views: 1,322

## 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.

Regards,
pharm07
dshah
★★

India/United Kingdom,
2022-05-03 15:04
(325 d 16:17 ago)

@ pharm07
Posting: # 22954
Views: 1,308

## 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
(325 d 14:43 ago)

@ pharm07
Posting: # 22955
Views: 1,120

## 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

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
(324 d 21:13 ago)

@ Helmut
Posting: # 22958
Views: 1,160

## 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]

Regards,
pharm07
Helmut
★★★  Vienna, Austria,
2022-05-04 12:33
(324 d 18:48 ago)

@ pharm07
Posting: # 22959
Views: 1,098

## 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.

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 (324 d 14:27 ago) @ Helmut Posting: # 22961 Views: 1,050 ## 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 (317 d 23:51 ago) @ pharm07 Posting: # 22968 Views: 920 ## 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 (317 d 16:02 ago) @ pharm07 Posting: # 22970 Views: 895 ## 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 (311 d 00:03 ago) @ Helmut Posting: # 22995 Views: 844 ## 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
(310 d 14:51 ago)

@ pharm07
Posting: # 23002
Views: 808

## 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
(309 d 23:45 ago)

@ Helmut
Posting: # 23003
Views: 1,029

## sampleN.NTID(): Example

Hi Helmut,

I got it..!

Thanks for the interaction and time Regards,
pharm07  Ing. Helmut Schütz 