【Meta分析】利用R语言批量进行稀疏数据贝叶斯Meta分析
系统评价/Meta分析指全面收集所有相关研究并逐个进行严格评价和分析,再用定性或定量合成的方法对资料进行处理得出综合结论的研究方法。在指导学员的过程中发现初学者在学习过程中常常会碰到许多共性问题,本公众号特此开设专栏解答,希望能够和大家共同学习交流Meta分析,共同成长,如有不当之处,还请大家批评指正。本期我们分享如何批量制作贝叶斯Meta分析。
传统的Meta分析是基于经典的频率学派统计理论,在固定效应模型或随机效应模型的选择是基于统计量Q进行。经典的随机效应模型中可以通过Q检验获得研究间方差的矩估计,但是较难获得其95%可信区间(CI),且检验功效较低。再者,传统的Meta分析很难应对复杂的模型,如对于二分类资料的Meta分析选择效应量为OR,经典方法是将OR对数化,然后假设log(OR),并服从正态分布,相应的计算都是基于正态分布假设的前提下,因此在存在小样本资料时,如果不符合正态近似的条件,经典方法不能处理。此外当纳入的研究存在较多的极端值时,经典方法很难识别随机效应[2]。
# 设立种子数,加载包
set.seed(12345)
library(MetaStan) # 首次使用需要install.packages("MetaStan")进行安装
# 将原始数据导入R软件
library(readxl) # 首次使用需要install.packages("readxl")进行安装
library(openxlsx) # 首次使用需要install.packages("openxlsx")进行安装
dt<- read_excel(“不良反应数据.xlsx”)
res <- unique(dt[,7]) # 将列名去重,即将列名保存为res变量,7是列名的列数
for (i in c(1:nrow(res[,1]))){ # 撰写循环,每一个列名运行一次
dt1 <- subset(dt, dt[,7]==as.character(res[i,1]))# 按照列名不同提取数据
cfilename = paste(res[i,1],”.csv”,sep = “”) # 构建保存的文件名以及格式
write.csv(dt1[,1:7],cfilename) # 保存数据
}
# 读取导出文件文件
a = list.files(pattern = ".csv")
dir = paste("./", a, sep="")
Bmeta <- function(x){
data <- read.csv(file = dir[x])
model <- meta_stan(ntrt = n1, nctrl = n0, rtrt = y1, rctrl = y0, data = data, chains = 3, adapt_delta = 0.999, model = "Beta-binomial", iter = 50000, warmup = 20000) #采用文献分享代码,具体需评估)
result <- data.frame(model$fit_sum)
res <- result["theta",c("mean", "X2.5.", "X97.5.")]
mean <- exp((round(res$mean,3))) # 输出OR值
lci <- exp(round(res$X2.5.,3)) # 输出lci值
uci <- exp(round(res$X97.5.,3)) # 输出uci值
results <- data.frame("outcome" = a[x],
"OR" = mean,
"LCI" = lci,
"UCI" = uci)
return(results)
}
num <- c(1:nrow(res[,1])) #有多少个csv文件写成1:多少
Res <- lapply(num, Bmeta)
library(plyr)
Res <- ldply(Res, data.frame)
write.csv(Res, "Bmeta.csv")
[1]董圣杰,冷卫东,田家祥,曾宪涛. Meta分析系列之五:贝叶斯Meta分析与WinBUGS软件[J]. 中国循证心血管医学杂志,2012,4(05):395-398.