2016-08-30 71 views
0

我正在使用一系列使用igraph的無向小圖。我對圖級度集中感興趣,並且正在使用centr_degree函數IGRAPH。但是,我注意到,即使在「星形」圖(一個節點連接到所有其他節點,沒有其他連接)的情況下,代碼不會返回1的度集中,但Freeman 1979似乎認爲他們應該。我是否錯過了這個應該如何計算的東西?Igraph中的度集中化R-星圖未評估爲1

弗里曼1979年:http://leonidzhukov.net/hse/2014/socialnetworks/papers/freeman79-centrality.pdf

+1

可以很容易地幫助,如果你試圖提供[重複的例子(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)與你正在測試的樣本數據,所以我們可以做同樣的事情。但是,這似乎不是一個編程問題,而是關於圖論中術語定義的問題。如果是這樣的話,這是Stack Overflow的主題。 – MrFlick

回答

1

我一直在處理同樣的問題。我認爲計算集中的代碼有些問題,但我認爲它是用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,這與使用集中(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 
+0

非常感謝Shila! –