生物等效性试验样本量,效能,置信区间计算神器之R包——PowerTOST

首先,笔者自己是个略懂编程的药学院学生,由于本科专业的原因在java, python的领域混迹了很久,终于硕士期间接触了Data Science步入了anaconda, R的大门,尝试用这些工具解决一些医药领域的问题,这里就要介绍最近发现的一个新工具:PowerTOST包用于生物等效性试验模拟仿真。

PowerTOST前世今生

首先是安装:

install.packages("PowerTOST")
# 装不上的同学请用R原版编译器,Rstudio的命令有时会出错
# 或参考Hadley Wickham 的devtools包

当我们在Rstudio帮助页面Packages下搜索PowerTOST时,其描述为:

Power and Sample Size Based on Two One-Sided t-Tests (TOST) for (Bio)Equivalence Studies

这是专为等效性试验开发的工具包,且脱离了SAS,SPSS等工具,笔者也尝试过在Python中寻找该类型的工具包,却并不成功,而在笔者的日常工作和论文写作过程中,该包在等效性试验领域的专业程度出乎了笔者的意料,带来了无限的便利,下面将根据一个小实例带领大家走进PowerTOST。

包的调用

library(tidyverse)
library(PowerTOST)

这里笔者由于习惯了Hadley Wickham 的著作R for Data Science的一套工具包,所以直接引入了tidyverse,详情见链接。

##创建数据集
首先进行模拟需要一个等效性试验或者预试验的数据集,由于笔者有一系列数据保密的要求,不能使用真实的数据集,这里选择创建一个虚拟的数据集,代码如下:

data <- tibble(
  subject = rep(seq(29), 2),
  sequence = c(rep("T/R", 14), rep("R/T", 15), rep("T/R", 14), rep("R/T", 15)),
  period = c(rep(1, 14), rep(2, 15), rep(2, 14), rep(1, 15)),
  formulation = c(rep("T", 29), rep("R", 29)),
  AUC = rnorm(58, 11.7345, 0.2)
)
data

创建的模拟数据集结果如下:

# A tibble: 58 x 5
   subject sequence period formulation   AUC
                   
 1       1 T/R        1.00 T            11.4
 2       2 T/R        1.00 T            11.9
 3       3 T/R        1.00 T            11.0
 4       4 T/R        1.00 T            11.9
 5       5 T/R        1.00 T            12.5
 6       6 T/R        1.00 T            11.5
 7       7 T/R        1.00 T            11.9
 8       8 T/R        1.00 T            11.4
 9       9 T/R        1.00 T            12.6
10      10 T/R        1.00 T            13.0
# ... with 48 more rows

其中subject为受试者编号,sequence为给药序列,T/R为先给受试制剂,后给参比制剂,period为周期,如T/R的周期一就是T,formulation为制剂,AUC为药时曲线的曲线下面积,多用于等效性试验等评价药物吸收程度的指标。

##数据清洗及建模

这里需要注意的是,整理好的数据不能直接用于建模,特别由于数据集用的是比较新的tibble而不是data.frame,需要先把其数据类型转变为因子factor,建模才不会出现自由度明明有29个分类变量,自由度仍为1的情况。

data$subject = as.factor(data$subject)
data$sequence = as.factor(data$sequence)
data$period = as.factor(data$period)
data$formulation = as.factor(data$formulation)
data

此时可看到数据类型变为fct即为factor,可以进行数据建模了:

data
mod <- lm(AUC ~ subject + period + formulation, data = data)
mod
anova(mod)
mse <- anova(mod)[[3]][[4]]
mse
CV <- mse2CV(mse)
CV

其中anova为方差分析函数,mse为平均随机误差,CV为变异系数,结果为:

Analysis of Variance Table
Response: AUC
Df Sum Sq Mean Sq F value Pr(>F)
subject 28 2.04978 0.073206 2.0109 0.03664 *
period 1 0.00005 0.000055 0.0015 0.96933
formulation 1 0.01041 0.010414 0.2861 0.59713
Residuals 27 0.98291 0.036404
mse <- anova(mod)[[3]][[4]]
mse
[1] 0.03640403
CV <- mse2CV(mse)
CV
[1] 0.1925481

根据等效性评判准则,从方差分析中获得mse再将其转为变异系数CV,用于查表得到所需的样本例数,计算置信区间等用途,上面代码中mse2CV也是PowerTOST包中用于数据转换的函数。

mean_T <- mean(filter(data, formulation == "T")$AUC)
mean_R <- mean(filter(data, formulation == "R")$AUC)
GMR <- exp(mean_T - mean_R)
GMR

再就是算几何均值GMR,结果为:

GMR
[1] 0.9736373

最后用以上结果通过PowerTOST包自带函数计算置信区间:

CI.BE(pe = GMR, CV = CV, n = c(14,15))

得到结果为:

CI.BE(pe = GMR, CV = CV, n = c(14,15))
lower upper
0.8939438 1.0604354

按等效限80-125评判,该品种通过一致性评价,允许上市。

##根据预试验计算样本量
首先有放回的重抽样bootstrap构建模拟的预试验数据集,将结果储存在sampling_desult中,再构造一个和原始data结构相同的初始为空数据集bootstrap_data,然后将重抽样抽到的受试者放入这个数据集中,这个过程也可使用一些已经封装的函数modelr::bootstrap(), broom::bootstrap(), rsample::bootstraps(), boot::boot()完成:

sampling_result <- sample(seq(29), 12, replace = TRUE)
sampling_result
# 构建空的bootstrap_data数据集,由于要和data格式相同
# 采用filter一个不存在的subject编号的方法
bootstrap_data <- data %>% filter(subject == 1000)
for(i in sampling_result) print(i)
for ( i in sampling_result){
  bootstrap_data <- bootstrap_data %>% rbind(filter(data, subject == i, formulation %in% c("T", "R")))
}
bootstrap_data

计算其变异系数CV:

mod <- lm(AUC ~ subject + period + formulation, data = bootstrap_data)
mod
anova(mod)
mse <- anova(mod)[[3]][[4]]
mse
CV <- mse2CV(mse)
CV

用PowerTOST中的power.TOST()函数计算其效能,用sampleN.TOST()函数计算其正式试验达到80%效能所需样本量:

power.TOST(CV = CV, n = 12)
sampleN.TOST(CV = CV)

power.TOST(CV = CV, n = 12)
[1] 0.9297343
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.1257269
Sample size (total)
n power
10 0.872392

##总结
本文只是用虚拟数据对2X2交叉等效性试验做了一个简单的PowerTOST包的应用介绍,其实PowerTOST中还有很多例如ct计算样本例数表格,ABEL试验,RSABE试验,2x2x3,2x4x4等多种试验设计模拟方法的整合函数,以后有机会博主会继续更新相关内容。

所有代码已上传到Github点这里跳转

你可能感兴趣的:(生物等效性试验样本量,效能,置信区间计算神器之R包——PowerTOST)