【Meta分析】利用R语言批量进行稀疏数据贝叶斯Meta分析

系统评价/Meta分析指全面收集所有相关研究并逐个进行严格评价和分析,再用定性或定量合成的方法对资料进行处理得出综合结论的研究方法。在指导学员的过程中发现初学者在学习过程中常常会碰到许多共性问题,本公众号特此开设专栏解答,希望能够和大家共同学习交流Meta分析,共同成长,如有不当之处,还请大家批评指正。本期我们分享如何批量制作贝叶斯Meta分析。
01
什么是贝叶斯Meta分析?
在Meta分析中我们经常会遇到稀疏二分类数据,即在纳入 Meta分析的单个研究中有1个或2个臂的事件发生数为0(分别称为“单零研究”或 “双零研究”),经典的Meta分析方法不适用于稀疏数据 ,特别是纳入Meta分析中含有多个单零研究或双零研究时,在数据分析方法学方面面临着众多挑战[1]。

传统的Meta分析是基于经典的频率学派统计理论,在固定效应模型或随机效应模型的选择是基于统计量Q进行。经典的随机效应模型中可以通过Q检验获得研究间方差的矩估计,但是较难获得其95%可信区间(CI),且检验功效较低。再者,传统的Meta分析很难应对复杂的模型,如对于二分类资料的Meta分析选择效应量为OR,经典方法是将OR对数化,然后假设log(OR),并服从正态分布,相应的计算都是基于正态分布假设的前提下,因此在存在小样本资料时,如果不符合正态近似的条件,经典方法不能处理。此外当纳入的研究存在较多的极端值时,经典方法很难识别随机效应[2]。

贝叶斯Meta分析(Bayesian Meta-Analysis)是近年来基于贝叶斯统计发展起来的一种新型的Meta分析方法,主要采用“马尔科夫链—蒙特卡罗”(Markov chain Monte Carlo,MCMC)方法。贝叶斯统计将参数θ作为一个随机变量,有一定的先验分布,在获得样本之后(给定的样本信息),θ的后验分布π(θ/x)应包含θ的综合信息,可从θ的后验分布获得参数θ的贝叶斯估计。因此,可很好的解决经典Meta分析存在的缺陷[2]。
02
贝叶斯Meta分析的实现方法
2020年8月张天嵩老师在《中国循证医学儿科杂志》发表了《稀疏二分类数据贝叶斯 Meta分析方法及实现》的论文,详细想大家介绍二项式⁃正态层次模型(BNHM) 和贝塔⁃二项式模型 (BBM),以及基于这两种模型框架下的贝叶斯Meta分析方法,并通过实例来介绍软件实现过程[2]。在本文中我们将引用其基于BBM 稀疏二分类数据贝叶斯Meta分析方法的代码并做进一步改进,实现批量制作稀疏二分类数据的贝叶斯Meta分析。
原始数据如下n1代表试验组样本量,y1代表试验组事件发生数,y0代表对照组发生事件数,n0代表对照组样本量。
# 设立种子数,加载包 
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.

[2]张天嵩. 稀疏二分类数据贝叶斯Meta分析方法及实现[J]. 中国循证儿科杂志,2020,15(04):314-318.
(0)

相关推荐

  • 领导,我的不是meta-analysis,而是Bayesian analysis

    随着时代的发展,贝叶斯方法(Bayesian)已经成为了网状meta分析的主流统计模型.现在的期刊基本都要求贝叶斯模型的网状meta分析,而不要频率学派的网状meta分析,因为贝叶斯的优势在于可以利用 ...

  • 23个优秀的机器学习训练公共数据集

    以下是这 23 个公共数据集: 帕尔默企鹅数据集 共享单车需求数据集 葡萄酒分类数据集 波士顿住房数据集 电离层数据集 Fashion MNIST 数据集 猫与狗数据集 威斯康星州乳腺癌(诊断)数据集 ...

  • 组合多个GSE数据集进行meta分析不妨先去冗余

    发现一个工具,发表在 BMC Bioinformatics201415:323 https://doi.org/10.1186/1471-2105-15-323,很简单的设计,就是考虑到做多个GSE数 ...

  • 太尴尬了,全科室就我一个人没有SCI

    不知道有没有粉丝经历过下面这位粉丝的这种情况:全科室的人都发了相关SCI论文,就自己一个人没有发过SCI论文,感觉没有办法在科室立足了,觉得自己是另类. 如果真的遇到上面这种情况,大家都发了SCI而就 ...

  • 简易教程|为UCI机器学习库引入简单直观的Python API(附代码)

    此文将教大家为UCI机器学习门户引入简单直观的API,用户可以轻松查找数据集描述,搜索他们感兴趣的特定数据集,甚至可以下载按大小或机器学习任务分类的数据集. 介绍 UCI机器学习数据集库是机器学习教学 ...

  • 使用结构方程模型需要知道的那些事

    本期与朋友们聊聊使用结构方程模型(structural equation modeling,SEM)分析生态环境数据时需要提前明确的一些问题.本文采用自问自答的形式,共分理论和应用两篇,本期为理论篇. ...

  • 为什么依然这么多人搞meta分析?

    为什么现在这么流行生信数据挖掘和临床数据挖掘,身边依然还是很多人在做meta分析?此外,已经有部分单位不承认meta分析,实行三不政策(不能用来毕业.不能用来普升.不进行奖励).面对这种情况,周边依然 ...

  • 用别人的数据,发自己的SCI

    "用别人的数据,发自己的SCI",想必有很多人都听过了这句话,也有很多人实现了这句话的梦想.既然这句话这么重要,我们给大家总结一下那些方法能实现这句话. 一.在过去 我们熟悉的me ...

  • 【Meta第3期】同济师兄说哪些Meta分析可以做?

    作者简介 「本文作者」:优秀会吸引优秀,本文作者咸鱼医生,八年制博士,擅长meta分析和临床研究,已发表多篇meta分析和临床研究相关sci文章.后续将会分享一系列的原创干货,敬请关注. 「编辑审校」 ...

  • 如何实现生存数据的贝叶斯网状meta分析?

    之前有很多人问我们,如何才能实现生存数据的贝叶斯网状meta分析?有没有比较简单的软件,像ADDIS这种?答案是没有的.要做生存数据的贝叶斯网状meta分析只能用WinBUGS(OpenBUGS). ...