与iGraph中的edge属性相似

时间:2014-05-27 18:27:00

标签: r igraph similarity edge

假设我们有一些图g,然后我们从g:

计算每对节点之间的一些相似性
g <- graph.ring(10)
g_sim <- similarity.dice(g)

问题是:如何使用g_sim中的数据为g的边赋值?换句话说:如果g中存在边缘A - B,我希望该边缘的属性等于g_sim中对A,B的值。 谢谢!

1 个答案:

答案 0 :(得分:2)

理论上你可以做到

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)

weighted Krackhardt_Kite plot