如何用R语言进行相关系数与多变量的meta分析

Python07

如何用R语言进行相关系数与多变量的meta分析,第1张

本文第一大部分将介绍用R软件的meta分析数据包实现相关系数的Meta分析,第二大部分如何用R语言进行多变量的meta分析。

想获取R语言相关系数meta分析的程序模板的同学请在公众号(全哥的学习生涯)内回复“相关系数”即可。

meta数据包提供实现相关系数的Meta分析命令是:metacor(),这个命令通过加权的倒方差法运用相关系数和纳入的样本数来实现相关系数的随机效用模型和固定效用模型的合并,得到合并的相关系数及95%可信区间。具体的命令如下:

metacor(cor, n,studlab, data= NULL, subset=NULL, sm=.settings$smcor)

cor为每一个纳入研究的相关系数, n为样本量, studlab纳入研究的标签向量, data为相应的的数据集,sm选项为合并的方法,包括ZCOR和COR,其中ZCOR是合并之前先做Fisher Z变换,COR是直接合并。具体的步骤如下:

library(meta)

data<-read.csv(“C:/Users/86187/Desktop/data.csv”)

录入的数据见图1。

data<-metacor(r,n,data=m1,sm="ZCOR")

在这里合并的方法用的是Fisher Z变换。对样本的相关系数做Fisher Z变换是因为Fisher Z变换可以使样本的相关系数的分布正态分布,尤其是在样本量较小的时候,这样便于进一步估计。一般来说,不管是随机还是固定效应都会先对相关系数做Fisher Z变换。只有很少的情况下才直接用相关系数直接来做分析,比如样本量很大的时候,如果直接合并相关系数,当相关系数值接近1的时候,小样本量研究得到的权重会非常大。因此在这里推荐合并的方法都用(ZCOR)Fisher Z变换。Meta分析的结果见图2。

结果显示,异质性检验Q=6.16, P=0.0461, I2=67.5,可以认为有统计学意义上的异质性。选用随机效用模型,COR=0.8427, 95%CI: 0.6264-0.9385, z=4.8724, P<0.0001, 有统计学差异。

具体的命令如下:

forest(a)

从森林图中,非常简单和直观地看到Meta分析的统计结果,见图3

关于这两个方法的介绍请看我之前公众号(全哥的学习生涯)的推送文章(如何用R语言进行meta分析,详细教程一)的内容。敏感性分析和剪补法的结果图分别见图4和图5。

通常Meta分析假定效应量来自于独立的研究,因此统计结果也是独立的。然而,许多研究不能满足独立性的假设,比如多个治疗组与一个共同的对照组比较的研究和多个结局变量的研究就可能产生效应量之间的相关。多变量meta 分析(multivariate meta⁃analysis)作为单变量meta分析的一个拓展,可合并估计多个研究的多个相关参数,这些参数可以是多个结局或多组间的比较。当同一总体中的测量结局相关时,分别对每个结局进行Meta 分析,测量结局之间的相关结构就可能被忽略。多变量Meta分析在随机对照研究中有多种应用,最简单的是在临床试验中把每个组的结局分别处理,其他的应用还有同时探索两个临床结局的治疗效应,或同时探索成本效益的治疗效应,比较多个治疗的联合试验,以及在观察性研究中评估暴露量与疾病之间的相关性,还有在诊断试验和网络干预中的应用。

本次数据来源请见文末的参考文献,主要研究肝硬化的非手术治疗方式预防其出血的危险性,以初次出血的例数为指标,其中三个组分别是:β⁃受体阻滞剂(A),硬化疗法(B),对照组(C),目的是评价这三种非手术治疗方式预防肝硬化出血的效果。,Bled表示初次出血的例数,Total表示干预组的总例数。YAC和YBC分别表示A、B两组相对于C组估计的ln(OR),即干预组的肝硬化初次出血的危险性是对照组的倍数的自然对数;SAA、SBB和SAB则表示其对应方差及两者之间的协方差。对于包含0的研究(研究10和研究20),在每个组增加0.5个初次出血的例数。整理后见表1。

随后安装调用程序包,并进行加载:

install.packages(‘mvmeta’)

library(mvmeta)。

随后将肝硬化初次出血整理后的数据集data(至少包含YAC、YBC、SAA、SAB、SBB变量)保存为csv格式,然后利用下面命令将其导入R语言。

mvmeta 的语句:mvmeta(formula,S,data,subset,method=“reml”,bscov=“unstr”,model=TRUE,contrasts=NULL,offset,na.action,control=list())

