BAモデル・ランダムグラフの構築・解析
[R][igraph][社会ネットワーク]RでBAモデル
[R][社会ネットワーク][igraph]Rでランダムグラフ
画像処理の方とは違った課題により、
またもRを使ってバラバシ・アルバートモデルなるネットワークモデルを実装してみました。
せっかくだから俺はこっちのMathematicaを選ぶぜ!
BAモデル
intSize = 5; size = 10000; (* 完全グラフからスタート *) A = Select[ Flatten[Table[Table[{i, j}, {i, intSize}], {j, intSize}], 1], #[[1]] != #[[2]] &]; s = Table[Count[A, {j, _}], {j, size}]; For[i = intSize + 1, i <= size, i++, k = RandomSample[s -> Range[size], intSize]; Map[s[[#]] += 1 &, k]; s[[i]] += intSize; A = A~Join~Map[{#, i} &, k]~Join~Map[{i, #} &, k]; ] tt = Table[Count[s, i], {i, 1, Max[s]}]; (* 両対数グラフの表示 *) ListLogLogPlot[tt, PlotStyle -> PointSize[Large], Filling -> Axis] (* 外部パッケージの読み込み *) << Combinatorica` G = RemoveMultipleEdges[AddEdges[AddVertices[Graph[{}, {}], size], A]] (* 固有パス長の計算 *) L = N[Median[ Table[ Mean[Distances[G, i]] , {i, 1, size, 100}] ]] (* クラスタ係数の計算 *) Coef = N[Mean[ Table[ G2 = InduceSubgraph[G, Neighborhood[G, i, 1]]; (M[G2] - s[[i]])/Binomial[V[G2] - 1, 2] , {i, 1, size, 100}] ]]
ランダムグラフ
intSize = 5; size = 10000; A = {}; s = Table[Table[0, {i, size}], {i, size}]; For[i = 1, i <= size, i++, For[j = i + 1, j <= size, j++, If[RandomReal[] < intSize/(size - 1), s[[i, j]] = 1; s[[j, i]] = 1; A = A~Join~{{i, j}}~Join~{{j, i}}; , {} ] ] ] ss = Table[Total[s[[i]]], {i, size}]; tt = Table[Count[ss, i], {i, 1, Max[ss]}]; (* プロット *) ListPlot[tt, PlotStyle -> PointSize[Large], Filling -> Axis] (* 外部パッケージの読み込み *) << Combinatorica` G = RemoveMultipleEdges[AddEdges[AddVertices[Graph[{}, {}], size], A]] Clear[A]; (* 固有パス長 *) L = N[Median[ Table[ Mean[Distances[G, i]] , {i, 1, size, 100}] ]] (* クラスタ係数 *) Coef = N[Mean[ Table[ G2 = InduceSubgraph[G, Neighborhood[G, i, 1]]; If[V[G2] != 2 && V[G2] != 1, (M[G2] - ss[[i]])/Binomial[V[G2] - 1, 2], 0] , {i, 1, size, 10}] ], 10]
固有パス長・クラスタ係数を計算するために初めて外部パッケージ「Combinatorica」を導入してみましたが・・・
関数の仕様のみで使用例が何も書いてなくて死にそうでした。
誰が読めるんだろうこれ・・・
結論:みんなはトラバ先のSong of Aさんを参考にしてね!