假设我们有一些图 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
度量是公共邻居数的两倍除以顶点度数的总和。显然顶点本身被排除在计算之外。所以这意味着一个圆上的两个连接顶点不共享邻居,因此它们的权重为 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)