R语言 曲线图软件包如何计算贴近度中心度?

tct7dpnv  于 2023-01-28  发布在  其他
关注(0)|答案(2)|浏览(476)

我有以下网络:

g <- graph(c("Amy", "Ram",
          "Ram", "Li",
          "Li", "Amy",
          "Amy", "Li",
          "Kate", "Li"), directed=TRUE)

我想知道如何计算这个网络的紧密度中心性。根据我对文档的理解,紧密度是从网络的一个顶点到所有其他顶点的所有最短路径的平均值的倒数。直观地说,我将这样计算它:

Dist <- distances(g, mode="out")
Dist[Dist == Inf] <- NA
1/rowMeans(Dist, na.rm=T)

然而,这很可能是不正确的,因为内置igraph函数中用于计算紧密度中心度的值显示了不同的结果:

closeness(g, mode = "out")

我想了解如何计算接近度,以及如何在不使用内置函数的情况下一步一步地得到相同的结果。

evrscar2

evrscar21#

这里有几个问题。你的代码中确实有一个错误,但最大的问题是closeness函数--要么是它的实现,要么是它的文档。首先,我们应该计算什么?closeness的igraph文档说:
一个顶点的接近中心度定义为到/来自图中所有其他顶点的最短路径的平均长度的倒数:
1/和(d(v,i),i!= v)
如果在顶点v和i之间没有(有向)路径,则在公式中使用顶点总数而不是路径长度。
让我们将其与Wikipedia article on closeness_centrality中的内容进行比较。
Bavelas(1950)将接近度定义为远度的倒数,即:
C(x)= 1/∑ d(y,x)
其中d(y,x)是顶点x和y之间的距离。当谈到接近中心度时,人们通常指的是它的归一化形式,表示最短路径的平均长度,而不是它们的总和。它通常由前面的公式乘以N − 1给出,其中N是图中的节点数。对于大型图,这个差异变得无关紧要,所以去掉− 1得到:
C(x)= N/∑ d(y,x)
此调整允许在不同大小的图形的节点之间进行比较。
首先,igraph文档对i != v求和。
单词"平均长度的倒数"意味着C(x) = (N-1) / ∑ d(y,x),但是公式是1 / ∑ d(y,x),事实上,我们将看到,closeness函数计算的结果对应于原始定义,尽管单词表示规范化版本。
但是还有一个问题,您将Inf值更改为NA,然后使用na.rm=T,请注意igraph文档中的最后一句话。
如果在顶点v和i之间没有(有向)路径,则在公式中使用顶点总数而不是路径长度。
我们不应该忽略这些节点,我们应该将距离设置为图中节点的总数,因此,要得到与igraph相同的结果,我们需要计算:

Dist <- distances(g, mode="out")
Dist[Dist == Inf] <- vcount(g)
1/rowSums(Dist)
      Amy       Ram        Li      Kate 
0.1666667 0.1428571 0.1428571 0.1666667 
closeness(g, mode = "out")
      Amy       Ram        Li      Kate 
0.1666667 0.1428571 0.1428571 0.1666667

当然,igraph的文档是不一致的,文字上说它计算规范化的接近度,但公式(以及它实际计算的内容)是非规范化的形式。
我希望这能清楚地说明正在计算的是什么,并帮助您选择要用于分析的内容。

    • 顺便说一句:**当你计算1/rowMeans(Dist)时,你包含了igraph忽略的v = i的情况(距离为零)。这意味着你计算的是C(x) = N / ∑ d(y,x)而不是C(x) = (N-1) / ∑ d(y,x)。正如维基百科所指出的,对于大型图,它们本质上是相同的,但我只是想确保你知道你在计算什么。
oknwwptz

oknwwptz2#

看起来igraph在@G5W发布优秀的answer之后可能已经发生了变化。closeness的igraph文档已经发生了变化:
一个顶点的接近中心度定义为到图中所有其他顶点的距离之和的倒数:
如果顶点v和i之间没有(有向)路径,则i从计算中省略。如果没有其他顶点可以从v到达,则它的接近度返回为NaN。
输出也是如此。使用原始示例:

g <- graph(c("Amy", "Ram",
          "Ram", "Li",
          "Li", "Amy",
          "Amy", "Li",
          "Kate", "Li"), directed=TRUE)

