TikZで遊んでみた
Categories:
きれいなパス図を描きたいと思って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}
結果は以下の通り.
結構きれいに描けるし微調整もできる.慣れればもう少しコンパクトに描けるかしら.