2016-05-12 3 views
0

У меня есть igraph где Вершины есть атрибут, который описывает известное сообщество:Сравнение Обнаруженные сообщества с заземлением истины

g=sample_gnm(10, 30, directed = F, loops = F) 
communities=c("a", "b", "c") 
E(g)$known_community=sample(communities, length(E(g)), replace = T) 

Тогда я обнаруживаю сообществу fastgreedy:

g_com=fastgreedy.community(g) 

мне нужно сравнить сообщества, обнаруженные алгоритмом, с известными сообществами. Есть ли способ получить объект сообщества igraph из информации о вершинах, чтобы я мог использовать compare()? Если нет, то как я могу их сравнить?

ответ

1

Посмотрите на страницу ?help для compare. В нем говорится:

Объект общин, содержащий структуру сообщества; или числовой вектор , вектор принадлежности первой структуры сообщества. Вектор членства должен содержать идентификатор сообщества каждой вершины, нумерация сообществ начинается с нумерации .

compare Так можно сравнивать либо communities объекты или числовые векторы с той же длины, что и число вершин. Вы имитировали сеть с 10 вершинами, поэтому ваш список сообществ также должен иметь длину 10. Ваша ошибка в том, что вы пытаетесь определить вектор сообществ на основе ваших ребер, а не ваших вершин, поэтому у вас есть длина 30.

Работает следующий подход.

# Load igraph 
library(igraph) 

# Random graph 
v <- 10 
e <- 30 
g <- sample_gnm(v, e, directed = F, loops = F) 

# Known communities 
com <- sample(1:3, v, replace=TRUE) 

# Optimum communities 
opt <- fastgreedy.community(g) 

# Compare 
compare(com, opt) 
+0

А я не понял, что использовал ребра на примере или что я мог бы использовать сравнение с вектором. Спасибо! – user3388408

Смежные вопросы