Я пытаюсь рассчитать кластеризацию каждой вершины в моем графе, где кластеризация определяется на уровне вершины как процент фактически сформированных возможных связей между соседями (например, если вершина i имеет 4 соседа, существует шесть возможных ссылок). между соседями).
Я только начинаю изучать некоторые более формальные вещи о сетях, но кажется, что это должно быть довольно распространенной операцией/мерой «герметичности» сети.
Однако я не смог найти готовую функцию для вычисления этого с помощью igraph
. Обе функции clusters
и cluster.distribution
, похоже, имеют дело с тем, что я бы назвал «компонентами», и, насколько я могу судить, это просто псевдонимы для components
и component.distribution
соответственно.
Например, для 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
?