library(ggdag)
Attaching package: 'ggdag'
The following object is masked from 'package:stats':
filter
library(ggplot2)
theme_set(theme_dag())ggdagパッケージが一番使いやすいと考える。ggdagパッケージ、DAGittyパッケージに加えて、Quatroでネイティブに使えるmermaidパッケージを中心に、RでDAGを描く方法を紹介する。ggdagパッケージggdagパッケージのセットlibrary(ggdag)
Attaching package: 'ggdag'
The following object is masked from 'package:stats':
filter
library(ggplot2)
theme_set(theme_dag())library(ggdag)
library(ggplot2)
theme_set(theme_dag())
dag2 <- dagify(y ~ z + eta,
z ~ eta,
x ~ eta,
labels = c(
"y" = "若年雇用",
"z" = "最低賃金",
"eta" = "労働需要/景気η",
"x" = "成人の雇用"
),
latent = "eta",
exposure = "z",
outcome = "y"
)
#ggdag_paths(dag1, text = TRUE, use_labels = "label", label_size = 2)
#ggdag(dag2, text = TRUE, use_labels = "label", label_size = 2) +
# theme_dag()ggdag_status(dag2, text = TRUE, use_labels = "label", label_size = 2)time_ordered_coords関数を指定しないと、自動的に配置が決められてしまう。経済のデータは時系列性を持つことが通常なので、時間順序を指定しておいた方が綺麗なDAGになる。library(ggdag)
library(ggplot2)
theme_set(theme_dag())
dag3 <- dagify(y ~ z + eta,
z ~ eta,
x ~ eta,
labels = c(
"y" = "若年雇用",
"z" = "最低賃金",
"eta" = "労働需要/景気η",
"x" = "成人の雇用"
),
coords = time_ordered_coords(
list(
# time point 1
"eta",
# time point 2
"z",
# time point 3
c("y", "x")
)
),
latent = "eta",
exposure = "z",
outcome = "y"
)
#ggdag_paths(dag1, text = TRUE, use_labels = "label", label_size = 2)
#ggdag(dag3, text = TRUE, use_labels = "label", label_size = 2) +
# theme_dag()ggdag_status(dag3, text = TRUE, use_labels = "label", label_size = 2)tidy_dagitty関数を用いて、DAGのデータを確認する。# DAGのデータを確認する
tidy_dagitty(dag3)# A DAG with 4 nodes and 4 edges
#
# Exposure: z
# Outcome: y
# Latent Variable: eta
#
# A tibble: 6 × 9
name x y direction to xend yend circular label
<chr> <int> <int> <fct> <chr> <int> <int> <lgl> <chr>
1 eta 1 0 -> x 3 1 FALSE 労働需要/景気η
2 eta 1 0 -> y 3 -1 FALSE 労働需要/景気η
3 eta 1 0 -> z 2 0 FALSE 労働需要/景気η
4 x 3 1 <NA> <NA> NA NA FALSE 成人の雇用
5 y 3 -1 <NA> <NA> NA NA FALSE 若年雇用
6 z 2 0 -> y 3 -1 FALSE 最低賃金
theme_set(
theme_dag() %+replace%
# also add some additional styling
theme(
legend.position = "bottom",
strip.text.x = element_text(margin = margin(50, 0, 50, 0, "mm"))
)
)library(ggdag)
library(ggplot2)
theme_set(theme_dag())
dag4 <- dagify(y ~ z + eta,
z ~ eta,
x ~ eta,
labels = c(
"y" = "若年雇用",
"z" = "最低賃金",
"eta" = "労働需要/景気η",
"x" = "成人の雇用"
),
coords = time_ordered_coords(
list(
# time point 1
"eta",
# time point 2
"z",
# time point 3
c("y", "x")
)
)
)
#ggdag_paths(dag1, text = TRUE, use_labels = "label", label_size = 2)
ggdag_status(dag4, text = TRUE, use_labels = "label", label_size = 2) +
theme_dag()dagittyパッケージは、DAGを描くためのパッケージで、Rのパッケージの中では最も有名なものの一つである。しかし、日本語が使えないので、日本語を使いたい場合は、ggdagパッケージを使うのが良い。
矢内 勇生氏のサイトが、dagittyパッケージとggdagパッケージのわかりやすい説明を行っている。
DAGittyが公式サイト。
Directed Acyclic Graphs in R with dagitty and ggdagを参考に、dagittyパッケージを使ってDAGを描く。
dagittyパッケージによるによる実例library("dagitty")
dag4 <- dagitty("dag{
labor_demand -> minium_wage -> youth_employment
labor_demand -> youth_employment
labor_demand -> adult_employment}
")
# 座標の設定。xは横方向、yは縦方向。座標は0から始まる。y = -1は、上方に配置。
coordinates(dag4) <- list(
x = c(labor_demand = 0, minium_wage = 1, youth_employment = 2, adult_employment = 1),
y = c(labor_demand = 0, minium_wage = -1, youth_employment = 0, adult_employment = -0.5)
)
plot(dag4)DiagrammeRパッケージDiagrammeRパッケージは、mermaidやgrVizを用いてDAGを描くためのパッケージである。
https://rich-iannone.github.io/DiagrammeR/articles/graphviz-mermaid.html
grVizも使えるはずだが、HTMLで表示されないため、Quatroでは使いにくいので、mermaidを用いる。
DiagrammeR with mermaidlibrary(DiagrammeR)
mermaid("
graph LR
E(内生変数E <br> 教育年数)-->Y(所得Y)
Z(操作変数Z <br> 自宅のある郡に <br> 大学があるか)-->E
U(観測できない変数 <br> 能力U)-->E
U-->Y
")mermaidパッケージQuatroでは、DiagrammeRを使わなくても、mermaidパッケージをネイティブに使える。