# install.packages("pak")
pak::pak(c(
"r-causal/causalworkshop",
"r-causal/ggdag",
"r-causal/halfmoon",
"r-causal/propensity",
"r-causal/tipr",
"LucyMcGowan/touringplans"
))Causal Inference in R 中文版
前言
欢迎来到 Causal Inference in R 中文版。本书中文版内容的翻译由陆震完成并维护。目前本书中文版内容还没有纸质出版,如果读者是出版人员,并有意愿负责出版本书,请通过 联系我。
回答因果问题对于科学和商业目的都至关重要,但随机临床试验和 A/B 测试等技术并不总是可行或成功。本书中的工具将帮助读者使用 R 编程语言,更好地基于观察性数据进行因果推断。读完本书后,我们希望帮助你:
- 提出更好的因果问题;
- 理解因果推断所需的假设;
- 识别你希望对其进行推断的目标人群;
- 拟合因果模型并检查其中的问题;
- 在所用技术可能并不完美的情况下开展敏感性分析。
本书面向学术研究者和数据科学家。尽管这两类场景中的问题可能不同,但许多技术是相同的:因果推断既有助于提出关于癌症的问题,也有助于提出关于点击的问题。我们使用来自医学、经济学、科技和其他领域的混合例子来说明:你需要一个清楚的因果问题,并愿意透明地说明自己的假设。
你会在本书中学到很多,但讽刺的是,你不会学到太多关于如何开展随机试验的内容,而随机试验是进行因果推断的最佳工具之一。随机试验及其近亲 A/B 测试(在科技行业中很常见)之所以有吸引力,是因为它们能减轻许多为了有效推断而需要作出的假设。它们在设计上也足够复杂,值得拥有自己的学习资源。相反,我们会聚焦于观察性数据,在这类数据中,我们通常无法从随机化中受益。如果你对随机化技术感兴趣,也先不要把这份资源放到一边:许多为观察性数据设计的因果推断技术,同样能改进随机化分析。
我们对作为读者的你作出了一些假设:
- 你熟悉 R 包 tidyverse 生态系统及其总体理念。例如,本书会大量使用 dplyr 和 ggplot2,但不会解释它们的基础语法。若想了解如何开始使用 tidyverse,我们推荐 R for Data Science。
- 你熟悉 R 中的基础统计建模。例如,我们会用
lm()和glm()拟合许多模型,但不会讨论它们的工作原理。如果你想进一步了解 R 强大的建模函数,我们推荐阅读 Tidy Modeling with R 中的 “A Review of R Modeling Fundamentals”。 - 我们还假设你熟悉其他 R 基础知识,例如编写函数。R for Data Science 也是学习这些主题的好资源。(若想更深入学习 R 编程语言,我们推荐 Advanced R,不过本书并不假设你已经掌握其中内容。)
我们还会使用 tidymodels 生态系统中的工具,这是一组与 tidyverse 相关、用于建模的 R 包。我们并不假设你以前用过它们。tidymodels 也聚焦于预测建模,因此其中许多工具并不适合本书。尽管如此,如果你对这个主题感兴趣,我们推荐 Tidy Modeling with R。
关于因果推断,还有几本其他优秀书籍。本书的不同之处在于它聚焦于 R,但从其他视角理解这一领域仍然很有帮助。你可能会喜欢以下几本书:
第一本书聚焦于流行病学。后两本书聚焦于计量经济学。关于因果图,我们还推荐 The Book of Why Pearl and Mackenzie (2018)。
安装
本书使用了几个正在积极开发中的包。要安装所需的开发版本,请使用:
这些开发版本包含本书通篇使用的最新功能和错误修复。
约定
现代 R 特性
本书使用 R 4.1.0 及以上版本中的两个现代 R 特性。第一个是原生管道 |>。这个 R 特性类似于 tidyverse 的 %>%,后者你可能更熟悉。在典型情况下,两者可以互换使用。一个显著差异是,|> 使用 _ 符号来指向管道结果,例如 .df |> lm(y ~ x, data = _)。更多内容见这篇 Tidyverse 博客文章。
我们使用的另一个现代 R 特性是原生 lambda,它是一种编写短函数的方式,形式如 \(.x) do_something(.x)。它类似于 purrr 的 ~ lambda 记法。还需要认识到,原生 lambda 与 function(.x) do_something(.x) 完全相同,其中 \ 是 function 的简写。更多内容见 R for Data Science 关于迭代的章节。
主题
本书中的图使用统一主题,但我们不会在每个代码块中都包含这些设置;这意味着如果你运行某个可视化的代码,可能会得到外观略有不同的结果。我们设置了以下与 ggplot2 相关的默认值:
options(
# 将 ggplot2 中的默认颜色设置为色盲友好
# Okabe-Ito 和 Viridis 调色板
ggplot2.discrete.colour = ggokabeito::palette_okabe_ito(),
ggplot2.discrete.fill = ggokabeito::palette_okabe_ito(),
ggplot2.continuous.colour = "viridis",
ggplot2.continuous.fill = "viridis",
# 设置主题字体和大小
book.base_family = "sans",
book.base_size = 14
)
library(ggplot2)
# 设置默认主题
theme_set(
theme_minimal(
base_size = getOption("book.base_size"),
base_family = getOption("book.base_family")
) %+replace%
theme(
panel.grid.minor = element_blank(),
legend.position = "bottom"
)
)我们还屏蔽了几个来自 ggdag、且我们希望自定义的函数:
theme_dag <- function() {
ggdag::theme_dag(base_family = getOption("book.base_family"))
}
geom_dag_label_repel <- function(..., seed = 10) {
ggdag::geom_dag_label_repel(
aes(x, y, label = label),
box.padding = 3.5,
inherit.aes = FALSE,
max.overlaps = Inf,
family = getOption("book.base_family"),
seed = seed,
label.size = NA,
label.padding = 0.1,
size = getOption("book.base_size") / 3,
...
)
}许可证
本作品采用 CC BY-NC 4.0 许可:“本许可证要求再使用者注明创作者。它允许再使用者出于非商业目的,以任何媒介或格式分发、混编、改编和基于本材料进行创作。”
本书中的代码也可根据 MIT license 使用。根据 MIT 许可证,只要注明来源,你可以在自己的工作中自由使用这些代码。