TikZで遊んでみた

きれいなパス図を描きたいと思ってTikZを試してみたときの記録.

TikZとは

LaTeXで動くパッケージで図形をコマンドで描けるものらしい.以下のサイトが日本語で簡単な説明している.

https://guides.lib.kyushu-u.ac.jp/c.php?g=774891&p=5559083

もっと潜在変数を含めた心理学よりの説明をしているのだと以下のQ&Aとかを参考にした.

https://tex.stackexchange.com/questions/397610/latent-variable-model-with-tikz

因子分析のパス図を書いてみる

とりあえず\nodeやら\drawやら\pathやらで必要なものを定義して,あとは[ ]に必要なオプションを入れて微調整する感じ.繰り返し処理とかを使えば,もっと短くなるらしいが,とりあえず最初なのでとりあえずコピペ多用でやってみた.lavaanのパッケージにも入っている有名な知能検査の因子分析のもの.

\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{shapes, arrows}
\begin{document}

\begin{tikzpicture}
  % node ovserved
  \node (X1) at (0,0) [rectangle, draw]{$X_1$};
  \node (X2) at (1,0) [rectangle, draw]{$X_2$};
  \node (X3) at (2,0) [rectangle, draw]{$X_3$};
  \node (X4) at (3,0) [rectangle, draw]{$X_4$};
  \node (X5) at (4,0) [rectangle, draw]{$X_5$};
  \node (X6) at (5,0) [rectangle, draw]{$X_6$};
  \node (X7) at (6,0) [rectangle, draw]{$X_7$};
  \node (X8) at (7,0) [rectangle, draw]{$X_8$};
  \node (X9) at (8,0) [rectangle, draw]{$X_9$};

  % node latene
  \node (visual) at (1,1.5) [ellipse, draw]{$visual$};
  \node (textual) at (4,1.5) [ellipse, draw]{$textual$};
  \node (speed) at (7,1.5) [ellipse, draw]{$speed$};

  % node error
  \node (e1) at (0,-1) {\scriptsize *};
  \node (e2) at (1,-1) {\scriptsize *};
  \node (e3) at (2,-1) {\scriptsize *};
  \node (e4) at (3,-1) {\scriptsize *};
  \node (e5) at (4,-1) {\scriptsize *};
  \node (e6) at (5,-1) {\scriptsize *};
  \node (e7) at (6,-1) {\scriptsize *};
  \node (e8) at (7,-1) {\scriptsize *};
  \node (e9) at (8,-1) {\scriptsize *};

  % factor loading
  \draw[-triangle 60] (visual) -- (X1) node [midway, left] {\scriptsize 1};
  \draw[-triangle 60] (visual) -- (X2) node [midway, left] {*};
  \draw[-triangle 60] (visual) -- (X3) node [midway, left] {*};
  \draw[-triangle 60] (textual) -- (X4) node [midway, left] {\scriptsize 1};
  \draw[-triangle 60] (textual) -- (X5) node [midway, left] {*};
  \draw[-triangle 60] (textual) -- (X6) node [midway, left] {*};
  \draw[-triangle 60] (speed) -- (X7) node [midway, left] {\scriptsize 1};
  \draw[-triangle 60] (speed) -- (X8) node [midway, left] {*};
  \draw[-triangle 60] (speed) -- (X9) node [midway, left] {*};

  % factor covariance
  \path[triangle 60-triangle 60] (visual) edge [bend left] node [below]{*} (textual);
  \path[triangle 60-triangle 60] (textual) edge [bend left] node [below]{*} (speed);
  \path[triangle 60-triangle 60] (visual.north) edge [bend left] node [above]{*} (speed.north);

  % path from error
  \draw[-triangle 60] (e1) -- (X1);
  \draw[-triangle 60] (e2) -- (X2);
  \draw[-triangle 60] (e3) -- (X3);
  \draw[-triangle 60] (e4) -- (X4);
  \draw[-triangle 60] (e5) -- (X5);
  \draw[-triangle 60] (e6) -- (X6);
  \draw[-triangle 60] (e7) -- (X7);
  \draw[-triangle 60] (e8) -- (X8);
  \draw[-triangle 60] (e9) -- (X9);


\end{tikzpicture}
\end{document}

結果は以下の通り.

結果のパス図

結構きれいに描けるし微調整もできる.慣れればもう少しコンパクトに描けるかしら.