Вычислить локальный коэффициент кластеризации вершины (узла) с R (вручную) - PullRequest
0 голосов
/ 31 декабря 2018

local clustering coefficient by hand

Я нашел пример, показывающий, как рассчитать LCC вручную (см. Изображение).

Как мне повторить эти шаги в R?Основное внимание уделяется поиску «фактического количества ссылок между соседями» (средний шаг)

Я бы предпочел рассчитать его вручную

* Предоставляет ли пакет igraph это число?

Пример матрицы смежности:

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

1 Ответ

0 голосов
/ 31 декабря 2018

Все это можно сделать за 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)

Sample Graph

Для начала, да, в 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, приведенным выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...