其中formula 表示结局变量名称(即YAC、YBC);S 表示研究内(协)方差(即SAA、SAB、SBB);data 表示数据集名称;method 表示所用的估计方法:固定效应模型时选择FIXED;随机效应模型时则选择

限制性最大似然估计(REML)、最大似然估计(ML)、矩估计(MM)、方差成分法(VC)的其中之一,默认为REML。由输出结果中Q 检验的P 值和I2 统计量来判断异质性以及选择何种效应模型。

mvmeta包中主要提供了多变量Meta分析与多变量的Meta 回归,另外也提供了单变量的Meta 分析和Meta 回归。但对于后两者,在R 语言中的metafor、meta、rmeta 及metalik 等包提供了更多、更详尽和有效的功能。多变量Meta 程序为library(mvmeta),调用mvmeta软件包。

model<-mvmeta(cbind(Ya,Yb),S=S,data=cirrhosis)

model <- mvmeta(cbind(Ya,Yb)~X,S=S,data=cirrhosis),此处X代表协变量。

model<-mvmeta(Y,S=S,data=cirrhosis),此处Y为单变量的效应量,S为效应量方差。

model<-mvmeta(Y~X,S=S,data=cirrhosis),此处X代表协变量。

运行以上程序后,最后将结果输出。

单变量和多变量Meta分析都是采用ln(OR)值做分析。单变量Meta分析时YAC和YBC的Q检验P 值均小于0.05,I2统计量分别为57.7%和77.8%。多变量Meta分析Q检验P<0.05,I2统计量为73.9%。可知两种Meta 分析均存在异质性,都用随机效应模型。估计方法选择默认的REML法。

表2 是单变量Meta 分析结果,可得:AC 与BC的OR 值及95%可信区间分别为0.5281(0.2802,0.9955)、0.5406(0.3095,0.9443),表明初次出血的危险性由于干预而降低,即β⁃受体阻滞剂、硬化疗法可以预防肝硬化出血,两者为保护因素。

多变量Meta 分析的结果:YAC 为-0.6755(-1.3073,-0.0438),YBC 为-0.5938(-1.1444,-0.043 2),研究间相关系数为0.436 5(见表3),A组与B组的治疗效果呈正相关。OR 值及95%可信区间分别为0.508 9(0.2705,0.9571)、0.5522(0.318 4,0.957 7),多变量Meta 分析的结果说明β⁃受体阻滞剂预防肝硬化出血的效果是最好,其次是硬化疗法。OR 值的95%可信区间不包含1,上下限均小于1,说明两种疗法与对照组比较的初次出血危险性均小于1,差异有统计学意义。

最后,如果屏幕前的你对R语言学习还有什么问题或者看法,可以在我的公众号(全哥的学习生涯)给我留言,公众号里也有我的个人联系方式,我也希望可以结合更多志同道合的伙伴。

感谢你的阅读。

R中rmeta程序包是R语言专门进行meta分析的一个程序包,当然类似的meta分析程序包在R语言中非常多,比如 meta,metafor等网页链接

。cochrane是rmeta程序包里面自带的一个用于meta分析的演示数据库。该数 据库是7个随机对照实验的数据,该数据库拥有5个变量(name,ev.trt,n.trt,ev.ctrl,n.ctrl),7个观察值(对应7个随机 对照实验)网页链接

什么是R语言

R是用于统计分析、绘图的语言和操作环境。R是基于S语言的一个GNU项目,所以也可以当作S语言的一种实现,通常用S语言编写的代码都可以不作修改的在R环境下运行。

R 是统计领域广泛使用的诞生于 1980年左右的 S 语言的一个分支。 S的主要设计者John M. Chambers 因为S语言方面的工作获得了1998年 ACM 软件系统奖(ACM Sofare Systems Award)。

R可以在多种平台下编译和运行,包括UNIX (也包括FreeBSD和Linux)、Windows和MacOS。

该语言的语法表面上类似 C,但在语义上是函数设计语言的(functional programming language)的变种并且和Lisp 以及 APL有很强的兼容性。特别的是,它允许在“语言上计算”(puting on the language)。这使得它可以把表达式作为函数的输入参数,而这种做法对统计模拟和绘图非常有用。

官方网站::r-project./

R语言为什么叫R语言

您好,R语言的命名是根据该软件的开发者来的,R本来是由来自新西兰奥克兰大学的Ross Ihaka和Robert Gentleman 开发,所以取二人名字的首字母作为软件名

r语言中什么是向量什么是标量

同样是一个数

x<-c(1) 这个x是向量

x<-1 这个x是标量

R语言代码问题,什么是jitter,什么是runif()

