R
パッケージを使用してDiagrammeR
、回帰モデル ツリーの階層表現を作成したいと思います。
元のデータの 4 つの分割 (青い楕円) と 5 つのターミナル ノード (赤い四角) があります。下の画像からわかるように、モデル 2、7、および 8 はターミナル ノードですが、モデル 4 および 5 と同じレベル (垂直方向の配置に関して) には表示されません。どうすればこれを達成できますか?
library("DiagrammeR")
grViz("
digraph CFA {
# Multiple level nodes
node [shape = ellipse, color=CornflowerBlue]
a [label = '@@1'];
b [label = '@@2'];
c [label = '@@3'];
d [label = '@@4'];
# Terminal branch nodes
node [shape = box, color = Crimson]
e [label = 'Model 2'];
f [label = 'Model 4'];
g [label = 'Model 5'];
h [label = 'Model 7'];
i [label = 'Model 8'];
# Connect nodes with edges and labels
a -> b [label = 'Condition 1a']
a -> d [label = 'Condition 1b']
b -> e [label = 'Condition 2a']
b -> c [label = 'Condition 2b']
c -> f [label = 'Condition 3a']
c -> g [label = 'Condition 3b']
d -> h [label = 'Condition 4a']
d -> i [label = 'Condition 4b']
}
[1]: 'Split 1'
[2]: paste0('Model 1\\n Split 2')
[3]: paste0('Model 3\\n Split 3')
[4]: paste0('Model 6\\n Split 4')
")
編集
期待どおりに配置されなかったターミナル ノードをグループ化し、引数を定義することで、エッジの長さを手動で調整することがわかりましたminlength
(以下を参照)。ただし、パラメーターをいじる必要のないアプローチをお勧めします。
grViz("
digraph CFA {
# latent variables
node [shape = ellipse, color=CornflowerBlue]
a [label = '@@1'];
b [label = '@@2'];
c [label = '@@3'];
d [label = '@@4'];
node [shape = box, color = Crimson]
e [label = 'Model 2'];
f [label = 'Model 4'];
g [label = 'Model 5'];
h [label = 'Model 7'];
i [label = 'Model 8'];
# Define arrow length for first group
edge [color = grey, minlen = 1]
a -> b [label = 'Condition 1a']
a -> d [label = 'Condition 1b']
b -> c [label = 'Condition 2b']
c -> f [label = 'Condition 3a']
c -> g [label = 'Condition 3b']
# Define edge length for models 2, 7 and 8
edge [color = grey, minlen = 2]
b -> e [label = 'Condition 2a']
d -> h [label = 'Condition 4a']
d -> i [label = 'Condition 4b']
}
[1]: 'Split 1'
[2]: paste0('Model 1\\n Split 2')
[3]: paste0('Model 3\\n Split 3')
[4]: paste0('Model 6\\n Split 4')
")