0

提前感谢您的时间。我正在尝试确定一种方法来计算 R 中的博纳奇功率中心度。我是 UCINET 的长期用户,试图进行切换。在 UCINET 中,这是通过选择 Beta Centrality (Bonacich Power) 并选择“in-centrality”作为方向来完成的。

在 R 中,似乎没有一种方法可以使用 sna 或 igraph 包来计算它。这是sna中的bonpow:

bonpow(dat, g=1, nodes=NULL, gmode="digraph", diag=FALSE, tmaxdev=FALSE, 
       exponent=1, rescale=FALSE, tol=1e-07)

我确实指定了有向图,但我无法在 R 中复制分析。

同样,这里是 igraph 中的 power_centrality:

power_centrality(graph, nodes = V(graph), loops = FALSE,
      exponent = 1, rescale = FALSE, tol = 1e-07, sparse = TRUE)

在这里,似乎没有办法指定它是有向图(尽管您可以在定义网络时指定它)。但是,您可以估计它的中介中心性。

在这两种情况下,我似乎都无法指定入度或出度的权力中心性。任何帮助表示赞赏。这些或其他包装中是否有我可能忽略的东西?

4

1 回答 1

0

我不确定你所说的方向是什么意思,因为在我看来,原始论文没有处理它。现在,通常使用这些直接从邻接矩阵计算的统计数据完成的事情是通过对统计数​​据进行转置来“改变方向”(例如,在netdiffuseR包中计算曝光时,我们允许用户计算“传入”或“传出”曝光,只需对邻接矩阵进行转置)。当您进行转置时,您实际上是在翻转关系的方向性,即 i->j 变为 j->i。

如果这就是 UCINET 所做的(同样,不完全确定它是什么),那么您可以通过转置网络来获得“传入”/“传出”版本。这是一个玩具示例:

# Loading the sna package (btw: igraph's implementation is a copy of
# sna's). I wrap it around suppressMessages to avoid the verbose
# print that the package has
suppressMessages(library(sna))

# This is random graph I generated with 10 vertices
net <- structure(
  c(0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 
    0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 
    0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 
    0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 
    0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0),
  .Dim = c(10L, 10L)
  )

# Here is the default
bonpow(net)
#>  [1] -0.8921521 -0.7658658 -0.9165947 -1.4176664 -0.6151369 -0.7862345
#>  [7] -0.9206684 -1.3565601 -1.0347335 -1.0062173

# Here I'm getting the transpose of the adjmat
net2 <- t(net)

# The output is different (as you can see)
bonpow(net2)
#>  [1] -0.8969158 -1.1026305 -0.6336011 -0.7158869 -1.2960022 -0.9545159
#>  [7] -1.1684592 -0.8845729 -1.0368018 -1.1190876

reprex 包(v0.3.0)于 2019-11-20 创建

于 2019-11-20T18:57:56.170 回答