2 min read

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

@dagitty, @ggdag 可以用于概率图分析1,可以配合 @Koller2018 的课学习。

library(ggdag)
## Error in `library()`:
## ! there is no package called 'ggdag'
library(dagitty)
## Error in `library()`:
## ! there is no package called 'dagitty'

dagittyggdag的对比

dag <- dagitty(
"
dag {
y <- x <- z1 <- v -> z2 -> y
z1 <- w1 <-> w2 -> z2
x <- w1 -> y
x <- w2 -> y
x [exposure]
y [outcome]
}
"
)
## Error in `dagitty()`:
## ! could not find function "dagitty"
tidy_dag <- tidy_dagitty(dag)
## Error in `tidy_dagitty()`:
## ! could not find function "tidy_dagitty"
tidy_dag
## Error:
## ! object 'tidy_dag' not found
ggdag(tidy_dag)
## Error in `ggdag()`:
## ! could not find function "ggdag"
  • 这里的代码,类似于 @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()
## Error in `ggdag::dagify(y ~ x + z2 + w2 + w1, x ~ z1 + w1, z1 ~ w1 + v, z2 ~ w2 + v, w1 ~
##     (~w2), exposure = "x", outcome = "y") %>% tidy_dagitty()`:
## ! could not find function "%>%"
tidy_ggdag
## Error:
## ! object 'tidy_ggdag' not found
ggdag(tidy_ggdag)
## Error in `ggdag()`:
## ! could not find function "ggdag"
  • ggdag函数是内置ggplot2的,因此非常方便。
  • ~~表示双向箭头。
  • y ~ x + z2 + w2 + w1表示这四个变量都导致y,类似于回归方程中,自变量和因变量的关系。
  • 而且这里不需要string格式的输入。

加label

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

confounder_triangle(x = "Coffee", y = "Lung Cancer", z = "Smoking") %>%
  ggdag_dconnected(text = FALSE, use_labels = "label")
## Error in `confounder_triangle(x = "Coffee", y = "Lung Cancer", z = "Smoking") %>%
##     ggdag_dconnected(text = FALSE, use_labels = "label")`:
## ! could not find function "%>%"

批量label

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")
## Error in `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")`:
## ! could not find function "%>%"
ggdag(coffee_dag, text = FALSE, use_labels = "label")
## Error in `ggdag()`:
## ! could not find function "ggdag"

参考文献


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