跳到内容

传递性衡量图中一个顶点的相邻顶点之间相互连接的概率。有时也称为聚类系数。

用法

transitivity(
  graph,
  type = c("undirected", "global", "globalundirected", "localundirected", "local",
    "average", "localaverage", "localaverageundirected", "barrat", "weighted"),
  vids = NULL,
  weights = NULL,
  isolates = c("NaN", "zero")
)

参数

graph

要分析的图。

type

要计算的传递性的类型。 可能的值

"global"

无向图的全局传递性。这仅仅是图中三角形数量与连通三元组数量的比率。在有向图中,边的方向将被忽略。

"local"

无向图的局部传递性。 它是针对 vids 参数中给出的每个顶点计算的。 顶点的局部传递性是连接到顶点的三角形数量与以该顶点为中心的三元组的比率。 在有向图中,边的方向将被忽略。

"undirected"

这与 global 相同。

"globalundirected"

这与 global 相同。

"localundirected"

这与 local 相同。

"barrat"

由 A. Barrat 定义的加权传递性。 见下文详细信息。

"weighted"

barrat 相同。

vids

将要计算局部传递性的顶点 ID。 对于全局传递性类型,这将将被忽略。 默认值为 NULL,在这种情况下,将考虑所有顶点。 在此处提供 NULLV(graph) 稍快。

weights

加权传递性的可选权重。 对于其他传递性度量,它将被忽略。 如果它是 NULL(默认值)并且该图具有 weight 边属性,则会自动使用它。

isolates

字符型标量,对于传递性的局部版本,它定义了如何处理度数为零和一的顶点。 如果是 ‘NaN’,则它们的局部传递性报告为 NaN,并且它们不包含在平均值中,对于计算平均值的传递性类型。 如果没有度数等于或高于二的顶点,则平均值仍将导致 NaN。 如果是 ‘zero’,则我们将它们的传递性报告为 0,并且如果计算平均值,则将它们包含在平均值中。 对于全局传递性,它控制如何处理没有连通三元组的图:将根据相应的设置返回 NaN 或零。

对于 ‘global’,如果图中没有连通三元组,则为单个数字或 NaN

对于 ‘local’,传递性分数的向量,每个 ‘vids’ 中的一个顶点对应一个分数。

详细信息

请注意,基本上有两种传递性度量,一种是顶点级别的,另一种是图级别的属性。

传递性有几种推广到加权图的方法,这里我们使用 A. Barrat 的定义,这是一种局部顶点级别的量,其公式为

$$C_i^w=\frac{1}{s_i(k_i-1)}\sum_{j,h}\frac{w_{ij}+w_{ih}}{2}a_{ij}a_{ih}a_{jh}$$

\(s_i\) 是顶点 \(i\) 的强度,请参见 strength(),\(a_{ij}\) 是邻接矩阵的元素,\(k_i\) 是顶点度,\(w_{ij}\) 是权重。

如果所有边权重都相同,则此公式将返回正常的非加权局部传递性。

barrat 类型的传递性不适用于具有多重边和/或环边的图。 如果要为有向图计算它,请首先使用 collapse 模式调用 as_undirected()

参考文献

Wasserman, S., and Faust, K. (1994). 社会网络分析:方法与应用。 剑桥:剑桥大学出版社。

Alain Barrat, Marc Barthelemy, Romualdo Pastor-Satorras, Alessandro Vespignani:复杂加权网络的架构,美国国家科学院院刊 101, 3747 (2004)

作者

Gabor Csardi csardi.gabor@gmail.com

示例


g <- make_ring(10)
transitivity(g)
#> [1] 0
g2 <- sample_gnp(1000, 10 / 1000)
transitivity(g2) # this is about 10/1000
#> [1] 0.00993315

# Weighted version, the figure from the Barrat paper
gw <- graph_from_literal(A - B:C:D:E, B - C:D, C - D)
E(gw)$weight <- 1
E(gw)[V(gw)[name == "A"] %--% V(gw)[name == "E"]]$weight <- 5
transitivity(gw, vids = "A", type = "local")
#>   A 
#> 0.5 
transitivity(gw, vids = "A", type = "weighted")
#>    A 
#> 0.25 

# Weighted reduces to "local" if weights are the same
gw2 <- sample_gnp(1000, 10 / 1000)
E(gw2)$weight <- 1
t1 <- transitivity(gw2, type = "local")
t2 <- transitivity(gw2, type = "weighted")
all(is.na(t1) == is.na(t2))
#> [1] TRUE
all(na.omit(t1 == t2))
#> [1] FALSE