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())
<- dagify(y ~ z + eta,
dag2 ~ eta,
z ~ eta,
x 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())
<- dagify(y ~ z + eta,
dag3 ~ eta,
z ~ eta,
x 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())
<- dagify(y ~ z + eta,
dag4 ~ eta,
z ~ eta,
x 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")
<- dagitty("dag{
dag4 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 mermaid
library(DiagrammeR)
mermaid("
graph LR
E(内生変数E <br> 教育年数)-->Y(所得Y)
Z(操作変数Z <br> 自宅のある郡に <br> 大学があるか)-->E
U(観測できない変数 <br> 能力U)-->E
U-->Y
")
mermaid
パッケージQuatroでは、DiagrammeR
を使わなくても、mermaid
パッケージをネイティブに使える。