closeness(g, mode = "out")

      Amy       Ram        Li      Kate 
0.5000000 0.3333333 0.3333333 0.1666667

结果与上面的例子不同,正确的答案不会被接受的答案(链接在上面,复制在这里)复制,因为函数igraph::closeness可能已经改变:

Dist <- distances(g, mode="out")
Dist[Dist == Inf] <- vcount(g)
1/rowSums(Dist)

      Amy       Ram        Li      Kate 
0.1666667 0.1428571 0.1428571 0.1666667

注意:这仍然匹配@G5W的输出,但不再匹配closeness(g, mode = "out")。相反,更类似于OP的东西,除了用rowSums而不是rowMeans给出igraph::closeness的匹配:

Dist <- distances(g, mode="out")
Dist[Dist == Inf] <- NA
1/rowSums(Dist,na.rm=T)

      Amy       Ram        Li      Kate 
0.5000000 0.3333333 0.3333333 0.1666667

会话信息:

> sessionInfo()
R version 4.2.2 (2022-10-31 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19044)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.utf8 
[2] LC_CTYPE=English_United States.utf8   
[3] LC_MONETARY=English_United States.utf8
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.utf8    

attached base packages:
[1] stats     graphics  grDevices utils     datasets 
[6] methods   base     

other attached packages:
[1] qgraph_1.9.2  igraph_1.3.2  tidyr_1.2.0   dplyr_1.0.9  
[5] ggplot2_3.4.0

loaded via a namespace (and not attached):
 [1] splines_4.2.2       gtools_3.9.2.2     
 [3] Formula_1.2-4       assertthat_0.2.1   
 [5] stats4_4.2.2        latticeExtra_0.6-29
 [7] yaml_2.3.5          pbivnorm_0.6.0     
 [9] pillar_1.7.0        backports_1.4.1    
[11] lattice_0.20-45     glue_1.6.2         
[13] digest_0.6.29       RColorBrewer_1.1-3 
[15] checkmate_2.1.0     colorspace_2.0-3   
[17] sandwich_3.0-2      htmltools_0.5.2    
[19] Matrix_1.5-1        plyr_1.8.7         
[21] psych_2.2.5         pkgconfig_2.0.3    
[23] purrr_0.3.4         xtable_1.8-4       
[25] corpcor_1.6.10      mvtnorm_1.1-3      
[27] scales_1.2.0        glasso_1.11        
[29] jpeg_0.1-9          fdrtool_1.2.17     
[31] emmeans_1.8.2       tibble_3.1.7       
[33] htmlTable_2.4.0     generics_0.1.2     
[35] farver_2.1.0        ellipsis_0.3.2     
[37] TH.data_1.1-1       withr_2.5.0        
[39] pbapply_1.5-0       nnet_7.3-18        
[41] mnormt_2.1.0        cli_3.6.0          
[43] survival_3.4-0      magrittr_2.0.3     
[45] crayon_1.5.1        estimability_1.4.1 
[47] evaluate_0.15       fansi_1.0.3        
[49] nlme_3.1-160        MASS_7.3-58.1      
[51] foreign_0.8-83      tools_4.2.2        
[53] data.table_1.14.2   lifecycle_1.0.3    
[55] multcomp_1.4-20     stringr_1.4.0      
[57] munsell_0.5.0       cluster_2.1.4      
[59] compiler_4.2.2      rlang_1.0.6        
[61] grid_4.2.2          rstudioapi_0.13    
[63] htmlwidgets_1.5.4   lavaan_0.6-11      
[65] base64enc_0.1-3     labeling_0.4.2     
[67] rmarkdown_2.14      gtable_0.3.0       
[69] codetools_0.2-18    abind_1.4-5        
[71] DBI_1.1.2           reshape2_1.4.4     
[73] R6_2.5.1            gridExtra_2.3      
[75] zoo_1.8-10          knitr_1.39         
[77] performance_0.10.1  fastmap_1.1.0      
[79] utf8_1.2.2          Hmisc_4.7-0        
[81] insight_0.18.8      stringi_1.7.6      
[83] parallel_4.2.2      Rcpp_1.0.8.3       
[85] vctrs_0.5.1         rpart_4.1.19       
[87] png_0.1-7           tidyselect_1.1.2   
[89] xfun_0.31           coda_0.19-4

相关问题