计算顶点级聚类的正确方法

Proper approach for calculating vertex-level clustering

我正在尝试计算图中每个顶点的聚类,其中聚类在顶点级别定义为实际形成的可能的邻居间链接的百分比(例如,如果顶点 i 有 4 个邻居,邻居之间有六个可能的链接)。

我刚开始学习一些关于网络的更正式的东西,但看起来这应该是网络的 operation/measure of "tightness" 中的一个相当常见的东西。

但是,我找不到用 igraph 计算这个的固定函数。 clusterscluster.distribution 函数似乎都在处理我所说的 "components",据我所知,它们都是 components 和 [=16] 的简单别名=], 分别.

例如,对于g = make_graph("Bull"),按顶点的聚类是:

v |  c
-------
1 |  1
2 | 1/3
3 | 1/3
4 | 0 [by convention]
5 | 0 [by convention]

我可以用下面的方法得到这个

library(igraph)
g = make_graph("Bull")
sapply(adjacent_vertices(g, seq_len(vcount(g))), 
       function(x) {
         neigh = as.vector(x)
         if (length(neigh) <= 1L) return(0)
         sum(g[neigh, neigh])/
           (length(neigh)^2 - length(neigh))})
# [1] 1.0000000 0.3333333 0.3333333 0.0000000 0.0000000

但这看起来很冗长而且效率可能很低。

igraph 是否有更规范的方法来做到这一点?

clustering coefficient 捕获了这一点。在igraph,调用是transitivity。使用 "local" 作为 type 参数。您还可以指定是否要 0s 或 NAs 作为分离株:

library(igraph)
g = make_graph("Bull")
transitivity(g, type="local")
# [1] 1.0000000 0.3333333 0.3333333       NaN       NaN
transitivity(g, type="local", isolates = "zero")
# [1] 1.0000000 0.3333333 0.3333333 0.0000000 0.0000000