我一直在处理同样的问题。我认为计算集中化的代码有问题,但我认为它是用 C 编写的(R 函数使用“.Call”)而不是 R,所以看不到它。下面的代码生成一个星图并计算 igraph 的中心化(不是 1)。
> adj = rbind(c(0,1,0,0,0),c(1,0,0,0,0),c(1,0,0,0,0),c(1,0,0,0,0),c(1,0,0,0,0))
> h = graph.adjacency(adj,mode="undirected")
> plot(h) # check star graph
> centralization.degree(h)
$res
[1] 4 1 1 1 1
$centralization
[1] 0.6
$theoretical_max
[1] 20
> centralize(degree(h),normalize=FALSE)
[1] 12
我认为实际问题可能是理论最大值的一个错误。手动计算得到 3 * 4 = 12,这与使用 centralize(normalize=FALSE) 一致,但来自 centralization.degree 的 R 输出似乎是 4 * 5 = 20。为了解决您的问题,我建议使用以下代码自行规范化。
> newCentralization = function(h) centralize(degree(h),normalize=FALSE)/((vcount(h)-1)*(vcount(h)-2))
> newCentralization(h)
[1] 1
> sessionInfo()
R version 3.3.0 (2016-05-03)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
locale:
[1] LC_COLLATE=English_Australia.1252 LC_CTYPE=English_Australia.1252 LC_MONETARY=English_Australia.1252
[4] LC_NUMERIC=C LC_TIME=English_Australia.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] igraph_1.0.1
loaded via a namespace (and not attached):
[1] magrittr_1.5