我刚刚开始使用R来处理图形。我需要计算特征向量中心度量,然后遇到了问题。给出以下有向图:
m = matrix(c(0,0,0,0,1,
0,0,1,0,0,
0,0,0,0,1,
0,1,0,0,0,
1,0,0,0,15), byrow = T, nrow = 5)
g <-graph.adjacency(adjmatrix=m, diag=T)
我为同一个图获得了不同的图级中心性索引:
> centr_eigen(g, directed = T, scale = F, options = arpack_defaults, normalized = T)$centralization
[1] 0.9812478
> centr_eigen(g, directed = T, scale = F, options = arpack_defaults, normalized = T)$centralization
[1] 5.770555e-18
> centr_eigen(g, directed = T, scale = F, options = arpack_defaults, normalized = T)$centralization
[1] 0.9812478
> centr_eigen(g, directed = T, scale = F, options = arpack_defaults, normalized = T)$centralization
[1] 0.9812478
> centr_eigen(g, directed = T, scale = F, options = arpack_defaults, normalized = T)$centralization
[1] 3.472951e-18
> centr_eigen(g, directed = T, scale = F, options = arpack_defaults, normalized = T)$centralization
[1] 0.9812478
> centr_eigen(g, directed = T, scale = F, options = arpack_defaults, normalized = T)$centralization
[1] 5.517527e-18
我不确定是否指定迭代次数或应该如何遍历图形将解决此问题。还有其他方法可以计算这个中心度量,以便在多次计算时获得相同的结果吗?
答案 0 :(得分:0)
通常,特征向量中心性依赖于各个节点的中心性。这些特征解的存在性和唯一性是我认为通常属于数学堆栈交换的问题。
在这种情况下,在邻接矩阵的(5,5)位置的简单拼写错误是导致此行为的原因。我会解释一下,而不仅仅是说。
您会注意到,虽然中心度量在1和0之间,但您的邻接矩阵在边界处在1和0之间振荡。为什么你这样做?一个循环图(链)保证在有限的击球时间内返回到它的原始位置。一维晶格的中心度始终为0.
g <- make_ring(10, directed=FALSE)
g
IGRAPH U--- 10 10 -- Ring graph
+ attr: name (g/c), mutual (g/l), circular (g/l)
+ edges:
1-- 2 2-- 3 3-- 4 4-- 5 5-- 6 6-- 7 7-- 8 8-- 9 9--10 1--10
为什么呢?因为图形以100%的概率从一个节点移动到下一个节点。
centr_degree(g)$centralization
[1] 0
您的图表如下所示
g
IGRAPH D--- 5 20 --
+ edges:
[1] 1->5 2->3 3->5 4->2 5->1 5->5 5->5 5->5 5->5 5->5 5->5 5->5 5->5 5->5 5->5 5->5 5->5 5->5 5->5 5->5
它以5/16的概率卡在5,并以1/16的概率移动到1。如果你修正了这个拼写错误,你的中心地位总是计算为.719218
,这仍然表明这个图表会严重影响节点5。
您可能还会注意到,如果您将定向从TRUE
更改为FALSE
,您还可以避免此问题,因为它会计算计算特征中心性所需的最短有向图,其中它总是会计算.959
。