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