1 min read

"因果推断:ggdag包可视化因果关系

{r setup, include=FALSE} knitr::opts_chunk$set(eval = FALSE) @dagitty, @ggdag 可以用于概率图分析1,可以配合 @Koller2018 的课学习。

{r message=FALSE, warning=FALSE} library(ggdag) library(dagitty)

dagittyggdag的对比

```{r} dag <- dagitty(

dag { y <- x <- z1 <- v -> z2 -> y z1 <- w1 <-> w2 -> z2 x <- w1 -> y x <- w2 -> y x [exposure] y [outcome] }

) tidy_dag <- tidy_dagitty(dag) tidy_dag ggdag(tidy_dag)

+ 这里的代码,类似于 @DiagrammeR 开发的包`DiagrammeR`。
+ `<->`表示双向箭头。

```
tidy_ggdag <-
  ggdag::dagify(
    y ~ x + z2 + w2 + w1,
    x ~ z1 + w1,
    z1 ~ w1 + v,
    z2 ~ w2 + v,
    w1 ~~ w2, # bidirected path
    exposure = "x",
    outcome = "y
    ) %>%
  tidy_dagitty()

tidy_ggdag
ggdag(tidy_ggdag)
  • ggdag函数是内置ggplot2的,因此非常方便。
  • ~~表示双向箭头。
  • y ~ x + z2 + w2 + w1表示这四个变量都导致y,类似于回归方程中,自变量和因变量的关系。
  • 而且这里不需要string格式的输入。

加label

confounder_triangleggdag的一个内置函数, @Barrett2018 给了一个加上label的例子。

{r} confounder_triangle(x = "Coffee", y = "Lung Cancer", z = "Smoking") %>% ggdag_dconnected(text = FALSE, use_labels = "label")

批量label

```{r} coffee_dag <- dagify(cancer ~ smoking, smoking ~ addictive, coffee ~ addictive, exposure = “coffee”, outcome = “cancer”, labels = c(“coffee” = “Coffee”, “cancer” = “Lung Cancer”, “smoking” = “Smoking”, “addictive” = “Addictive \nBehavior”)) %>% tidy_dagitty(layout = “tree”)

ggdag(coffee_dag, text = FALSE, use_labels = “label”) ```

参考文献


  1. @ggdag 是在 @dagitty 的基础上进行开发的。 ↩︎