fourspd2012.jittered 是变量名。

runif (random samples from uniform distribution), runif(242,min=-0.3,max=0.3) 从-0.3 到0.3 随机产生242个值

R语言是什么?

R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。

R语言是什么鬼

R是用于统计分析、绘图的语言和操作环境。

R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具

R作为一种统计分析软件,是集统计分析与图形显示于一体的。它可以运行于UNIX,Windows和Macintosh的操作系统上,而且嵌入了一个非常方便实用的帮助系统,相比于其他统计分析软件,R还有以下特点:

1.R是自由软件。这意味着它是完全免费,开放源代码的。可以在它的网站及其镜像中下载任何有关的安装程序、源代码、程序包及其源代码、文档资料。标准的安装文件身自身就带有许多模块和内嵌统计函数,安装好后可以直接实现许多常用的统计功能。[2]

2.R是一种可编程的语言。作为一个开放的统计编程环境,语法通俗易懂,很容易学会和掌握语言的语法。而且学会之后,我们可以编制自己的函数来扩展现有的语言。这也就是为什么它的更新速度比一般统计软件,如,SPSS,SAS等快得多。大多数最新的统计方法和技术都可以在R中直接得到。[2]

3. 所有R的函数和数据集是保存在程序包里面的。只有当一个包被载入时,它的内容才可以被访问。一些常用、基本的程序包已经被收入了标准安装文件中,随着新的统计分析方法的出现,标准安装文件中所包含的程序包也随着版本的更新而不断变化。在另外版安装文件中,已经包含的程序包有:base一R的基础模块、mle一极大似然估计模块、ts一时间序列分析模块、mva一多元统计分析模块、survival一生存分析模块等等.[2]

4.R具有很强的互动性。除了图形输出是在另外的窗口处,它的输入输出窗口都是在同一个窗口进行的,输入语法中如果出现错误会马上在窗口口中得到提示,对以前输入过的命令有记忆功能,可以随时再现、编辑修改以满足用户的需要。输出的图形可以直接保存为JPG,BMP,PNG等图片格式,还可以直接保存为PDF文件。另外,和其他编程语言和数据库之间有很好的接口。[2]

5.如果加入R的帮助邮件列表一,每天都可能会收到几十份关于R的邮件资讯。可以和全球一流的统计计算方面的专家讨论各种问题,可以说是全世界最大、最前沿的统计学家思维的聚集地.[2]

R是基于S语言的一个GNU项目,所以也可以当作S语言的一种实现,通常用S语言编写的代码都可以不作修改的在R环境下运行。 R的语法是来自Scheme。R的使用与S-PLUS有很多类似之处,这两种语言有一定的兼容性。S-PLUS的使用手册,只要稍加修改就可作为R的使用手册。所以有人说:R,是S-PLUS的一个“克隆”。

但是请不要忘了:R是免费的(R is free)。

R语言报错,什么是下标出界

下标出界就是比如说你有一个100长度的数组,但你却用了101的小标去引用数组,这样就会出现出界

R语言大神们学习R语言初期用的什么书

《 R语言实战》《R语言初学者指南》《R语言编程艺术》。你也可以去亚马逊上搜索,看看别人的评价来决定你买哪一本。关键看你学习R语言有没有统计和数据挖掘的基础吧。

R语言“seq函数”是什么?

在一个文档中定位到第一个空行,读取其后的所有文本  get.msg <- function(path)  {      con <- file(path, open = "rt", encoding = "latin1")        text <- readLines(con)      # The message always begins after the first full line break    msg <-... 文档定位第空行读取其所文本

get.msg <- function(path)

{

con <- file(path, open = "rt", encoding = "latin1")

text <- readLines(con)

# The message always begins after the first full line break

msg <- text[seq(which(text == "")[1]+1, length(text), 1)]

close(con)

return(paste(msg, collapse = "\n"))

}

报错:

Error in seq.default(which(text == "")[1]+1, length(text), 1) :

'from' cannot be NA, NaN or infinite 展开 示例文档:

From [email protected]  Thu Aug 22 13:17:22 2002

Return-Path: [email protected]>

Delivered-To: [email protected].

Received: from localhost (localhost [127.0.0.1])

by phobos.labs.spamassassin.taint. (Postfix) with ESMTP id 136B943C32

for <zzzz@localhost>Thu, 22 Aug 2002 08:17:21 -0400 (EDT)

<!DOCTYPE HTML PUBLIC "-W3CDTD HTML 4.0 TransitionalEN">

<HTML><HEAD>

<META content=3D"text/charset=3Dwindows-1252" -equiv=3DContent-T=

ype>