【问题标题】:Mean distance vs. mean of disances in igraphigraph 中的平均距离与距离的平均值
【发布时间】:2017-02-20 19:15:01
【问题描述】:

我正在尝试计算我的网络的平均路径长度,但遇到以下问题。我过去一直使用igraph 包中的average.path.length。这次我决定采取不同的路线:我想使用distances 函数(也来自包igraph)然后找到所有距离的平均值。据我了解,distances 函数只是计算图顶点之间的成对最短路径,因此采用mean(distances(graph)) 应该返回平均路径长度。但是,当我尝试使用这种方法时,我注意到我得到了 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 使用了不同的算法,但是在这么小而简单的模型上差异应该这么大吗?我错过了什么?

【问题讨论】:

    标签: r distance igraph


    【解决方案1】:

    我认为您得到了不同的答案,因为您正在平均整个距离矩阵而不是 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
    

    【讨论】:

    • 谢谢。这就说得通了。我可以看到对角线会降低平均值。当我的网络被定向时,我应该同时使用下三角和上三角吗?在这种情况下,矩阵将不是对称的(尽管它的对角线上仍为 0)。
    • 如果您想将此方法用于有向图,那么您需要计算图形的“in”和“out”距离,在平均之前删除“Inf”和对角线。这适用于一个简单的有向图,但不确定这将如何推广