警告信息直接告诉你。 “对于断开连接的图,紧密度中心性没有明确定义”。 closeness 上的帮助页面说:
顶点的接近中心性由图中所有其他顶点的最短路径的平均长度的倒数定义:
但是如果有两个顶点之间有 no 路径呢?你将如何计算这个?对此没有明确的答案,这就是为什么在这种情况下没有很好地定义亲密性的原因。两个节点之间怎么可能没有路径?如果图是断开的,即有多个连接的组件。让我用一个非常简单的图表来说明。
library(igraph)
g = make_ring(3) + make_ring(4)
plot(g)
此图有两个断开的组件。例如,节点 3 和 4 之间没有路径。因此,当我们运行 closeness 时,我们会得到相同的警告。
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
如果组件的数量大于一个,您将收到此警告消息。
我假设您正在使用来自 igraphdata 包的 USairports 数据。由于这是一个有向图,您将需要指定强组件。
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)