Meta系列(二): 在R中如何计算效应值
1 简介
在上一篇文章中,我们介绍了meta分析中有哪些效应值,以及什么是随机效应模型和混合效应模型。下面我们就继续来看看这些效应值的函数在R中如何计算和运用。
2 效应值计算
2.1 预先计算效应值(以标准化均值差为例)
示例数据来源于demetar包。对照组与试验组效应大小的标准化均值差已经事先计算好。
library(tiderverse) # need for 'glimpse'
library(demetar)
library(meta)
data(ThirdWave)
glimpse(ThirdWave)
## Rows: 18
## Columns: 8
## $ Author <chr> "Call et al.", "Cavanagh et al.", "DanitzOrsillo"…
## $ TE <dbl> 0.7091362, 0.3548641, 1.7911700, 0.1824552, 0.421…
## $ seTE <dbl> 0.2608202, 0.1963624, 0.3455692, 0.1177874, 0.144…
## $ RiskOfBias <chr> "high", "low", "high", "low", "low", "low", "high…
## $ TypeControlGroup <chr> "WLC", "WLC", "WLC", "no intervention", "informat…
## $ InterventionDuration <chr> "short", "short", "short", "short", "short", "sho…
## $ InterventionType <chr> "mindfulness", "mindfulness", "ACT", "mindfulness…
## $ ModeOfDelivery <chr> "group", "online", "group", "group", "online", "g…
可以看到数据集包含的数据列,主要的效应指标是TE,效应指标的标准误是seTE。由数据集中可以看出有不同的亚组,可以猜测这些研究间存在异质性,所以采用随机效应模型。选择极大似然估计,并且使用Knapp-Hartung法降低假阳性率,也就是tau方估计选用REML。
使用函数:meta包中的metagen
必须的参数:TE:数据集中预计算的效应值大小
seTE:数据集中预计算的效应值标准误
m.gen <- metagen(TE = TE,
seTE = seTE,
studlab = Author,#设置研究的标签
data = ThirdWave,
sm = "SMD",#设置估计的效应值
fixed = FALSE,#是否估计固定效应模型
random = TRUE,#是否估计随机效应模型
method.tau = "REML",#tau方的估计方法
hakn = TRUE,
title = "Third Wave Psychotherapies")
summary(m.gen)#查看拟合结果
## Review: Third Wave Psychotherapies
## SMD 95%-CI %W(random)
## Call et al. 0.7091 [ 0.1979; 1.2203] 5.0
## Cavanagh et al. 0.3549 [-0.0300; 0.7397] 6.3
## DanitzOrsillo 1.7912 [ 1.1139; 2.4685] 3.8
## de Vibe et al. 0.1825 [-0.0484; 0.4133] 7.9
## Frazier et al. 0.4219 [ 0.1380; 0.7057] 7.3
## Frogeli et al. 0.6300 [ 0.2458; 1.0142] 6.3
## Gallego et al. 0.7249 [ 0.2846; 1.1652] 5.7
## Hazlett-Steve… 0.5287 [ 0.1162; 0.9412] 6.0
## Hintz et al. 0.2840 [-0.0453; 0.6133] 6.9
## Kang et al. 1.2751 [ 0.6142; 1.9360] 3.9
## Kuhlmann et al. 0.1036 [-0.2781; 0.4853] 6.3
## Lever Taylor… 0.3884 [-0.0639; 0.8407] 5.6
## Phang et al. 0.5407 [ 0.0619; 1.0196] 5.3
## Rasanen et al. 0.4262 [-0.0794; 0.9317] 5.1
## Ratanasiripong 0.5154 [-0.1731; 1.2039] 3.7
## Shapiro et al. 1.4797 [ 0.8618; 2.0977] 4.2
## Song & Lindquist 0.6126 [ 0.1683; 1.0569] 5.7
## Warnecke et al. 0.6000 [ 0.1120; 1.0880] 5.2
##
## Number of studies combined: k = 18
##
## SMD 95%-CI t p-value
## Random effects model 0.5771 [0.3782; 0.7760] 6.12 < 0.0001
##
## Quantifying heterogeneity:
## tau^2 = 0.0820 [0.0295; 0.3533]; tau = 0.2863 [0.1717; 0.5944];
## I^2 = 62.6% [37.9%; 77.5%]; H = 1.64 [1.27; 2.11]
##
## Test of heterogeneity:
## Q d.f. p-value
## 45.50 17 0.0002
##
## Details on meta-analytical method:
## - Inverse variance method
## - Restricted maximum-likelihood estimator for tau^2
## - Q-profile method for confidence interval of tau^2 and tau
## - Hartung-Knapp adjustment for random effects model
结果已经输出,如何解读结果是现在的重要议题。
结果包含什么
第一部分:单个研究的效应值和置信区间。由于效应值已经事先计算,这里没有包含太多信息。W%是每个研究的权重。de Vibe et al的研究给的权重最高(7.9%),而Ratanasiripong 给的权重最低,查看其效应值置信区间,置信区间大,意味着标准误非常大,因此,提示此项研究的效应大小并不精确。此外,数据结果还告诉我们一共纳入了18项研究。
第二部分:这部分提供了核心结果:合并效应大小。由于我们使用了Knapp-Hartung法估计参数,所以效应值估计使用T
分布。
接下来是异质性。现在我们暂时先只关注tau方,我们可以看到tau方为0.08且置信区间不包含0,因此,研究存在异质性。
第三部分:我们可以看到meta分析的详细信息,比如我们如何估计tau方。
2.1.1 结果调整
有时,我们可能想调整一些分析的细节,updata.meta函数可能会有所帮助,他需要输入meta对象,以及我们需要修啊该的参数。比如,我们想知道采用别的tau方估计方法是否会产生实质性差异,则做出如下修改:
m.gen_update <- update.meta(m.gen,
method.tau = "PM")
# Get pooled effect
m.gen_update$TE.random #0.587
# Get tau^2 estimate
m.gen_update$tau2#0.11
可以看到,效应值大小没有太大改变,但是PM法估计了一个更大的tau方。
2.2 标准化均值差
我们可以使用两组的均值和标准差形式的原始数据进行合并,计算总的效应值。我们必须为metacont函数提供以下7个参数:
-
sm = "SMD"
sm = “MD” -
n.e 实验组样本量
-
mean.e 实验组均值
-
sd.e 实验组的均值标准差
-
n.c 对照组样本量
-
mean.c 对照组均值
-
sd.c 对照组的均值标准差
-
method.smd 这个参数的设置是选用,有几个选项“Hedges”(常用,默认),“Cohen”(未校正的标准化均值差)和“Glass"(默认与推荐,该方法采用对照组的标准差而不是合并后的标准差计算,当有多个实验组时,该方法是初步的分析,但通常不是meta分析的首选方法)
<