グラフ g があり、g からノードの各ペア間の類似度を計算するとします。
g <- graph.ring(10)
g_sim <- similarity.dice(g)
問題は、g_sim のデータを使用して g のエッジに重みを割り当てる方法です。言い換えると、g にエッジ A--B がある場合、g_sim のペア A、B の値と等しいエッジの属性が必要です。
グラフ g があり、g からノードの各ペア間の類似度を計算するとします。
g <- graph.ring(10)
g_sim <- similarity.dice(g)
問題は、g_sim のデータを使用して g のエッジに重みを割り当てる方法です。言い換えると、g にエッジ A--B がある場合、g_sim のペア A、B の値と等しいエッジの属性が必要です。
理論的にはあなたができる
g <- graph.ring(10)
g_sim <- similarity.dice(g)
el <- get.edgelist(g)
E(g)$weight <- g_sim[el]
しかし、この場合similarity.dice
は適切な対策ではありません。隣接関係 (エッジが実際に存在する場所) をゼロ以外の類似値と比較すると、
get.adjacency(g)
# [1,] . 1 . . . . . . . 1
# [2,] 1 . 1 . . . . . . .
# [3,] . 1 . 1 . . . . . .
# [4,] . . 1 . 1 . . . . .
# [5,] . . . 1 . 1 . . . .
# [6,] . . . . 1 . 1 . . .
# [7,] . . . . . 1 . 1 . .
# [8,] . . . . . . 1 . 1 .
# [9,] . . . . . . . 1 . 1
# [10,] 1 . . . . . . . 1 .
g_sim
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] 1.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.5 0.0
# [2,] 0.0 1.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.5
# [3,] 0.5 0.0 1.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0
# [4,] 0.0 0.5 0.0 1.0 0.0 0.5 0.0 0.0 0.0 0.0
# [5,] 0.0 0.0 0.5 0.0 1.0 0.0 0.5 0.0 0.0 0.0
# [6,] 0.0 0.0 0.0 0.5 0.0 1.0 0.0 0.5 0.0 0.0
# [7,] 0.0 0.0 0.0 0.0 0.5 0.0 1.0 0.0 0.5 0.0
# [8,] 0.0 0.0 0.0 0.0 0.0 0.5 0.0 1.0 0.0 0.5
# [9,] 0.5 0.0 0.0 0.0 0.0 0.0 0.5 0.0 1.0 0.0
# [10,] 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.5 0.0 1.0
すべてのエッジに重み 0 が与えられることがわかります。similarity.dice
測定値は、頂点の次数の合計で割った共通の近傍の数の 2 倍です。どうやら頂点自体は計算から除外されています。つまり、円上の 2 つの接続された頂点は隣人を共有しないため、重みは 0 になります。すべてが適切に機能していますsimilarity.dice
。すべての重みが 0 になるため、このグラフのエッジに重みを付けるのは適切な選択ではありません。
@ user368090 のおかげで、見栄えが良くなりました
g <- graph.famous("Krackhardt_Kite")
g_sim <- similarity.dice(g)
el <- get.edgelist(g)
E(g)$weight <- g_sim[el]
plot(g, edge.width=E(g)$weight*10)