2011-12-21 40 views
2

semパッケージを使用して分析します。パス図を描画するには、のpathDiagram関数を使用してコードを取得し、Graphvizでそれを使用してダイアグラムを取得します。Graphvizを使用したRパッケージ 'sem'による描画パス図

library(sem) 

R.DHP <- readMoments(diag=FALSE, names=c('ROccAsp', 'REdAsp', 'FOccAsp', 
       'FEdAsp', 'RParAsp', 'RIQ', 'RSES', 'FSES', 'FIQ', 'FParAsp')) 
    .6247                
    .3269 .3669               
    .4216 .3275 .6404          
    .2137 .2742 .1124 .0839         
    .4105 .4043 .2903 .2598 .1839       
    .3240 .4047 .3054 .2786 .0489 .2220      
    .2930 .2407 .4105 .3607 .0186 .1861 .2707    
    .2995 .2863 .5191 .5007 .0782 .3355 .2302 .2950   
    .0760 .0702 .2784 .1988 .1147 .1021 .0931 -.0438 .2087 

model.dhp <- specifyModel() 
    RParAsp -> RGenAsp, gam11, NA 
    RIQ  -> RGenAsp, gam12, NA 
    RSES  -> RGenAsp, gam13, NA 
    FSES  -> RGenAsp, gam14, NA 
    RSES  -> FGenAsp, gam23, NA 
    FSES  -> FGenAsp, gam24, NA 
    FIQ  -> FGenAsp, gam25, NA 
    FParAsp -> FGenAsp, gam26, NA 
    FGenAsp -> RGenAsp, beta12, NA 
    RGenAsp -> FGenAsp, beta21, NA 
    RGenAsp -> ROccAsp, NA,  1 
    RGenAsp -> REdAsp, lam21, NA 
    FGenAsp -> FOccAsp, NA,  1 
    FGenAsp -> FEdAsp, lam42, NA 
    RGenAsp <-> RGenAsp, ps11, NA 
    FGenAsp <-> FGenAsp, ps22, NA 
    RGenAsp <-> FGenAsp, ps12, NA 
    ROccAsp <-> ROccAsp, theta1, NA 
    REdAsp <-> REdAsp, theta2, NA 
    FOccAsp <-> FOccAsp, theta3, NA 
    FEdAsp <-> FEdAsp, theta4, NA 



sem.dhp <- sem(model.dhp, R.DHP, 329, 
    fixed.x=c('RParAsp', 'RIQ', 'RSES', 'FSES', 'FIQ', 'FParAsp')) 



pathDiagram(sem.dhp, min.rank='RIQ, RSES, RParAsp, FParAsp, FSES, FIQ', 
    max.rank='ROccAsp, REdAsp, FEdAsp, FOccAsp') 
  1. どのように私はpathDiagram機能を使用してRから直接パス図を描画しない:私は2つの質問がありますか?
  2. グラフをのRnwファイルに含めるにはどうすればよいですか?

答えて

3

ファイル名(拡張子なし)を指定するだけで、file=引数を参照してください。ドキュメントに記載されているように、.dotとPDFファイルの両方が生成されます(ただし、graphviz出力のみが必要な場合はoutput.type="dot"に設定されます)。

上記のコマンドを呼び出した後、Sweaveファイルで単純な\includegraphicsコマンドを使用します。 (あなたはあなたのマスター.Rnwファイルと同じディレクトリにSEM図を生成しない場合には姿を見つけるために、パスを適応させる必要があるかもしれません。)

更新

あなたのコメントを考えると、はい、それはそうです関数呼び出し(pathDiagram)内から外部プログラムを実行する際に問題があります。パス図を生成してSweave-> TeXドキュメントに含めることは、それほどエレガントではありません。

\documentclass{article} 
\usepackage{graphicx} 
\begin{document} 
<<echo=TRUE>>= 
library(sem) 
R.DHP <- readMoments("sem.cov", diag=FALSE, 
        names=c('ROccAsp', 'REdAsp', 'FOccAsp', 
         'FEdAsp', 'RParAsp', 'RIQ', 'RSES', 
         'FSES', 'FIQ', 'FParAsp')) 
model.dhp <- specifyModel(file="sem.mod") 
sem.dhp <- sem(model.dhp, R.DHP, 329, 
       fixed.x=c('RParAsp', 'RIQ', 'RSES', 'FSES', 'FIQ', 'FParAsp'))    
capture.output(pathDiagram(sem.dhp, min.rank='RIQ, RSES, RParAsp, FParAsp, FSES, FIQ', 
      max.rank='ROccAsp, REdAsp, FEdAsp, FOccAsp'), file="sem.dot") 
@ 
<<echo=FALSE>>= 
system("dot -Tpdf -o fig1.pdf sem.dot") 
@ 

And here is the path diagram. 

\begin{center} 
\includegraphics{fig1} 
\end{center} 

\end{document} 

ファイルsem.covsem.modはプレーンテキストファイルで(単純なコピー/ペーストの両方上記の例では、手動で入力された共分散行列と構造モデルが含まれています。ここでは

ははSweaveファイル(sw.rnw)であります)。 capture.output()を使用する必要はあまりありません。チャンクからの呼び出しをマスクする方法が見つからないためです。たぶんもっと良い方法が見つかるでしょう(この考えはsystem()を使用することです、それはチャンクパラメータでecho=FALSEで簡単にマスクすることができます)。

私は次のように上記文書をコンパイルするために起こった:

$ R CMD Sweave sw.rnw 
$ R CMD texi2pdf sw.tex 

enter image description here

+0

おかげで@chl。とても有難い。 – MYaseen208

+0

この余分なメッセージ 'Running dot -Tpdf -o Path.pdf Path.dot'はSweavingに失敗しました。どんな助力も高く評価されます。ありがとうございました – MYaseen208

+0

@ MYaseen208アップデートがあれば教えてください。 – chl

関連する問題