联系客服
客服二维码

联系客服获取更多资料

微信号:LingLab1

客服电话:010-82185409

意见反馈
关注我们
关注公众号

关注公众号

linglab语言实验室

回到顶部
R语言元分析专题:计算效应量的大小

4371 阅读 2020-08-09 12:20:03 上传

以下文章来源于 荷兰心理统计联盟

尽管通过meta软件包调用metabin或metacont函数,可以计算出每个研究中的个体效应大小(individual effect sizes),但一些论文却没有以正确的格式报告这些效应量数据。特别是,一些较老的文章可能只报告了t检验,ANOVA方差分析或χ2检验的结果。不过,如果文章中报告了足够多的数据,我们也可以通过这些数据计算出效应量大小(例如,Hedges’ g)和标准误差(SE)。然后,使用Metagen函数将其作为预计算的效应量(pre-calculated effect sizes)用于meta分析(请参阅第4.1.1章)。


Hedges’g值

在处理连续的结果数据时,通常会计算标准化平均差异(standardized mean difference,SMD)作为每个研究的结果及汇总指标(summary measure)(Borenstein et al. 2011)。常用的SMD值如下。

在单次试验中计算SMD时,常用格式是Cohen’ d(Cohen 1988)。但是,在小规模研究中,采用这种简易方式计算的SMD会显示出轻微的偏差,高估了效应量(Hedges 1981)。

Hedges'g是类似的汇总指标,但可以控制这种偏差。它使用略有不同的公式来计算合并方差Spooled,S∗pooled。根据Hedges和Olkin的公式,可以进行从d到g的转换(Hedges and Olkin 1985)。

注:Hedges’g是meta分析中常用的格式,也是RevMan中的标准输出格式。因此,我们强烈建议您在元分析中也使用此度量方式。在meta的metabin和metacont函数中,如果我们设置sm=“SMD”,则会自动计算出每个研究的Hedges’g。但是,如果您使用metagen函数,则首先需要自己计算出每个研究的Hedges’g。

