概述
首先,笔者自己是个略懂编程的药学院学生,由于本科专业的原因在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
<int> <chr>
<dbl> <chr>
<dbl>
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包——PowerTOSTPowerTOST前世今生的全部内容,希望文章能够帮你解决生物等效性试验样本量,效能,置信区间计算神器之R包——PowerTOSTPowerTOST前世今生所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复