在igraph

时间:2019-04-27 02:06:10

标签: r graph igraph

我希望针对一组顶点(ATL,JFK,ORD和LAS)计算USairport图的贴近度中心度度量

我的代码如下:

closeness(USairports,vids=c("ATL","JFK","ORD","LAS"),mode="all")

这会给我警告消息

  

“近距离(美国机场,vids = c(” ATL“,” JFK“,” ORD“,” LAS“),模式=   “ all”):位于中心点。c:2784:不接近中心点   为断开连接的图定义的很好”

此警告本质上是什么意思?

1 个答案:

答案 0 :(得分:0)

警告消息直接告诉您。 “对于断开的图,紧密度中心性定义不佳”。 closeness上的帮助页面显示:

  

顶点的紧密中心性是由图中所有其他顶点之间的最短路径的平均长度的倒数定义的:

但是,如果有两个顶点之间没有路径的怎么办?您将如何计算?没有明确的答案,这就是为什么在这种情况下无法很好地定义紧密度的原因。两个节点之间怎么可能没有路径?如果图形断开连接,即具有多个连接的组件。让我用一个非常简单的图来说明。

library(igraph)
g = make_ring(3) + make_ring(4)
plot(g)

Graph with two components

此图有两个断开的组件。例如,节点3和4之间没有路径。因此,当我们运行紧密度时,我们会收到相同的警告。

closeness(g)
[1] 0.03333333 0.03333333 0.03333333 0.04000000 0.04000000 0.04000000 0.04000000
Warning message:
In closeness(g) :
  At centrality.c:2784 :closeness centrality is not well-defined for disconnected graphs

您可以通过检查连接的组件数量来轻松测试。

ConComp = components(g)
ConComp$no
[1] 2

如果组件数大于一个,您将收到此警告消息。

我假设您正在使用USairports包中的igraphdata数据。由于那是有向图,因此您将需要指定强大的组件。

library(igraphdata)
data(USairports)
USA_CC = components(USairports, mode="strong")
USA_CC$no
[1] 30
USA_CC$csize
 [1]  1   1  1  1  1  1  1  1  1  1  2  1  2  1  1  2  1  1  1  1  1  1  1
[24]  1 723  1  1  1  1  1

大多数机场都在一个大组成部分中,但是有几个机场在一个小组成部分中。在这种情况下,将注意力集中在彼此相连的723个机场上可能是有意义的。

BigComp = which.max(USA_CC$csize)
Main_USairports = induced_subgraph(USairports, 
    which(USA_CC$membership == BigComp))
closeness(Main_USairports)

<没有警告消息>