R语言实现网状meta分析

2019-07-31 14:33:05 浏览数 (1)

随着循证医学的发展,各种新型的Meta分析方法被研发,网状Meta分析也就是一种新型产物,那么怎么定义网状meta分析呢。可以简单做个定义那就是在探究同一条件多种干预措施可以确定干预策的排序。其中最主流的是基于Bayesian理论而制作的专业BUGS(Bayesian inference using gibbs sampling)软件。我们在引入R语言之前需要先安装OpenBUGS这个软件,软件下载地址:http://www.openbugs.net/w/Downloads。

今天我们就介绍R语言中是如何实现的。首先还是需要加载一个主要的R包R2OpenBUGS。安装嘛,还是install.packages(“R2OpenBUGS”)。接下来我们看下其实现的过程。

  1. 构建模型。

这一块比较数学化,说实话我也是数学小白,我们就不在这里献丑了,这个包在自己的官网提供了很多现成的模型的例子,大家可以参考自己的数据自由选择。当然有能力的化可以自己编写自己的模型进行数据的评估预测。不过这个代码需要在OpenBUGS中进行编写,因为他有自己的编码规则。当然你也可以在R中写成函数然后利用write.bug生成。例:

代码语言:javascript复制
schoolsmodel<- function(){
    for (j in 1:J){
        y[j] ~ dnorm (theta[j], tau.y[j])
        theta[j] ~ dnorm (mu.theta, tau.theta)
        tau.y[j] <- pow(sigma.y[j], -2)
    }
    mu.theta ~ dnorm (0.0, 1.0E-6)
    tau.theta <- pow(sigma.theta, -2)
    sigma.theta ~ dunif (0, 1000)
}
 
    ## some temporary filename:
    filename <- file.path(tempdir(),"schoolsmodel.bug")
 
## writemodel file:
write.model(schoolsmodel,filename)
## andlet's take a look:
file.show(filename)

1. 模型的初始化。

这一块就简单多了,那就是需要对自己模型中的参数进行初始化赋值。这样一个完整的模型就算是构建好了。接下来就是利用自己的数据对模型进行评估构建最优参数。

2. bugs核心函数使用。这一步的运行时间要看你电脑性能和迭代次数。

其中主要的参数:

Data 主要是一个带有所有变量的list,eg: data <- list ("J", "y","sigma.y")。其中J,y,sigma.y都是变量,存储数据。

Inits 一个函数形式代码,主要存放模型初始值。

parameters.to.save 需要监控的参数名称向量。

Model.file 就是构建的模型文件,一般都是代码。

n.iter 指的模型每条链迭代的总次数。

Debug是否显示运行过程。如果显示则为T,运行时会显示OpenBUGS运行日志。

3. 模型的结果展示。

可以用自带的函数print()展示,其中主要的参数是digits.summary设置结果保留的小数位数。

当然也可以展示图形化结果,比如森林图plot(schools.sim)

样例的代码:

代码语言:javascript复制
library(R2OpenBUGS)
data(schools)
J <-nrow(schools)
y <-schools$estimate
sigma.y<- schools$sd
data<- list ("J", "y", "sigma.y")
 
inits<- function(){
list(theta= rnorm(J, 0, 100), mu.theta = rnorm(1, 0, 100),
 sigma.theta = runif(1, 0, 100))
}
 
 
schools.sim<- bugs(data, inits, model.file ="F:/R/R-3.5.1/library/R2OpenBUGS/model/schools.txt",
 parameters = c("theta","mu.theta", "sigma.theta"),
n.chains= 3, n.iter = 1000,debug=TRUE)
 
plot(schools.sim)
 
print(schools.sim,digits.summary=4)
 

具体的深入应用还需要通过例子进一步去参看,此处指展示具体的软件用法。

0 人点赞