4

構造方程式モデルを視覚化するための新しい DiagrammeR パッケージの機能をテストしています。

私の目標は、次のようなプロットを取得することです。 ここに画像の説明を入力

おそらく、エッジとノードの向きを指定する方法についてリソースを見つける必要があるでしょう。なぜなら、DiagrammeR現在、次のようなプロットしかできない からです。ここに画像の説明を入力

devtools::install_github('rich-iannone/DiagrammeR')
library('DiagrammeR')

#----------

test<-grViz("     
digraph CFA{

# latent variables
node [shape=circle]
latent_a [group='a']; 
latent_b [group='b'];

#regressions
latent_a -> latent_b [label='0.279'];

#measurement model for latent a
subgraph A{
node [shape=box]
ind_1; 
ind_2; 
ind_3; 
latent_a -> ind_1 [label='0.636'];
latent_a -> ind_2 [label='0.825'];
latent_a -> ind_3 [label='0.829'];
}

#measurement model for latent b
subgraph B{
node [shape=box]
ind_4 ; 
ind_5 ;
latent_b -> ind_4 [label='1.027'];
latent_b -> ind_5 [label='0.626'];
}

#residuals
node [shape=circle]
e1 ; 
e4 ;
e5 ;
e6 ;
e1 -> ind_1;
e4 -> ind_4;
e5 -> ind_5;
e6 -> latent_b;

#residual covariances
ind_1 -> ind_2 [dir=both];
}      
")
test

ヒントをいただければ幸いです。

PS: おそらく私のDiagrammeRコードはおかしく見えます。モデルはlavaanで指定されています。おそらく、将来的に両方のパッケージ間で変換する方法があるでしょう。私は、これは可能かもしれないと思います。

4

1 に答える 1

6

少しマニュアル的なものを思いつきましたが、適切な R 関数を作成することで DOT コードを生成できると確信しています。手動の解決策は次のとおりです。

devtools::install_github("rich-iannone/DiagrammeR")
library(DiagrammeR)

grViz("
digraph SEM {

graph [layout = neato,
       overlap = true,
       outputorder = edgesfirst]

node [shape = rectangle]

a [pos = '-4,1!', label = 'e1', shape = circle]
b [pos = '-3,1!', label = 'ind_1']
c [pos = '-3,0!', label = 'ind_2']
d [pos = '-3,-1!', label = 'ind_3']
e [pos = '-1,0!', label = 'latent a', shape = ellipse]
f [pos = '1,0!', label = 'latent b', shape = ellipse]
g [pos = '1,1!', label = 'e6', shape = circle]
h [pos = '3,1!', label = 'ind_4']
i [pos = '3,-1!', label = 'ind_5']
j [pos = '4,1!', label = 'e4', shape = circle]
k [pos = '4,-1!', label = 'e5', shape = circle]

a->b
e->b [label = '0.6']
e->c [label = '0.6']
e->d [label = '0.6']

e->f [label = '0.321', headport = 'w']
g->f [tailport = 's', headport = 'n']

d->c [dir = both]

f->h [label = '0.6', tailport = 'ne', headport = 'w']
f->i [label = '0.6']

j->h
k->i

}
")
于 2015-04-02T21:26:22.187 に答える