用R计算一个顶点(节点)的局部聚类系数(手工)

Calculate local clustering coefficient of a vertex (node) with R (by hand)

我找到了一个展示如何手动计算 LCC 的示例(见图)。

如何在 R 中复制这些步骤?重点是找到 "Actual number of links among Neighbors"(中间步骤)

我最好手算一下

*igraph包有提供这个数字吗?

示例邻接矩阵:

matrix(data = c(0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,0), ncol = 4)

所有这些都可以在 igraph 中完成。很高兴你举了一个例子, 但由于图是完全连接的,所有顶点的 LCC=1。我决定 使用稍微复杂一点的图表。我将通过 "by hand" 顶点 1 的详细部分。

示例图

library(igraph)

set.seed(1234)
g = erdos.renyi.game(5, 0.7)
LO = matrix(c(0,2,1,1,1,0,0,-1,1,0), nrow=5, ncol=2)
plot(g, layout=LO)

首先,是的,igraph 有一个用于 LCC 的内置函数 transitivity。 对于我的示例图,您可以使用

transitivity(g, type="localundirected")
[1] 0.6666667 0.0000000 0.3333333 0.3333333 0.6666667

但是你的问题的主要部分是手算。 您唯一需要从图中得到的东西是第一个 两个步骤 - 度中心性邻居之间的实际联系

度中心性degree 函数给出

degree(g)
[1] 3 2 3 3 3
degree(g, 1)        ## Vertex 1 only
[1] 3

正如您在问题中所建议的,唯一具有挑战性的部分是 邻居之间的实际联系。你可以通过使用子图来得到这个 由一个点的邻居引起,然后检查边的数量。 所以对于顶点 1,我们得到

ecount(induced_subgraph(g, neighbors(g, 1)))
[1] 2

这是顶点 1 的完整计算

(DC   = degree(g, 1))
[1] 3
>(ALAN = ecount(induced_subgraph(g, neighbors(g, 1))))
[1] 2
(MaxPoss = DC*(DC-1)/2)
[1] 3
(LCC = ALAN/MaxPoss)
[1] 0.6666667

这与上面给出的 transitivity 一致。