【问题标题】:Similarity as edge attribute in iGraph与 iGraph 中边缘属性的相似性
【发布时间】:2014-05-27 18:27:00
【问题描述】:

假设我们有一些图 g,然后我们从 g 计算每对节点之间的一些相似性:

g <- graph.ring(10)
g_sim <- similarity.dice(g)

问题是:如何使用来自 g_sim 的数据为来自 g 的边分配权重?换句话说:如果 g 中有边 A--B,我希望该边的属性等于我们在 g_sim 中对 A,B 的值。

【问题讨论】:

  • 您可以使用E(g)$weight &lt;- 添加边权重。你只需要知道这些吗?

标签: r igraph graph-theory similarity edge-list


【解决方案1】:

理论上你可以做到

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)

【讨论】:

  • 帮助很大! g_sim 矩阵是starnge,因为 g
猜你喜欢
  • 2018-11-03
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 2016-11-29
  • 2019-05-08
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
相关资源
最近更新 更多