我想计算一组顶点的美国机场图的紧密度中心度量:ATL,JFK,ORD,LAS
我的代码如下:
closeness(USairports,vids=c("ATL","JFK","ORD","LAS"),mode="all")
这给了我警告信息
“在接近(USairports,vids = c(”ATL“,”JFK“,”ORD“,”LAS“),mode =”all“):在centrality.c:2784:亲密度中心性没有明确定义为断开连接图表”
这个警告本质上意味着什么?
警告消息直接告诉您。 “对于断开的图形,接近中心性没有明确定义”。 closeness
的帮助页面说:
顶点的紧密度中心性由图中所有其他顶点的最短路径的平均长度的倒数定义:
但是如果有两个顶点之间没有路径呢?你会如何计算?对此没有明确的答案,这就是为什么在这种情况下没有明确定义亲密度的原因。两个节点之间可能没有路径怎么可能?如果图形断开连接,即具有多个连接的组件。让我用一个非常简单的图表来说明。
library(igraph)
g = make_ring(3) + make_ring(4)
plot(g)
该图有两个断开的组件。例如,节点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
如果组件数大于1,您将收到此警告消息。
我假设您使用的是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)
<无警告信息>