Все это можно сделать за igraph
.Хорошо, что вы привели пример, но поскольку граф полностью связен, все вершины имеют LCC = 1.Я решил использовать несколько более сложный график.Я подробно рассмотрю часть «вручную» для вершины 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 есть встроенная функция transitivity
для LCC.Для моего примера графика вы можете получить это с помощью
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
, приведенным выше.