R WinBugs network meta analysis
好像整出了个很有用的网络meta分析的R包。可以用以批处理meta分析数据。
初步的Winbugs模型code分享:
model
{
for (i in 1:ns)
{
w[i,1]<-0
delta[i,1]<-0
mu[i]~dnorm(0,0.0001)
for (k in 1:na[i])
{
r[i,k]~dbin(p[i,k],n[i,k])
logit(p[i,k])<-mu[i]+delta[i,k]
rhat[i,k]<-p[i,k]*n[i,k]
dev[i,k]<-2*(r[i,k]*(log(r[i,k])-log(rhat[i,k]))+(n[i,k]-r[i,k])*(log(n[i,k]-r[i,k])-log(n[i,k]-rhat[i,k])))
}
resdev[i]<-sum(dev[i,1:na[i]])
for(k in 2:na[i])
{
delta[i,k]~dnorm(md[i,k],taud[i,k])
md[i,k]<-d[t[i,k]]-d[t[i,1]]+sw[i,k]
taud[i,k]<-tau*2*(k-1)/k
w[i,k]<-(delta[i,k]-d[t[i,k]]+d[t[i,1]])
sw[i,k]<-sum(w[i,1:k-1])/(k-1)
}
}
totresdev<-sum(resdev[])
d[1]<-0
for (k in 2:nt)
{
d[k]~dnorm(0,0.0001)
}
sd~dunif(0,5)
tau<-pow(sd,-2)
for (c in 1:(nt-1))
{
for (k in (c+1):nt)
{
or[c,k]<-exp(d[k]-d[c])
lor[c,k]<-(d[k]-d[c])
}
}
for(k in 1:nt)
{
rk[k]<-nt+1-rank(d[],k)
best[k]<-equals(rk[k],1)
}
}
初步的R代码分享:
#code for meta analysis
#data processing
setwd("C:/Users/jack/Desktop/mission/meta/1")
library(readxl)
rank_xuhao<-function(x){
myindex<-c()
for (i in 1:length(x)){
if (i==1){
myindex[i]<-1
next
}
if (x[i]==x[i-1]){
myindex[i]<-myindex[i-1]+1
} else {
myindex[i] <- 1
}
}
return(myindex)
}
get_data<-function(sheetname){
HBV_DNA <- read_excel("metadata.xls", sheet = sheetname)
HBV_DNA$rank<-rank_xuhao(HBV_DNA$研究)
HBV_DNA$干预措施<-factor(x = HBV_DNA$干预措施,levels = unique(HBV_DNA$干预措施),labels =1:length(unique(HBV_DNA$干预措施)))
#mapping above
#create the original dataframe
mydata<-data.frame(matrix(NA,ncol = 10))
colnames(mydata)<-c('t1','t2','t3','r1','r2','r3','n1','n2','n3','na')
sample <- unique(HBV_DNA$研究)
for (i in 1:length(sample)){
mydata[i,c(10)] <- nrow(HBV_DNA[HBV_DNA$研究==sample[i],])
if (mydata[i,c(10)]==1){
mydata[i,c(1,4,7)] <- HBV_DNA[HBV_DNA$研究==sample[i] & HBV_DNA$rank==1,c(2,3,4)]
mydata[i,c(2,5,8)] <- NA
mydata[i,c(3,6,9)] <- NA
}
if (mydata[i,c(10)]==2){
mydata[i,c(1,4,7)] <- HBV_DNA[HBV_DNA$研究==sample[i] & HBV_DNA$rank==1,c(2,3,4)]
mydata[i,c(2,5,8)] <- HBV_DNA[HBV_DNA$研究==sample[i] & HBV_DNA$rank==2,c(2,3,4)]
mydata[i,c(3,6,9)] <- NA
}
if (mydata[i,c(10)]==3){
mydata[i,c(1,4,7)] <- HBV_DNA[HBV_DNA$研究==sample[i] & HBV_DNA$rank==1,c(2,3,4)]
mydata[i,c(2,5,8)] <- HBV_DNA[HBV_DNA$研究==sample[i] & HBV_DNA$rank==2,c(2,3,4)]
mydata[i,c(3,6,9)] <- HBV_DNA[HBV_DNA$研究==sample[i] & HBV_DNA$rank==3,c(2,3,4)]
}
}
return(mydata)
}
#check the mapping
get_mapping<-function(sheetname){
HBV_DNA <- read_excel("metadata.xls", sheet = sheetname)
treatment <- rbind(1:length(unique(HBV_DNA$干预措施)),unique(HBV_DNA$干预措施))
return(treatment)
}
#load original data
mydata<-get_data('HBV-DNA')
mytreatment<-get_mapping('HBV-DNA')
#############################################################model processing########################################
library(R2WinBUGS)
get_model<-function(mydata){
#load the model
bugsname<- file.path('C:/Users/jack/Desktop/mission/meta/1/','bugs.bug')
#file.show(bugsname)
#integration/assemble
t<-array(,dim=c(nrow(mydata),3))
r<-array(,dim=c(nrow(mydata),3))
n<-array(,dim=c(nrow(mydata),3))
t[,1]<-mydata$t1
r[,1]<-mydata$r1
n[,1]<-mydata$n1
t[,2]<-mydata$t2
r[,2]<-mydata$r2
n[,2]<-mydata$n2
t[,3]<-mydata$t3
r[,3]<-mydata$r3
n[,3]<-mydata$n3
na<-mydata$na
ns<-nrow(mydata)
nt<-max(mydata[,c(1,2,3)],na.rm = T)
data<-list("t","r","n","na","ns","nt")
#initialization
inits<-function(){
list(d = c(NA,rep(0,nt-1)),sd=1,mu = rep(0,ns))
}
#parameters
parameters<-c("lor",'or')
#winbugs
bugs.sim<-bugs(data,inits,parameters,bugsname,n.chains = 1,n.iter=40000,n.burnin=10000,bugs.directory='D:/WINBUGS/WinBUGS14/',working.directory = NULL)
return(bugs.sim)
}
#results
#1
mydata<-get_data('HBV-DNA')
model1_treatment<-get_mapping('HBV-DNA')
model1<-get_model(mydata = mydata)
print(model1,digits.summary = 4)
plot(model1)
#2
mydata<-get_data('ALT复常')
model2_treatment<-get_mapping('ALT复常')
model2<-get_model(mydata = mydata)
print(model2,digits.summary = 4)
plot(model2)
#3
mydata<-get_data('HBeAg阴转')
model3_treatment<-get_mapping('HBeAg阴转')
model3<-get_model(mydata = mydata)
print(model3,digits.summary = 4)
plot(model3)
#4
mydata<-get_data('HBeAg血清学转换')
model4_treatment<-get_mapping('HBeAg血清学转换')
model4<-get_model(mydata = mydata)
print(model4,digits.summary = 4)
plot(model4)
#1
mydata<-get_data('HBV-DNA')
model1_treatment<-get_mapping('HBV-DNA')
model1<-get_model(mydata = mydata)
print(model1,digits.summary = 4)
plot(model1)
#1
mydata<-get_data('HBV-DNA')
model1_treatment<-get_mapping('HBV-DNA')
model1<-get_model(mydata = mydata)
print(model1,digits.summary = 4)
plot(model1)
#1
mydata<-get_data('HBV-DNA')
model1_treatment<-get_mapping('HBV-DNA')
model1<-get_model(mydata = mydata)
print(model1,digits.summary = 4)
plot(model1)
R WinBugs network meta analysis相关推荐
- R语言协方差分析(analysis of covariance)实战:协方差分析ANCOVA(analysis of covariance)(检查模型假设)、拟合协方差分析ANCOVA模型、事后分析
R语言协方差分析(analysis of covariance)实战:协方差分析ANCOVA(analysis of covariance)(检查模型假设).拟合协方差分析ANCOVA模型.事后分析 ...
- 熟练掌握R语言的Meta分析全流程和不确定性分析,并结合机器学习等方法讲解Meta分析在文献大数据的延伸应用
Meta分析是针对某一科研问题,根据明确的搜索策略.选择筛选文献标准.采用严格的评价方法,对来源不同的研究成果进行收集.合并及定量统计分析的方法,最早出现于"循证医学",现已广泛应 ...
- 基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习技术应用
Meta分析是针对某一科研问题,根据明确的搜索策略.选择筛选文献标准.采用严格的评价方法,对来源不同的研究成果进行收集.合并及定量统计分析的方法,最早出现于"循证医学",现已广泛应 ...
- 基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习应用
Meta分析是针对某一科研问题,根据明确的搜索策略.选择筛选文献标准.采用严格的评价方法,对来源不同的研究成果进行收集.合并及定量统计分析的方法,最早出现于"循证医学",现已广泛应 ...
- 技术点详解---双链路智能切换--h3c NQA(Network Quality Analysis)
技术点详解---双链路智能切换 在上一期中,我们介绍了非常给力的双链路网吧解决方案,但在实际使用过程中,仍然有很多网吧老板抱怨. 一. 网吧老板的抱怨 这位淡定的网吧老板是这样反馈问题的: 1 ...
- 文献综述——Meta analysis(荟萃分析 or 元分析)
文献综述--Meta analysis(荟萃分析 or 元分析) 在硕博刚入学时,导师可能会让我们去总结性的去做某个领域的综述性研究以方便我们快速全面了解该领域,当然做综述研究是一个极其繁琐的过程 文 ...
- r语言数据变量分段_R数据分析:用R语言做meta分析
这里以我的一篇meta分析为例,详细描述meta分析的一般步骤,该例子实现的是效应量β的合并 R包:metafor或meta包,第一个例子以metafor包为例. 1.准备数据集 2.异质性检验 in ...
- 语言nomogram校准曲线图_医学统计与R语言:Meta 回归作图(Meta regression Plot)
微信公众号:医学统计与R语言如果你觉得对你有帮助,欢迎转发 输入1: install.packages("metafor") library(metafor) dat.bcg 结果 ...
- R语言制作Meta分析偏倚风险评估(ROB)图
我们进行偏倚风险评估一般都是用Cochrane的偏倚风险评估工具,在Revman里面会做出下面的图. 这个图在R语言里面完全可以重现,下面就给大家演示怎么用R来制作ROB图. 首先准备数据,在Exce ...
最新文章
- 以太坊开发(二)使用Ganache CLI在私有链上搭建智能合约
- 【非凡程序员】 OC第十八节课 (数据库mysql和sqlite3)
- sqlite3 表里插入系统时间(时间戳)
- 【MongoDB学习笔记21】MongoDB的复合索引
- Elasticsearch7.15.2 出现 node validation exception 的问题处理
- MySQL入门之PHP的MySQL数据库编程
- 小强的HTML5移动开发之路(27)—— JavaScript回顾2
- stored to '*' during its initialization is never read
- 19. 删除链表的倒数第N个节点【双指针经典应用】详解
- c++ string字符串翻转
- arcgis伪节点检查_ArcGis拓扑错误检查及修改
- 一家旅游互联网公司技术的发展史
- jsp登陆界面链接mysql_用jsp实现网站登录界面的制作,并连接数据库
- 企业微信怎么拉黑好友?
- python期权定价公式_一揽子欧洲期权蒙特卡洛定价(python)(一)
- vue 描述框[el-descriptions] 与之对应 div
- 如何让c语言编的游戏运行,如何用C语言编写游戏一.doc
- HTML卡片式布局源码,html5自适应卡片式设计动态加载整站源码_
- 移动WEB开发之响应式布局--Bootstrap栅格系统
- 示波器表笔旁边的夹子是什么_示波器探头容易忽略的几个问题