Pajek + R でお手軽スケールフリーシミュレーション
久しぶりに Pajek で遊んでみる。ネットワークの可視化ツールとしてデファクトだけれども、簡単なシミュレーションもできる。もちろん大規模のものを何度も繰り返す場合はマクロを書いたりしなければならないので面倒だけれども、本に載っている例をちょっと試したいとか、授業などの話のネタにやってみるぐらいなら簡単だ。また、R 形式でネットワークの隣接行列が出力できることがわかったので、これを利用してみる。
たとえば、おなじみスケールフリーネットワークを作って、次数分布のグラフを書く、なんてことをやろうとすると、
- Pajek のメイン画面から Net > Random Network > Scale Free > Undirected を選ぶ
- Pajek でパラメータを選んでネットワークを作る
- Pajek のメイン画面から Draw で可視化
- Pajek のメイン画面から Tools > R > Send to R > Current Network で隣接行列を R 形式で出力
- R から Pajek が出力した PajekR.r を読み込む
- R で objects() を実行して保存されたネットワーク名を確認(たとえば n1 とする)
- 次数分布の両側対数グラフを書くにはplot(sort(apply(n1,1,sum),decreasing=TRUE),1:nrow(n1),log="xy") これだけ。
両側対数なので、次数が 0 のところは書けないとかいう警告は出るけど、とりあえず無視すれば、次のようなグラフが書ける*1。なんとなくスケールフリー。
参考までに、Pajek の Report を載せておこう。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
パラメータをいろいろいじると論文レベルの追試も簡単だ。
以前 Java + JUNG を使って自分でプログラム作ったのは、勉強になったし、Pajek では扱えないような自分のアルゴリズムを実装できる環境ができたという意味ではうれしいけど、ちょっと試すだけならこれで十分。
参考(以前の日記): JUNG と Pajek - tkenichiの日記
*1:いろいろ遊んでいたので隣接行列のオブジェクト名がn7になっている