tkenichi の日記

毒舌皮肉系恥さらし日記

Pajek + R でお手軽スケールフリーシミュレーション

久しぶりに Pajek で遊んでみる。ネットワークの可視化ツールとしてデファクトだけれども、簡単なシミュレーションもできる。もちろん大規模のものを何度も繰り返す場合はマクロを書いたりしなければならないので面倒だけれども、本に載っている例をちょっと試したいとか、授業などの話のネタにやってみるぐらいなら簡単だ。また、R 形式でネットワークの隣接行列が出力できることがわかったので、これを利用してみる。

たとえば、おなじみスケールフリーネットワークを作って、次数分布のグラフを書く、なんてことをやろうとすると、

  1. Pajek のメイン画面から Net > Random Network > Scale Free > Undirected を選ぶ
  2. Pajek でパラメータを選んでネットワークを作る
  3. Pajek のメイン画面から Draw で可視化
  4. Pajek のメイン画面から Tools > R > Send to R > Current Network で隣接行列を R 形式で出力
  5. R から Pajek が出力した PajekR.r を読み込む
  6. R で objects() を実行して保存されたネットワーク名を確認(たとえば n1 とする)
  7. 次数分布の両側対数グラフを書くにはplot(sort(apply(n1,1,sum),decreasing=TRUE),1:nrow(n1),log="xy") これだけ。

両側対数なので、次数が 0 のところは書けないとかいう警告は出るけど、とりあえず無視すれば、次のようなグラフが書ける*1。なんとなくスケールフリー。

http://www.tokunagakenichi.net/image/Network/ScaleFreeLogXYByR.png

参考までに、Pajek の Report を載せておこう。

                                                                                                                                                          • -
Undirected scale free random network generator
                                                                                                                                                          • -
Working... Maximum number of vertices: 500 Average degree of vertices: 10.00000 Initial Erdos-Renyi graph - number of vertices: 10 Initial Erdos-Renyi graph - probability of lines: 0.1000000 Alpha: 0.3000000 Beta: 0.3000000 ----------------------------------- Final number of vertices: 500 Final number of lines: 2450 Final average degree of vertices: 9.8000000
                                                                                                                                                          • -
Program R called with Pajek objects
                                                                                                                                                          • -
Working... Source R code file c:\pajek\PAJEK\PajekR.r generated. Time spent: 0:00:00

パラメータをいろいろいじると論文レベルの追試も簡単だ。

以前 Java + JUNG を使って自分でプログラム作ったのは、勉強になったし、Pajek では扱えないような自分のアルゴリズムを実装できる環境ができたという意味ではうれしいけど、ちょっと試すだけならこれで十分。

参考(以前の日記): JUNG と Pajek - tkenichiの日記

*1:いろいろ遊んでいたので隣接行列のオブジェクト名がn7になっている