传递性衡量图中一个顶点的相邻顶点之间相互连接的概率。有时也称为聚类系数。
参数
- graph
要分析的图。
- type
要计算的传递性的类型。 可能的值
- "global"
无向图的全局传递性。这仅仅是图中三角形数量与连通三元组数量的比率。在有向图中,边的方向将被忽略。
- "local"
无向图的局部传递性。 它是针对
vids
参数中给出的每个顶点计算的。 顶点的局部传递性是连接到顶点的三角形数量与以该顶点为中心的三元组的比率。 在有向图中,边的方向将被忽略。- "undirected"
这与
global
相同。- "globalundirected"
这与
global
相同。- "localundirected"
这与
local
相同。- "barrat"
由 A. Barrat 定义的加权传递性。 见下文详细信息。
- "weighted"
与
barrat
相同。
- vids
将要计算局部传递性的顶点 ID。 对于全局传递性类型,这将将被忽略。 默认值为
NULL
,在这种情况下,将考虑所有顶点。 在此处提供NULL
比V(graph)
稍快。- weights
加权传递性的可选权重。 对于其他传递性度量,它将被忽略。 如果它是
NULL
(默认值)并且该图具有weight
边属性,则会自动使用它。- isolates
字符型标量,对于传递性的局部版本,它定义了如何处理度数为零和一的顶点。 如果是 ‘
NaN
’,则它们的局部传递性报告为NaN
,并且它们不包含在平均值中,对于计算平均值的传递性类型。 如果没有度数等于或高于二的顶点,则平均值仍将导致NaN
。 如果是 ‘zero
’,则我们将它们的传递性报告为 0,并且如果计算平均值,则将它们包含在平均值中。 对于全局传递性,它控制如何处理没有连通三元组的图:将根据相应的设置返回NaN
或零。
详细信息
请注意,基本上有两种传递性度量,一种是顶点级别的,另一种是图级别的属性。
传递性有几种推广到加权图的方法,这里我们使用 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)
参见
其他 structural.properties:bfs()
、component_distribution()
、connect()
、constraint()
、coreness()
、degree()
、dfs()
、distance_table()
、edge_density()
、feedback_arc_set()
、feedback_vertex_set()
、girth()
、is_acyclic()
、is_dag()
、is_matching()
、k_shortest_paths()
、knn()
、reciprocity()
、subcomponent()
、subgraph()
、topo_sort()
、unfold_tree()
、which_multiple()
、which_mutual()
作者
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