igraph 中的平均距离与平均距离

Mean distance vs. mean of disances in igraph

我正在尝试计算我的网络的平均路径长度,但我遇到了以下问题。我过去一直在使用 igraph 包中的 average.path.length。这次我决定走一条不同的路:我想使用 distances 函数(也来自 igraph 包)然后找到所有距离的平均值。据我了解,distances 函数只是计算图形顶点之间的成对最短路径,因此取 mean(distances(graph)) 应该 return 平均路径长度。但是,当我尝试使用这种方法时,我注意到我得到了 average.path.lengthmean_distance 的直接应用程序给出的不同值。最初我认为问题是由一些孤立的节点引起的,但是当我在一个完全连接的玩具图上检查它时,我遇到了同样的问题。

这是一个可重现的例子:

  toy.graph <- graph.formula(1-2,1-3,1-5,2-5,3-5,3-6,4-6)
  mean_distance(toy.graph)
  [1] 1.866667
  average.path.length(toy.graph)
  [1] 1.866667
  mean(distances(toy.graph))
  [1] 1.555556

我知道 mean_distancedistances 使用不同的算法,但在这么小和简单的模型上,差异应该这么大吗?我错过了什么?

我认为您得到了不同的答案,因为您对整个距离矩阵取平均而不是 distance(toy.graph) 的下|上三角,这包括对角线上的 0,它降低了距离

library(igraph)
toy.graph <- graph.formula(1-2,1-3,1-5,2-5,3-5,3-6,4-6)
plot(toy.graph)
mean_distance(toy.graph)
#[1] 1.866667

average.path.length(toy.graph)
#[1] 1.866667

mean(distances(toy.graph))
#[1] 1.555556

mean(distances(toy.graph)[lower.tri(distances(toy.graph))])
#[1] 1.866667