一般说明
一般说明包含与所涵盖主题相关的相关背景信息、见解、轶事、注意事项或要点信息。
“问题不是通过提供新的信息来解决, 而是通过安排我们早已知道的事情来解决。”
– 路德维希·维特根斯坦, 哲学研究
我 们的世界是复杂的,这是一个显而易见的观察。科学研究也不例外;在大多数研究领域,我们经常面临看似无法克服的先前研究。来自不同研究的证据可能是相互冲突的,并且很难理解各种信息来源。
因此,证据合成方法在许多学科中起着至关重要的作用,例如社会科学、医学、生物学或计量经济学。Meta分析,一种用于合并各种研究或分析结果的统计程序,已成为许多研究领域不可或缺的工具。Meta分析可能非常重要,特别是当它们指导实践决策或未来的研究工作时。因此,许多应用研究人员在其“统计工具箱”中拥有一些Meta分析技能,而另一些人则希望学习如何在自己的研究领域中执行它们。Meta分析已经变得非常普遍,以至于许多研究生和本科生已经学习如何将其作为课程的一部分进行——有时热情程度各不相同。
Meta分析的执行方式,就像整个统计计算一样,在过去几十年中发生了重大变化。这与开源、协作统计软件的兴起有很大关系,主要是以 R 统计编程语言和环境的形式。R 生态系统允许世界各地的研究人员和统计学家构建自己的包,并免费提供给所有人。这导致了 R 语言中现成的统计软件的惊人增长。在我们撰写本文时,CRAN 任务视图 列出了 130 多个专门用于 Meta 分析的包。
在 R 中,你可以做任何事情——字面意思。它是一种完整的编程语言,因此如果你没有找到想要执行的操作的函数,你可以轻松地自己编写它。然而,对于 Meta 分析,几乎没有必要再这样做了。仅一小部分 R 包已经提供了你可以在当前“最先进”的 Meta 分析程序中找到的所有功能——而且是免费的。更重要的是,目前只能在 R 中应用许多新颖的 Meta 分析方法。简而言之:R 环境为研究人员提供了更多的 Meta 分析工具。在最好的情况下,这使我们能够从数据中得出更可靠的结论,从而更好地为决策提供信息。
这就提出了一个问题,为什么不是每个人都使用 R 进行 Meta 分析。我们认为有两个主要原因:便利性和焦虑(有时两者兼而有之)。这两个原因都非常容易理解。大多数 Meta 分析师是应用研究人员;而不是统计学家或程序员。学习一种晦涩且看似复杂的编程语言的想法可能会起到威慑作用。Meta 分析方法也是如此,它们具有特殊的理论背景、无数的分析选择以及需要正确解释的不同统计数据。
通过本指南,我们希望表明许多这些担忧是没有根据的,并且学习如何在 R 中进行 Meta 分析是值得的。我们希望本指南能帮助你学习掌握 R 中自己的 Meta 分析项目所需的技能。我们还希望本指南能让你更容易地不仅学习何时应用 Meta 分析方法,而且还要学习为什么我们应用它们。最后但并非最不重要的一点是,我们将本指南视为一种尝试,向你展示 Meta 分析方法和 R 编程不仅仅是不便之处,而是一个值得探索的迷人主题。
本指南不是为 Meta 分析专家或统计学家编写的。我们不假设你对 Meta 分析方法有任何特殊的背景知识。只需要对基本数学和统计概念有基本的了解即可。例如,我们假设你以前听说过“平均值”、“标准差”、“相关性”、“回归”、“\(p\)-值”或“正态分布”之类的东西。如果这些术语让你想起了一些事情,那么你应该可以开始了。如果你真的从头开始,你可能想首先看看 Robert Stinerock 的统计初学者指南 [@stinerock2018statistics],以获得包括 R 中的实践示例的全面介绍——或者你选择的其他一些介绍性统计教科书。
尽管我们试图使其尽可能地简洁,但我们有时会使用数学公式和统计符号。但不要惊慌。公式和希腊字母乍一看似乎令人困惑,但它们通常是精确描述某些 Meta 分析方法背后思想的好方法。见过这些公式,并且知道它们代表什么,也将使你更容易理解你可能想要进一步阅读的更高级的文本。当然,我们尽最大努力始终详细解释某些符号或字母代表什么,以及特定公式想要告诉我们什么。在本书的附录 @ref(symbollist) 中,你可以找到我们使用的符号列表,以及它们代表什么。在后面的章节中,尤其是高级方法部分,我们需要变得更加技术化,以解释某些应用技术背后的思想。尽管如此,我们确保始终包括有关这些部分中使用的数学和统计概念的一些背景信息。
不需要事先了解 R(或一般的编程)。在本指南中,我们尝试提供一个温和的 R 技能介绍,你需要这些技能来编写自己的 Meta 分析代码。我们还提供对足够资源的引用,以便继续学习。此外,我们将向你展示如何设置一个免费的计算机程序,该程序允许你在你的 PC 或 Mac 上方便地使用 R。
正如标题所说,我们的书侧重于 Meta 分析的“执行”部分。我们的指南旨在成为应用研究人员、学生和想要开始使用 R 进行分析的数据科学家可以访问的资源。然而,Meta 分析是一个庞大且多方面的课题,因此很自然地,并非所有内容都可以在本指南中涵盖。对于本书,局限性尤其与三个领域相关:
尽管我们提供了关于这些主题的简短入门,但我们没有详细介绍如何定义研究问题、系统地搜索和包括用于 Meta 分析的研究,以及如何评估它们的质量。这些主题中的每一个都值得拥有自己的书籍,幸运的是,已经存在许多有用的资源。因此,我们仅概述了在收集 Meta 分析数据时的重要考虑因素和陷阱,并将你推荐给处理细节的足够资源。
本指南的第二个局限性与其技术性水平有关。本书明确地是为“凡人”而写的。我们的目标是向你展示何时、如何以及为什么应用某些 Meta 分析技术,以及它们的陷阱。我们还试图提供对我们所涵盖技术的易于理解的概念性理解,仅在有利于此任务时才诉诸更多技术细节。很自然地,这意味着指南的某些部分不会包含专家级 Meta 分析师和统计学家可能需要的对技术的深入研究。尽管如此,我们还在每个章节中为感兴趣的读者提供了对更高级资源和出版物的引用。
一本书的内容在某种程度上总是反映其作者的背景和经验。我们相信,我们在此涵盖的方法适用于范围广泛的研究领域和学科。尽管如此,我们想披露本书的四位作者主要精通心理学、精神病学、医学和干预研究领域的当前研究。“现实世界”的用例和我们在本书中涵盖的示例因此集中在我们熟悉的领域的主题上。好消息是,Meta 分析方法(假设一些我们将会涵盖的假设)在很大程度上与数据来自的研究领域无关,并且可以用于各种类型的结局指标。尽管如此,尽管我们尽了最大的努力使本指南尽可能广泛地适用于尽可能多的应用研究学科,但本书中涵盖的某些方法可能仍然与某些研究领域比其他研究领域更相关。
除其他外,本指南将涵盖以下主题:
什么是 Meta 分析,以及它为什么被发明出来。
Meta 分析的优点和常见问题。
如何指定 Meta 分析的研究问题,以及如何进行研究搜索。
如何设置 R,以及一个允许你以方便的方式使用 R 的计算机程序。
如何将你的 Meta 分析数据导入到 R 中,以及如何通过代码操作它。
什么是效应量,以及如何计算它们。
如何在固定效应和随机效应 Meta 分析中汇集效应量。
如何分析 Meta 分析的异质性,以及如何使用亚组分析和Meta 回归来探索它。
选择性结局报告的问题,以及如何解决它们。
如何执行高级类型的 Meta 分析技术,例如“多层”Meta 分析、Meta 分析结构方程建模、网络 Meta 分析或贝叶斯 Meta 分析。
如何报告你的 Meta 分析结果,并使其具有可重复性。
本书旨在以“线性”方式阅读。我们建议你从关于 Meta 分析和 R 基础知识的第一章开始,然后继续逐章阅读本书。直接跳到实践章节可能很诱人,但通常不建议这样做。在教学生和研究人员如何进行他们的第一次 Meta 分析时,我们发现对这项技术以及 R Studio 环境的基本熟悉是避免以后出现挫折的必要之恶。如果你没有 Meta 分析和 R 编程的经验,这一点尤其正确。有经验的 R 用户可以跳过介绍 R 和 R Studio 的 @ref(discovering-R) 章。但是,无论如何,通过本章进行快速复习肯定不会有任何坏处。
虽然所有章节实际上都是独立的,但我们有时会参考前面章节中涵盖的主题。尤其是高级方法部分中的章节假定你熟悉我们之前涵盖的理论概念。
本书的最后一节包含对你的 Meta 分析有用的工具。这并不意味着这些主题是你在执行 Meta 分析时必须考虑的最后一件事。我们只是将这些章节放在最后,因为它们主要用作你自己的 Meta 分析项目的参考作品。我们在本书中与主题相关的部分链接到这些工具。
本书附带一个名为 {dmetar} 的伴随 R 包。该软件包主要有两个功能。首先,它旨在让你的生活更轻松。尽管那里有非常棒的 R 包用于 Meta 分析,具有广泛的功能,但仍然有一些事情目前在 R 中不容易实现,至少对于初学者来说是这样。
{dmetar} 包旨在通过提供一些额外的功能来弥合这一差距,从而促进这些事情。其次,该软件包还包含我们用于本书中显示的实践示例的所有数据集。在 @ref(dmetar) 章中,详细介绍了 {dmetar} 包,我们向你逐步展示如何安装该软件包。尽管我们将确保没有重大更改,但 {dmetar} 仍在积极开发中,因此不时查看 软件包网站 以检查是否有新的或改进的功能可用于你的 Meta 分析可能会有所帮助。
虽然建议这样做,但安装该软件包并不是必不可少的。无论我们在本书中使用 {dmetar} 的地方,我们还将为你提供函数的原始代码,或我们正在使用的数据集的下载链接。
在整本书中,使用了一组文本框。
一般说明
一般说明包含与所涵盖主题相关的相关背景信息、见解、轶事、注意事项或要点信息。
重要信息
这些框包含你必须牢记的警告、问题、缺点或陷阱信息。
问题
在每章之后,此框将包含一些问题,你可以通过这些问题来测试你的知识。这些问题的答案可以在本书末尾的附录 A中找到。
{dmetar} 说明
每当使用伴随 R 软件包中包含的函数或数据集时,都会出现 {dmetar} 说明框。这些框还包含函数代码的 URL,或者供未安装该软件包的读者使用的数据集下载链接。
我该如何报告这个?
这些框包含关于如何在你的论文或研究文章中报告 R 输出的建议。
在整本书中都遵循一些约定。
\[~\]
{packages}
所有 R 软件包都以粗体书写,并放在大括号中。这是在 R 社区中编写软件包名称的常见方式。
\[~\]
R 代码
我们在 R 中定义的所有 R 代码或对象都以这种等宽字体书写。
\[~\]
## R 输出
在运行 R 代码后收到的输出也使用相同的等宽字体。但是,我们使用两个数字符号(井号)将其与 R 输入区分开来。
\[~\]
\(公式\)
这种衬线字体专用于公式、统计数据和其他形式的数学符号。
不可否认的是,在 R 中进行 Meta 分析的道路有时可能是一条坎坷的道路。尽管我们认为有时这种说法被夸大了,但 R 的学习曲线确实很陡峭。统计学很难。我们尽了最大的努力使你学习如何使用 R 进行 Meta 分析的体验尽可能地轻松。但是,这并不能保护你免受有时会感到沮丧的情况。这完全是自然的。我们都必须从头开始。根据我们自己的经验,我们可以向你保证,我们从未见过任何不能学习 R 或如何进行 Meta 分析的人。这只需要练习,并且要理解在任何时候都不会有你“完成”学习的时候。我们相信你。
如果你正在寻找比这条励志信息更实用一些的东西:以下是一些在你遇到本指南无法回答的事情时可以做的事情。
在 R 中迈出第一步时,许多人在第一个红色错误消息开始弹出时感到害怕。这是没有必要的。每个人都一直收到错误消息。与其惊慌失措或将电脑扔出窗外,不如深吸一口气,仔细看看错误消息。通常,只需进行一些调整即可使错误消息消失。你是否在代码中拼写错了什么?你是否忘记关闭括号,或者将某些内容放入引号中?
另外,请确保你的输出实际上是错误消息。R 区分 Error
、Warning
和普通消息。只有第一个意味着你的代码无法执行。Warning
意味着你的代码确实运行了,但是可能出了点问题。消息意味着你的代码确实完全运行了,通常会在函数只是想让你注意它在幕后为你所做的事情时显示。因此,它们也被称为诊断消息。
一位软件开发人员朋友曾经告诉第一作者关于他的职业的这个笑话:“程序员是比普通人更擅长使用谷歌的人”。这个观察结果当然也适用于 R 编程。如果你发现自己无法理解收到的错误或警告消息,请不要犹豫,只需复制并粘贴它,然后进行谷歌搜索。在搜索中添加“R”通常有助于改善结果。另一个不错的选择是 rseek.org,它允许你运行谷歌搜索,其中会自动过滤掉非 R 命中。互联网上的大多数内容都是英文的;因此,如果你的 R 中的错误消息是另一种语言,请运行 Sys.setenv(LANGUAGE = "en")
,然后再次重新运行你的代码。
那里有一个庞大的 R 社区,很可能有人以前遇到过与你相同的问题。如果你想用你的数据做一些具体的事情,但不知道可以用什么 R 命令来做,谷歌也很有帮助。即使对于专家来说,在编写 R 代码时使用谷歌数十次也是绝对正常的。每当你遇到困难时,请不要犹豫这样做。
在谷歌上搜索与 R 相关的问题时,你很快就会发现许多第一个命中会将你链接到一个名为 StackOverflow 的网站。StackOverflow 是一个大型的基于社区的论坛,用于讨论与一般编程相关的问题。在 StackOverflow 上,每个人(包括你)都可以提问和回答问题。
与互联网上的许多其他论坛不同,你在 StackOverflow 上获得的答案通常以目标为导向且有帮助。如果搜索谷歌没有帮助你解决问题,那么在那里提出问题可能是一个不错的解决方案。但是,有一些事情需要记住。首先,在提问时,始终用 [R]
标记你的问题,以便人们知道你在谈论哪种编程语言。另外,在 R 中运行 sessionInfo()
并将你获得的输出附加到你的问题中。这让人们知道你正在使用的 R 和软件包版本,并且可能有助于找到问题。
最后,不要期望过度的友善。许多 StackOverflow 用户是有经验的程序员,他们可能愿意向你指出某些解决方案;但不要期望任何人为你解决问题。也可能有人只是通知你这个主题已经在其他地方讨论过了,向你发送链接,然后继续前进。尽管如此,使用 StackOverflow 通常是获得对你正在处理的特定问题的高质量支持的最佳方式。
顺便说一句,StackOverflow 主要用于讨论编程问题。如果你的问题也有统计学背景,你可以使用 CrossValidated 代替。CrossValidated 的工作方式与 StackOverflow 类似,但主要由统计学和机器学习专家使用。
如果你觉得你的问题与本指南本身有关,你也可以联系我们。这尤其适用于本指南的配套 R 软件包 {dmetar} 的问题。如果你在安装软件包或使用它的某些功能时遇到问题,你可以访问我们的 网站,在那里你可以找到报告问题的方法。当某些问题频繁出现时,我们通常会尝试查看它们并寻找修复方法。已知问题也会显示在本指南在线版本的更正和备注部分(请参阅工作流程部分)。如果我们没有亲自回答你的问题,或者我们花了很长时间才回复你,请不要感到失望。我们每天收到许多与 Meta 分析和我们的软件包相关的问题,因此有时不可能直接回答每一个问题。
我们要感谢 David Grubbs 和 Chapmann & Hall/CRC Press 向我们提出了将我们的在线指南变成你现在正在阅读的印刷书籍的美好想法,并感谢他们提供的宝贵编辑支持。
自 2018 年末我们开始编写在线版本的初步版本以来,许多研究人员和学生与我们分享了他们使用本指南的反馈和经验。这些反馈非常有价值,并极大地帮助我们根据读者的需求进一步定制本书。感谢你们所有人。
我们非常感谢所有参与开发本指南中介绍的 R Meta 分析基础设施的研究人员;但首先也是最重要的是要感谢 {meta} 和 {metafor} 软件包的维护者 Guido Schwarzer 和 Wolfgang Viechtbauer。如果没有你们的努力和奉献,本指南以及整个 R Meta 分析社区都不会存在。
此外,特别感谢华丽的 {robvis} 软件包的作者 Luke McGuinness 编写了关于偏倚风险可视化的额外章节,你可以在本书的配套网站上找到该章节。Luke,我们非常感谢你对这个项目的持续支持。
最后但并非最不重要的一点是,我们要感谢 Lea Schuurmans、Paula Kuper 和 Antonia Sprenger 在本书的开发和编写中为我们提供的支持。
埃尔兰根、阿姆斯特丹、京都和慕尼黑
Mathias, Pim, Toshi & David