2016-05-12 28 views
0

ich eine IGRAPH haben, wo die Scheiteln ein Attribut, das die bekannten Community beschreibt:Vergleicht man erkannt Gemeinden mit Grundwahrheit

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) 

Dann erkenne ich die Gemeinschaft mit fastgreedy:

g_com=fastgreedy.community(g) 

Ich muss Vergleichen Sie die vom Algorithmus erkannten Gemeinschaften mit den bekannten Gemeinschaften. Gibt es eine Möglichkeit, ein igraph-communities-Objekt von den Vertex-Informationen zu erhalten, damit ich compare() verwenden kann? Wenn nicht, wie könnte ich sie vergleichen?

Antwort

1

Schauen Sie sich die ?help Seite für compare an. Es heißt:

Ein Community-Objekt mit einer Community-Struktur; oder ein numerischer Vektor, der Zugehörigkeitsvektor der ersten Gemeinschaftsstruktur. Der Membership-Vektor sollte die Community-ID jedes Eckpunkts enthalten, die Nummerierung der Communities beginnt mit eins.

compare kann also vergleichen entweder communities Objekte oder numerische Vektoren mit der gleichen Länge wie die Anzahl der Ecken. Sie haben ein Netzwerk mit 10 Scheitelpunkten simuliert, sodass Ihre Liste der Communitys auch die Länge 10 haben sollte. Ihr Fehler besteht darin, dass Sie einen Vektor von Communities basierend auf Ihren Kanten anstatt Ihrer Scheitelpunkte definieren. Ihr Vektor hat die Länge 30.

Der folgende Ansatz funktioniert.

# 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

Ah habe nicht erkannt, dass ich die Kanten im Beispiel verwendete oder dass ich Vergleiche mit einem Vektor verwenden konnte. Vielen Dank! – user3388408