为了计算效应大小,我们将使用Daniel Lüdecke的esc软件包(Lüdecke2018)。因此,请首先使用install.packages(“ esc”)命令安装此软件包,然后将其加载到库中。

    library(esc)


    15.1  根据Mean和SD计算Hedges’g


    根据两个试验组的Mean,Standard Deviation和ngroup计算Hedges’g,可以使用esc_mean_sd函数和以下参数。

    ·grp1m:第一组的Mean(例如干预)。

    ·grp1sd:第一组的Standard Deviation。

    ·grp1n:第一组的sample size。

    ·grp2m:第二组的Mean。

    ·grp2sd:第二组的Standard Deviation。

    ·grp2n:第二组的sample size。

    ·totalsd:如果未报告每个试验组Standard Deviation,则为full sample standard deviation。

    ·es.type:我们想要计算的效果量度。在我们的例子中是“g”。但是我们也可以使用“d”来计算Cohen’s d。

    代码示例如下:

      esc_mean_sd(grp1m = 10.3, grp1sd = 2.5, grp1n = 60,grp2m = 12.3, grp2sd = 3.1, grp2n = 56, es.type = "g")
      ## ## Effect Size Calculation for Meta Analysis## ##      Conversion: mean and sd to effect size Hedges' g##     Effect Size:  -0.7082##  Standard Error:   0.1916##        Variance:   0.0367##        Lower CI:  -1.0837##        Upper CI:  -0.3326##          Weight:  27.2374


      15.2  根据回归系数(regression coefficient)计算Hedges’g


      15.2.1非标准化回归系数(Unstandardized regression coefficients)

      我们也可以根据非标准化或标准化回归系数计算Hedges'g(Lipsey and Wilson 2001)。

      对于非标准化的回归系数,我们可以使用esc_B函数和以下参数:

      ·b:非标准化系数b(the “treatment” predictor)。

      ·sdy:因变量y(例如,结果变量)的standard deviation。

      ·grp1n:第一组参与者的数量。

      ·grp2n:第二组参与者的数量。

      ·es.type:我们想要计算的效果量度。在我们的例子中是“g”。但是我们也可以使用“d”来计算Cohen’s d。

      代码示例如下:

        esc_B(b=3.3,sdy=5,grp1n = 100,grp2n = 150,es.type = "g")
        ## ## Effect Size Calculation for Meta Analysis## ##      Conversion: unstandardized regression coefficient to effect size Hedges' g##     Effect Size:   0.6941##  Standard Error:   0.1328##        Variance:   0.0176##        Lower CI:   0.4338##        Upper CI:   0.9544##          Weight:  56.7018


        15.2.2标准化回归系数(standardized regression coefficients)

        对于非标准化的回归系数,我们可以使用esc_beta函数与以下参数:

        ·beta:标准化系数β(the “treatment” predictor)。

        ·sdy:因变量y(例如,结果变量)的标准偏差(standard deviation)。

        ·grp1n:第一组参与者的数量。

        ·grp2n:第二组参与者的数量。

        ·es.type:我们想要计算的效果量度。在我们的例子中是“g”。但是我们也可以使用“d”来计算Cohen’s d。

        代码示例如下:

          esc_beta(beta=0.7, sdy=3, grp1n=100, grp2n=150, es.type = "g")
          ## ## Effect Size Calculation for Meta Analysis## ##      Conversion: standardized regression coefficient to effect size Hedges' g##     Effect Size:   1.9868##  Standard Error:   0.1569##        Variance:   0.0246##        Lower CI:   1.6793##        Upper CI:   2.2942##          Weight:  40.6353


          15.3   根据卡方检验(Chi-square)计算比值比(Odd’s Ratio)


          要计算卡方检验中的比值比或任何其他类型的效应大小度量,我们可以使用带有以下参数的esc_chisq 函数:

          chisq: 卡方值 (或仅用 参数p)

          • p: 卡方p值 或 phi 值 (或仅用 参数chisq)

          totaln: 总样本量

          es.type: 结果返回的效应量度 (在本例中用"cox.or",即以Cox比列风险回归得到的比值比)

          代码示例如下:

            ## ## Effect Size Calculation for Meta Analysis## ##      Conversion: chi-squared-value to effect size Cox odds ratios##     Effect Size:   2.9858##  Standard Error:   0.3478##        Variance:   0.1210##        Lower CI:   1.5101##        Upper CI:   5.9036##          Weight:   8.2667


            15.4   根据单因素方差分析(one-way ANOVA)计算Hedges’g值


            我们可以根据两组单因素方差分析的F值推导出标准化平均差(SMD)。只要你找到F值对应的自由度(df),就可以检测这些方差分析结果。在两组的单因素方差分析中,自由度应该总是从1开始(比如 F1,147= 5.31)。这个转换的公式如下:

            根据F值计算Hedges’g值,可以使用带有以下参数的esc_f函数:

            f: 方差分析的F值

            grp1n: 第一组的参与者人数

            grp2n: 第二组的参与者人数

            totaln: 总样本量(如果未报告各个组的人数)

            es.type: 我们要计算的效应量度。在本例中用 "g"。但是我们也可以使用 "d" 来计算Cohen’s d。

            代码示例如下:

              esc_f(f=5.04,grp1n = 519,grp2n = 528,es.type = "g")## ## Effect Size Calculation for Meta Analysis## ##      Conversion: F-value (one-way-Anova) to effect size Hedges' g##     Effect Size:   0.1387##  Standard Error:   0.0619##        Variance:   0.0038##        Lower CI:   0.0174##        Upper CI:   0.2600##          Weight: 261.1022


              15.5   根据均值(Mean)和标准误(SE)计算Hedges’g值


              根据均值和标准误计算Hedges’g时,我们简单地利用了这样一个事实:当考虑样本量时,标准误不超过标准差。

              我们可以使用带有以下参数的esc_mean函数,来计算Hedges’g值:

              grp1m: 第一组的均值

              grp1se: 第一组的标准误

              grp1n: 第一组的样本量大小

              grp2m: 第二组的均值

              grp2se: 第二组的标准误

              grp2n: 第二组的样本量大小

              es.type: 我们要计算的效应量度。在本例中用 "g"。但是我们也可以使用 "d" 来计算Cohen’s d。

              代码示例如下:

                esc_mean_se(grp1m = 8.5, grp1se = 1.5, grp1n = 50,  grp2m = 11, grp2se = 1.8, grp2n = 60, es.type = "g")## ## Effect Size Calculation for Meta Analysis## ##      Conversion: mean and se to effect size Hedges' g##     Effect Size:  -0.1998##  Standard Error:   0.1920##        Variance:   0.0369##        Lower CI:  -0.5760##        Upper CI:   0.1765##          Weight:  27.1366


                15.6 根据相关(correlation)计算Hedges’g值


                对于被试人数相等的两组(n1=n2),我们可以利用下面的公式从点二列相关(the pointbiserial correlation)中得出标准化平均差(SMD)。

                当被试数不相等时:

                要将rpb值转化为Hedges’g值,我们可以使用带有以下参数的esc_rpb函数:

                r: r值,必须给出r或者它的p值

                p: 相关性p值,必须给出r或者它的p值

                grp1n: 第一组的被试人数

                grp2n: 第二组的被试人数

                totaln: 总样本量(如果未报告各个组的人数)

                es.type: 我们要计算的效应量度。在本例中用 "g"。但是我们也可以使用 "d" 来计算Cohen’s d。

                代码示例如下:

                  esc_rpb(r = 0.25, grp1n = 99, grp2n = 120, es.type = "g")## ## Effect Size Calculation for Meta Analysis## ##      Conversion: point-biserial r to effect size Hedges' g##     Effect Size:   0.5170##  Standard Error:   0.1380##        Variance:   0.0190##        Lower CI:   0.2465##        Upper CI:   0.7875##          Weight:  52.4967


                  15.7   根据独立样本t检验计算Hedges’g值


                  标准化平均差(SMD)也可以从独立样本t检验得出,公式如下:

                  要根据t检验计算Hedges’g值,我们可以使用带有以下参数的esc_t函数:

                  t: t检验中的t值,必须给出t或者它的p值

                  p:t检验中的p值,必须给出t或者它的p值

                  grp1n: 第一组的被试人数

                  grp2n: 第二组的被试人数

                  totaln: 总样本量(如果未报告各个组的人数)

                  es.type: 我们要计算的效应量度。在本例中用 "g"。但是我们也可以使用 "d" 来计算Cohen’s d。

                  代码示例如下:

                    esc_t(t = 3.3, grp1n = 100, grp2n = 150,es.type="g")## ## Effect Size Calculation for Meta Analysis## ##      Conversion: t-value to effect size Hedges' g##     Effect Size:   0.4247##  Standard Error:   0.1305##        Variance:   0.0170##        Lower CI:   0.1690##        Upper CI:   0.6805##          Weight:  58.7211


                    15.8   根据Cohen’s d计算Hedges’g值


                    我们可以使用Hedges和Olkin的公式直接将Cohen’s d转化为Hedges’g:

                    这可以在R中使用带有以下参数的hedges_g函数:

                    d: Cohen’s d值

                    totaln: 总样本量N

                    代码示例如下:

                      hedges_g(d = 0.75, totaln = 50)## [1] 0.7382199


                      15.9  在多重比较情况下计算效应值


                      许多随机对照试验不仅包括单个干预组和对照组,而且将两种或多种干预措施的效果与对照组进行了比较。在这种情况下,将一项研究中的干预组和对照组的所有条件进行比较,简单地纳入到一项元分析可能会很诱人。但是,研究人员应该放弃这种做法,因为这意味着对照组在元分析中被使用了两次,从而“双倍计算”(double-counting)了对照组的参与者。效应大小是相关的,不是独立的,双倍计算对照组是将其视为参与者源自于独立样本,这会导致分析单位误差 (unit-of-analysis error)。


                      有两种方法可以解决此问题:


                      拆分对照组的参与者人数N:在某种程度上控制分析单位误差 (unit-of-analysis error) 的一种方法是在两个干预组之间拆分对照组的参与者数量。因此,如果您的对照组有N = 50个参与者,则可以将对照组分为两个均值和标准偏差相同的对照组,每个组有N = 25个参与者。在此准备步骤之后,您可以计算每个干预组的效果大小。由于此过程只能部分消除分析单位误差,因此通常不建议这样做。但是,此程序的一大优点是它使研究部分之间的异质性研究成为可能。


                      另一个选择是把干预组的结果合并成一组,与对照组进行比较。尽管此过程存在实际操作的的局限性(有时,这意味着要把来自极其不同类型的干预组的结果合并为一组),但摆脱了分析单位误差的问题,因此从统计学的角度出发建议这样做。具体计算如下:

                          合并效果大小(合并的均值,标准偏差和N),使用以下公式:

                      由于这些公式很长,您可以使用pool.groups函数,该函数会自动为您进行合并。该函数是dmetar软件包的一部分。如果已经安装了dmetar包,必须先将其加载到库中。

                        library(dmetar)

                        如果您不想使用dmetar包,则可以使用书中对应位置链接中的源代码。此案例中,R中没有此函数,因此我们必须通过将代码完整复制并粘贴到RStudio左下方窗格的控制台中。使用此功能需要指定以下参数:

                        n1:第一组中的N

                        n2:第二组中的N

                        m1:第一组的平均值

                        m2:第二组的平均值

                        sd1:第一组的标准偏差

                        sd2:第二个要素的标准偏差

                        代码示例如下:

                          pool.groups(n1=50,            n2=50,            m1=3.5,            m2=4,            sd1=3,            sd2=3.8)

                          Mpooled

                          SDpooled

                          Npooled

                          3.75

                          3.415369

                          100

                          如果一项研究有两个以上要合并的干预组(例如,四个组,具有三种不同的干预项目intervention arms),则可以先合并前两个干预组的效应量数据,然后跟来自第三组的数据再次进行合并。

                          可以将pool.groups的输出另存为一个对象,然后再使用$操作符,具体操作如下:

                          首先,合并第一和第二干预组。将输出另存为res

                            res <- pool.groups(n1 = 50,                   n2 = 50,                   m1 = 3.5,                   m2 = 4,                   sd1 = 3,                   sd2 = 3.8)

                                然后,使用保存在res中的合并数据与第三组中的数据合并,使用$运算符访问保存在res中的不同值。

                              pool.groups(n1 = res$Npooled,            n2 = 60,            m1 = res$Mpooled,            m2 = 4.1,            sd1=res$SDpooled,            sd2 = 3.8)

                              Mpooled

                              SDpooled

                              Npooled

                              3.88125

                              3.556696

                              160


                              15.10  根据效应大小计算需要治疗的人数(Number Needed to Treat, NNT)


                              效应量如Cohen’s d或者Hedges’g很难从临床角度来解释。g=0.35对患者、医疗专业人员或其他利益相关者的影响究竟意味着什么?通过计算需要治疗的人数(NNT) ,有助于对该结果的理解,即为了避免一个额外的负面事件(如复发)或达到一个额外的正面事件(如症状缓解),必须对多少额外的患者进行干预或治疗。有两种方法可以根据效应大小(如Cohen’s d或者Hedges’g)计算需要治疗的人数。


                              方法一:根据Kraemer和Kupfer(2006),根据曲线下的面积(the Area Under the Curve,AUC)计算NNT。该面积表示接受治疗的患者比对照组患者获得更好结果的概率。这种方法允许直接根据d、g计算NNT,不需要任何额外的变量。


                              方法二:根据Furukawa,可以通过使用一个合理估计值CER根据d计算出NNT,大多数情况下CER是控制组的假设反应率(the assumed response rate in the control group)。

                              注:有研究表明,Furukawa的方法要比Kraemer 与 Kupfer的方法好(Furukawa and Leucht 2011)。如果可以假设一个合理的CER值,Furukawa的方法更好。


                              方法三:当使用事件数据时,首先计算CER或者实验组事件率(experimental group event rate),然后根据NNT的标准定义

                              15.10.1 NNT 函数

                              为了使用这三种方法计算NNT,可以使用NNT函数。该函数是dmetar包的一部分。如果您已经安装了软件包,那么您必须首先将其加载到库中。

                                library(dmetar)

                                如果您不想使用dmetar包,可以找到这个函数的源代码。通过将整个代码复制粘贴到RStudio左下方窗格的控制台中,然后点击Enter。


                                Kraemer 与 Kupfer 的方法

                                要使用Kraemer与Kupfer的方法,我们只需为函数提供效应量大小(d或g)。代码示例如下:

                                  NNT(d = 0.245)## Kraemer & Kupfer's method used.## [1] 7.270711

                                  Furukawa的方法

                                  一旦输入CER值,Furukawa的方法就会被自动使用。代码示例如下:

                                    NNT(d = 0.245, CER = 0.35)## Furukawa's method used.## [1] 10.61533

                                    二进制事件数据(Binary event data)

                                    使用二进制事件数据来直接计算NNT,只需要实验组event.e的事件率和实验组的总样本,n.e,以及对照组在event.c和n.c中的相同信息。代码示例如下:

                                      NNT(event.e = 10, event.c = 20, n.e = 200, n.c = 200)## [1] 20


                                      15.11  根据P值(p-value)计算标准误(Standard Error)


                                      当从已发表的文章中提取效应量时,有时一项研究只报告了效应量(例如,Cohen’s d)和p值。然而,为了在元分析中汇总结果,我们需要一些关于效应量的离散度的度量,即标准误(SE)。
                                      根据Altman和Bland(2011)的公式,标准误可以通过诸如Cohen’s d或风险比(Risk Ratio,RR)等效应量计算出来。se.from.p函数可以实现这一功能。该函数是dmetar包的一部分。如果您已经安装了软件包,那么您必须首先将其加载到库中。
                                        library(dmetar)

                                        如果您不想使用dmetar包,可以找到这个函数的源代码,并将整个代码复制粘贴到RStudio左下方窗格的控制台,然后点击Enter。然后,使用该函数还需要esc包。


                                        基于差异的效果量计算

                                        例子:假设我们有一项研究,被试N=75,效应量d=0.71,p=0.013,标准误计算过程如下:

                                          se.from.p(effect.size = 0.71,           p = 0.013,           N = 75,          effect.size.type= "difference")

                                          EffectSize

                                          StandardError

                                          StandardDeviation

                                          LLCI


                                          0.71

                                          0.2860464

                                          2.477234

                                          0.1493491



                                          基于比率的效应量计算

                                          例子:假设我们有一项研究,200名被试报告效应量为OR=0.91与p=0.05,我们可以计算标准误如下:

                                            se.from.p(effect.size = 0.91,           p = 0.05,           N = 200,          effect.size.type= "ratio")

                                            logEffectSize

                                            logStandardError

                                            logStandardDeviation


                                            -0.09431068

                                            0.04820028

                                            0.6816549


                                            从输出中可以看到,该函数自动计算了对数变换效应大小(the log-transformed effect size)和标准误,用到了metagen函数(参见第4.3.3 章)。


                                            ////////////////////////////

                                            翻译:

                                            卢毅       温州医科大学

                                            侯中卫    河北工业大学

                                            赵智睿    鲁东大学

                                            刘金晓    鲁东大学

                                            张美美

                                            校对:葛林洁    河北工业大学

                                            排版:秦雅慧


                                            往期精选

                                            R语言元分析专题第十四章:结构方程模型元分析

                                            R语言元分析专题第十三章:贝叶斯元分析

                                            R语言元分析专题第十二章:多水平元分析

                                            R语言元分析专题第十一章:网络元分析

                                            R语言元分析专题第十章:偏倚风险汇总



                                            点赞
                                            收藏
                                            表情
                                            图片
                                            附件