RでSEM,

RでSEMが出来る。詳しくは.RjpWikiでSEMの項を見ればよい。
Rで共分散構造分析・構造方程式モデル – RjpWiki

具体的なやり方はMacintoshのユーザーの方が例を書いてくれている。
例をコピペでほとんど問題なくできる。

問題があるのは、パス図を出力したいときである。
path.diagramという関数で、dot形式の図版ファイルができあがる。

順に説明しておこう。

例示されているpath.diagram関数は次の通り。
path.diagram(ans, out.file=”camera.dat”, ignore.double=FALSE, edge.labels=”values”, digits=3, node.font=c(“Osaka”, 10))

この命令文は順に、

  1. path.diagram(ans):ansというモデルのパス図を書きなさいよ。
  2. out.file=”camera.dat”:camera.datというファイルにパス図の図版ファイルを出力しなさいよ(ディレクトリ指定がないので、このままだとRの実行ディレクトリに出力される)
  3. ignore.double=FALSE:双方向矢印(分散・共分散)を無視しちゃ駄目だよ
  4. edge.labels=”value”:パスのラベルは、パス名(thetaとかgamma)じゃなくて、その値ですよ。
  5. digits=3:3桁まで出しなさいよ。
  6. node.font=c(“Osaka”,10):Osakaフォント、10ptで出力しなさいよ

という意味である。

最後のOsakaフォントとは、Mac独自の日本語フォント*1
ともかく、Windowsの場合は、ここに次のような指定をすると簡単である。

  1. node.font=c(“C:\WINDOWS\Fonts\msmincho.ttc”,10)

つまりttcファイルというのがフォントのファイルなのです。Windowsの方は普通C:\WINDOWS\Fonts\の中に入っていますので、そのように指定します。

あと、out.fileオプションは指定しない方がいいです。
理由。ファイルをUTF-8形式で保存しないとだめだから。

ともかく、out.fileオプションを指定しないで実行すると、Rのコンソールにdot形式のプログラムが出ます。

説明が後先になりましたが、dot形式とはパスダイアグラムを書くための言語です。詳しくは各自で検索でもして調べてください。

要するに、dot形式ファイルはgraphvizというプログラムで描画できるのだ、ということだけ覚えて置いておけばOK。

graphvizというソフトも知らなかったが、とにかく検索するとフリーソフトでダウンロードできることがすぐにわかるので、ダウンしてインストールしましょう。もちろん英語版しかありません。

さて次。Rコンソールに出たdot形式のプログラムをコピーします。次に、それをUTF-8形式で保存します。UTF-8形式って何?という人は検索して調べてね。やり方だけいうと、コピーしたやつを秀丸に貼り付け、UTF-8形式で保存、と指定してやるだけで何の苦労もございません(エンコードの種類をUnicode UTF-8と指定)。あぁ、なんて素敵なんだ秀丸

次に、graphvizを起動して、インプットファイルにそのdot形式ファイルを指定。アウトプットファイルは適当な場所に適当な名前を書き、jpegかgifで出力してやれば良し。

実行例だけ書いておく。

dotファイル例

digraph “ans” {
rankdir=LR;
size=”8,8″;
node [fontname=”C:\WINDOWS\Fonts\msgothic.ttc” fontsize=8 shape=box];
edge [fontname=”Helvetica” fontsize=10];
center=1;
“小型軽量” -> “満足度” [label=”-0.229″];
“操作性” -> “満足度” [label=”0.457″];
“可搬性” -> “満足度” [label=”0.747″];
“小型軽量” -> “操作性” [label=”-0.411″];
“小型軽量” -> “可搬性” [label=”0.842″];
“小型軽量” -> “小型軽量” [label=”1″ dir=both];
“操作性” -> “操作性” [label=”0.831″ dir=both];
“可搬性” -> “可搬性” [label=”0.291″ dir=both];
“満足度” -> “満足度” [label=”0.637″ dir=both];
}

出来た図も貼り付けておきます。ご参考までに。

*1:なんで大阪なんだろう?