Создание новых мер в igraph

Я хочу создать функцию для эффективного размера Берта. Формула сводится к:

Эффективный размер = n - 2t/n

  • где t — количество связей (не считая связей с эго)
  • n — количество людей в сети (не считая эго).

Я не совсем уверен, с чего начать писать функции внутри/для igraph.

Дайте мне знать, если более подробная информация будет полезна...

Спасибо.


person crock1255    schedule 01.11.2011    source источник
comment
Предоставьте образец графика и то, что вы уже пробовали для расчета размера.   -  person Richie Cotton    schedule 01.11.2011


Ответы (1)


Сначала смоделируйте базовый график:

require(igraph)

alters = 50
ties   = 10
set.seed(12345)
edgelist = rbind(0, 1:alters)
edgelist = cbind(edgelist, replicate(ties, sample(alters, 2)))
g = graph(edgelist, directed=F)

dev.new(width=5, height=5)
plot(g, layout=layout.kamada.kawai)

введите здесь описание изображения

Затем напишите простую функцию для вычисления эффективного размера. (Приведенные здесь функции, работающие с g, хорошо задокументированы в руководстве по igraph и в различных примерах в сети.)

EffectiveSize <- function(g, ego=0) {
  n = neighbors(g, ego)
  t = length(E(g)[to(n) & !to(ego)])
  n = length(n)
  n - 2 * t / n
}
> EffectiveSize(g)
[1] 49.6
person John Colby    schedule 01.11.2011
comment
Ах. Благодарю вас! Извините за избыточный/основной вопрос, но я действительно не был уверен, что мне придется вызывать/редактировать в C. Я не осознавал, что могу создавать нормальные функции R для работы с igraph. - person crock1255; 02.11.2011
comment
Да, это действительно гибко. igraph также является отличным пакетом с этими удобными способами индексации/итерации по вершинам и ребрам. Удачи с вашим проектом! - person John Colby; 02.11.2011