igraph包计算中的贴近度和最短路径函数定义是什么?

igraph包计算中的贴近度和最短路径函数定义是什么?,r,igraph,R,Igraph,我在正在处理的一些数据中发现了一个奇怪的结果,并决定使用以下矩阵测试closeness和shortest.path函数 test<-c(0,0.3,0.7,0.9,0.3,0,0,0,0.7,0,0,0.5,0.9,0,0.5,0) test<-matrix(test,nrow=4) colnames(test)<-c("A","B","C,","D") rownames(test)<-c("A","B","C,","D") test A B C D

我在正在处理的一些数据中发现了一个奇怪的结果,并决定使用以下矩阵测试closeness和shortest.path函数

test<-c(0,0.3,0.7,0.9,0.3,0,0,0,0.7,0,0,0.5,0.9,0,0.5,0)
test<-matrix(test,nrow=4)
colnames(test)<-c("A","B","C,","D")
rownames(test)<-c("A","B","C,","D")
test
    A   B   C   D
A 0.0 0.3 0.7 0.9
B 0.3 0.0 0.0 0.0
C 0.7 0.0 0.0 0.5
D 0.9 0.0 0.5 0.0

grafo=graph.adjacency(abs(test),mode="undirected",weighted=TRUE,diag=FALSE)
这仅仅是重量的总和,而不是距离(1-重量)

当我将距离定义为1-weight时,我得到

> 1/((1-0.7)+((1-0.7)+(1-0.3))+(1-0.5))
[1] 0.5555556
在igraph手册中,它在公式中说,它是距离的总和。我的问题是,函数实际上考虑了权重,因此它是一个bug,还是我们应该考虑(并修改)我们的图的边作为距离来运行这个函数?< /P> 同样的问题也出现在shortest.paths函数中。顺便说一句,它给出的是权重的总和,而不是距离

> shortest.paths(grafo)
    A   B   C   D
A 0.0 0.3 0.7 0.9
B 0.3 0.0 1.0 1.2
C 0.7 1.0 0.0 0.5
D 0.9 1.2 0.5 0.0

谢谢。

你从哪里得到距离=1重量的定义?我很确定所有这些函数都是在假设
distance=weight
@josilber的情况下运行的。我从相关系数得到了邻接矩阵。在这种情况下,两个节点的接近度越高,它们的相关性就越强。然而,在我的图中使用距离=权重的贴近度将导致相反的假设。我知道有些图可能会使用权重作为标准程序的距离。我这样问是因为,在没有的情况下,这可能会产生误导,因为手册中提到了这一点。也许可以查看
?is.weighted
帮助页面。但在igraph库中,将边的权重解释为节点之间的距离是很常见的。@MrFlick这是我问题的一部分。我真的不知道组成边缘权重的数据的范围或多样性。这就是为什么我问weight=distancfe是一个正确/常见的定义,还是一个错误的定义。好像我不知道。但在手册中对此进行说明会有所帮助。甚至可以在函数中使用一个字段来处理此问题……您是否阅读了
?is.weighted
帮助页面?在我看来,这似乎涵盖了这一点:“边权重由不同的函数用于不同的目的。例如,最短路径函数使用它作为路径的成本;社区查找方法使用它作为两个顶点之间关系的强度,等等。有关详细信息,请查看使用加权图的函数手册页。”
> 1/((1-0.7)+((1-0.7)+(1-0.3))+(1-0.5))
[1] 0.5555556
> shortest.paths(grafo)
    A   B   C   D
A 0.0 0.3 0.7 0.9
B 0.3 0.0 1.0 1.2
C 0.7 1.0 0.0 0.5
D 0.9 1.2 0.5 0.0