SlideShare une entreprise Scribd logo
1  sur  13
DiaggrameRと仲良くなった話
ーグラフィカルモデルのためのDiaggrameR速習ー
2017.11.26 Hijiyama.R final
広島大学グローバルキャリアデザインセンター 特別研究員
広島大学大学院 教育学研究科 学習心理学研究室
山根 嵩史
DiagrammeRとは
✔︎ DiagrammeRは,グラフ描画ツールGraphvizを使っ
て,R上で簡単に高度な作図をするパッケージ
(MermaidエンジンやNDFs/EDFsなどの機能も実装されているが今回は割愛)
✔︎ 公式サイトのドキュメントを見てみると夢が広がる
DiagrammeR Docs
(http://rich-iannone.github.io/DiagrammeR/graphviz_and_mermaid.html)
dot言語で色々な作図が可能
(レイアウトは自動!)
ノードの色,形,フォント等の
設定も充実
じゃあこんな図書きたい!
グラフィカルモデルの例
(『実践ベイズモデリング』図15.3)
✔︎ DiagrammeRでグラフィカルモデルが描きたい
グラフィカルモデル (またはプレート表現):
ベイジアンモデリングで使用される,ノードの繋がりで
データの生成過程を視覚的に表現した図
それっぽいコードを書いてみるが…
お,おう...
DiagrammeRと仲良くなりたい
✔︎ DiagrammeRの弱点として,(配置が自動なぶん)
思った通りの図にならないことがある
✔︎ だからといってパワポとかで作図するのも嫌
とくにMacでは
0
1
2
3
4
5
項目 1 項目 2
☞ DiagrammeRと仲良くなりたい
なんで図形とかグラフ要素に
デフォルトで影ついてるの?
BKなの?Sぬの?
DiagrammeRの記法
✔︎ graph[],node[],edge[]の部分に分けて書く
graph[]:配置の方向や背景など,グラフ全体の設定
node[]:配置したいノード名とノードの設定
edge[]:ノード間をつなぐエッジの設定
✔︎ それぞれのノード,エッジの後ろに[]をつければ
個別に設定も可能
配置に関するコマンド
✔︎ ノードの位置を調整したい
edge[]内で{rank = }で設定
{rank = same; a; b} → ノードaとbを同じ階層に配置
{rank = max; a} → ノードaを一番下の階層に配置
{rank = min; a} → ノードaを一番上の階層に配置
✔︎ 図の形状について
階層型 (dot) の他に,円形 (circo) や
ネットワーク型 (neato) なども
graph[]内で“layout = 〜”で設定
デフォルトはdot
✔︎ 横向きの図にしたい
graph[]内で“rankdir = LR”で設定
描画に関するコマンド
✔︎ ギリシャ文字を使いたい
&文字列; で任意のギリシャ文字を描ける
✔︎ 上付き,下付き文字にしたい
@^{文字列}で上付き文字
@_{文字列}で下付き文字
✔︎ イタリックにしたい
graph[]内で“fontname = 〜”で斜体フォントを設定
ラベルの一部だけ斜体にしたい場合には <<I>文字列</I>>
先ほどのコードを修正すると…
fixedsize = true
☞ 各ノードの大きさを固定
fontname = ‘Times-italic’
☞ フォント名と斜体の設定
label = ‘&theta;@^{(h)}’
☞ ギリシャ文字θと
上付き文字の設定
{rank = max; ns; nn}
☞ nsとnnのノードを一番下に配置
するため,{rank = } を使用
できた!
subgraphの設定
✔︎ subgraph cluster{} で
枠付きのサブグラフ作成
✔︎ サブグラフの外と中で
ノードの位置を揃えたい
ときは,graph[]内で
“newrank = true”の設定
が必要
仲良くなれなかった点
✔︎ ︎一部が重なったsubgraphは描けない
例:『実践ベイズモデリング』 図18.9
✔︎ ︎graphvizの仕様上無理っぽい
背景透明色で作った2つのサブグラフを重ね合わせ
るとかどうですか。ダメですか。
参照:https://stackoverflow.com/questions/12680865/how-to-draw-overlapping-clusters-in-graphviz
参考にしたサイトなど
Graphvizとdot言語でグラフを描く方法のまとめ
(https://qiita.com/rubytomato@github/items/51779135bc4b77c8c20d)
Node, Edge and Graph Attributes
(http://www.graphviz.org/doc/info/attrs.html)
DiagrammeR入門 nodeの属性まとめ
(https://qiita.com/kazutan/items/feea8a3d40143f1f7978)
Rでグラフィカルモデルを書こう!
(https://kunisatolab.github.io/how-to-graphicalModel.html)
Plate notation via Graphviz/Rstudio
(http://kosugitti.net/archives/5834)
dot(graphviz)でsubgraph間の位置関係を整える
(http://blog.livedoor.jp/hiroaki8270/archives/17759669.html)

Contenu connexe

Tendances

比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!
takehikoihayashi
 

Tendances (20)

比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!
 
Stanコードの書き方 中級編
Stanコードの書き方 中級編Stanコードの書き方 中級編
Stanコードの書き方 中級編
 
心理学者のためのGlmm・階層ベイズ
心理学者のためのGlmm・階層ベイズ心理学者のためのGlmm・階層ベイズ
心理学者のためのGlmm・階層ベイズ
 
Rによるベイジアンネットワーク入門
Rによるベイジアンネットワーク入門Rによるベイジアンネットワーク入門
Rによるベイジアンネットワーク入門
 
マルコフ転換モデル:導入編
マルコフ転換モデル:導入編マルコフ転換モデル:導入編
マルコフ転換モデル:導入編
 
Stanの便利な事後処理関数
Stanの便利な事後処理関数Stanの便利な事後処理関数
Stanの便利な事後処理関数
 
Stan超初心者入門
Stan超初心者入門Stan超初心者入門
Stan超初心者入門
 
PRML8章
PRML8章PRML8章
PRML8章
 
pymcとpystanでベイズ推定してみた話
pymcとpystanでベイズ推定してみた話pymcとpystanでベイズ推定してみた話
pymcとpystanでベイズ推定してみた話
 
Chapter9 一歩進んだ文法(前半)
Chapter9 一歩進んだ文法(前半)Chapter9 一歩進んだ文法(前半)
Chapter9 一歩進んだ文法(前半)
 
StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】
StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】
StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】
 
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~
 
質的変数の相関・因子分析
質的変数の相関・因子分析質的変数の相関・因子分析
質的変数の相関・因子分析
 
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
 
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
一般化線形モデル (GLM) & 一般化加法モデル(GAM) 一般化線形モデル (GLM) & 一般化加法モデル(GAM)
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
 
RStanとShinyStanによるベイズ統計モデリング入門
RStanとShinyStanによるベイズ統計モデリング入門RStanとShinyStanによるベイズ統計モデリング入門
RStanとShinyStanによるベイズ統計モデリング入門
 
ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介
 
GEE(一般化推定方程式)の理論
GEE(一般化推定方程式)の理論GEE(一般化推定方程式)の理論
GEE(一般化推定方程式)の理論
 
主成分分析(Pca)
主成分分析(Pca)主成分分析(Pca)
主成分分析(Pca)
 
第4回DARM勉強会 (構造方程式モデリング)
第4回DARM勉強会 (構造方程式モデリング)第4回DARM勉強会 (構造方程式モデリング)
第4回DARM勉強会 (構造方程式モデリング)
 

Plus de Takashi Yamane

MCMCによる回帰分析@ベイズセミナー
MCMCによる回帰分析@ベイズセミナーMCMCによる回帰分析@ベイズセミナー
MCMCによる回帰分析@ベイズセミナー
Takashi Yamane
 
第一回広島ベイズ塾・最小二乗法
第一回広島ベイズ塾・最小二乗法第一回広島ベイズ塾・最小二乗法
第一回広島ベイズ塾・最小二乗法
Takashi Yamane
 
Anova君を使った分散分析
Anova君を使った分散分析Anova君を使った分散分析
Anova君を使った分散分析
Takashi Yamane
 
Mendeleyで簡単! 論文管理
Mendeleyで簡単! 論文管理Mendeleyで簡単! 論文管理
Mendeleyで簡単! 論文管理
Takashi Yamane
 

Plus de Takashi Yamane (14)

ベイズモデリングによる第2種信号検出モデルの表現
ベイズモデリングによる第2種信号検出モデルの表現ベイズモデリングによる第2種信号検出モデルの表現
ベイズモデリングによる第2種信号検出モデルの表現
 
信号検出理論 (『実践ベイズモデリング』15章)
信号検出理論 (『実践ベイズモデリング』15章)信号検出理論 (『実践ベイズモデリング』15章)
信号検出理論 (『実践ベイズモデリング』15章)
 
Osaka.stan#4 chap8
Osaka.stan#4 chap8Osaka.stan#4 chap8
Osaka.stan#4 chap8
 
要因計画データに対するベイズ推定アプローチ
要因計画データに対するベイズ推定アプローチ要因計画データに対するベイズ推定アプローチ
要因計画データに対するベイズ推定アプローチ
 
PypeRで実験と分析を一本化する
PypeRで実験と分析を一本化するPypeRで実験と分析を一本化する
PypeRで実験と分析を一本化する
 
Rの導入とRStudio事始め(改訂版)
Rの導入とRStudio事始め(改訂版)Rの導入とRStudio事始め(改訂版)
Rの導入とRStudio事始め(改訂版)
 
ガンマ分布 @魁!!広島ベイズ塾
ガンマ分布 @魁!!広島ベイズ塾ガンマ分布 @魁!!広島ベイズ塾
ガンマ分布 @魁!!広島ベイズ塾
 
(実験心理学徒だけど)一般化線形混合モデルを使ってみた
(実験心理学徒だけど)一般化線形混合モデルを使ってみた(実験心理学徒だけど)一般化線形混合モデルを使ってみた
(実験心理学徒だけど)一般化線形混合モデルを使ってみた
 
ANOVA君とanovatan
ANOVA君とanovatanANOVA君とanovatan
ANOVA君とanovatan
 
MCMCによる回帰分析@ベイズセミナー
MCMCによる回帰分析@ベイズセミナーMCMCによる回帰分析@ベイズセミナー
MCMCによる回帰分析@ベイズセミナー
 
第一回広島ベイズ塾・最小二乗法
第一回広島ベイズ塾・最小二乗法第一回広島ベイズ塾・最小二乗法
第一回広島ベイズ塾・最小二乗法
 
Anova君を使った分散分析
Anova君を使った分散分析Anova君を使った分散分析
Anova君を使った分散分析
 
Rstudio事始め
Rstudio事始めRstudio事始め
Rstudio事始め
 
Mendeleyで簡単! 論文管理
Mendeleyで簡単! 論文管理Mendeleyで簡単! 論文管理
Mendeleyで簡単! 論文管理
 

DiagrammeRと仲良くなった話ーグラフィカルモデルのためのDiagrammeR速習ー