隣接行列から有向グラフを作成する



##以下, Rのスクリプト##

dg <- matrix(c(0,1,1,0,  1,0,1,0,  0,0,0,0,  1,0,0,000) , nrow = 4, ncol = 4, byrow = T)

dg
      [,1] [,2] [,3] [,4]
[1,]    0    1    1    0
[2,]    1    0    1    0
[3,]    0    0    0    0
[4,]    1    0    0    0

#igraphで利用可能なグラフオブジェクトを作成する。
g <- graph.adjacency(dg, mode="directed")

png("directed-graph.png")
plot(g)
dev.off()

【参考文献】
金明哲『Rで学ぶデータサイエンス 8 ネットワーク分析』2009 共立出版 序文、2 - 5 pp


######数式のtexスクリプト#####
%graph.tex
\documentclass{jarticle}
\usepackage{amsmath}
\begin{document}
ある特定のネットワークを数学的にグラフ$G$として表記するには以下のようにします。
\begin{eqnarray} 
G = (V, E)
\end{eqnarray}
ここで$V$と$E$はそれぞれ頂点と辺の集合を表しています。\\
今、頂点と辺の数を各々$i$, $j$とすると、$V$と$E$は以下のように表すことができます。
\begin{eqnarray} 
V = \{v_1, v_2, \dots, v_i\} \\
E = \{e_1, e_2, \dots, e_j\} 
\end{eqnarray}
グラフの特徴を知るにためにはさまざまな演算をするので、グラフを隣接行列: adjacency matrixによって
表現します。隣接行列は、頂点間の関係性の有無を総当たりで記述するものですので、$n$個の頂点から構成される
グラフの隣接行列$A$は$n \times n$の正方行列となります。
\begin{eqnarray} 
A= (a_{k,l})
=\left[ 
\begin{array}{ccc}
a_{0,0} & \cdots & a_{1,n} \\
\vdots & \ddots & \vdots \\
a_{n,1} & \cdots & a_{n,n} \\
\end{array} 
\right]
\end{eqnarray}
ただし、$a_{i,j}$は以下の値を取る。
\begin{eqnarray}
a_{i,j} = \begin{cases}
1 & 頂点iから頂点jへの辺がある \\
0 & 頂点iから頂点jへの辺がない
\end{cases}
\end{eqnarray}
隣接行列から有向グラフを作成する例として、以下の隣接行列を考えたい。
\begin{eqnarray}
\left(
\begin{array}{cccc}
0 & 1 & 1 & 0\\
1 & 0 & 1 & 0 \\
0 & 0 & 0 & 0 \\
1 & 0 & 0 & 0 \\
\end{array}
\right)
\end{eqnarray}
この隣接行列が示す有向グラフをRを用いて作成する。
\pagestyle{empty}
\end{document}



#####ここまで####