Netzwerk-Randomisierungen
In der vorherigen Übung ist dir vielleicht aufgefallen, dass die durchschnittliche Pfadlänge des Forrest-Gump-Netzwerks kleiner war als die durchschnittliche Pfadlänge des Zufallsnetzwerks. Wenn du den Code ein paar Mal ausgeführt hast, hast du gemerkt, dass sie im Forrest-Gump-Netzwerk fast immer niedriger ist als im Zufallsnetzwerk. Das deutet darauf hin, dass das Forrest-Gump-Netzwerk stärker untereinander verbunden ist als jedes Zufallsnetzwerk, obwohl die Zufallsnetzwerke dieselbe Anzahl an Knoten und eine ungefähr identische Graphdichte haben. Anstatt den Code viele Male neu auszuführen, kannst du das formaler angehen, indem du 1000 Zufallsgraphen auf Basis der Knotenzahl und Dichte des ursprünglichen Forrest-Gump-Graphen erzeugst. Dann kannst du sehen, wie oft die durchschnittliche Pfadlänge der Zufallsgraphen kleiner ist als im ursprünglichen Forrest-Gump-Netzwerk. Das nennt man einen Randomisierungstest.
Der Graph g und seine durchschnittliche Pfadlänge (die du in der vorherigen Übung berechnet hast), g.apl, befinden sich in deinem Workspace.
Diese Übung ist Teil des Kurses
Netzwerkanalyse mit R
Anleitung zur Übung
- Erzeuge 1000 Zufallsgraphen des ursprünglichen Graphen
g, indem du den Code ausführst, der das Listenobjektglerstellt, sowie die for-Schleife. - Berechne die durchschnittliche Pfadlänge der 1000 Zufallsgraphen mit
lapply(). Erzeuge einen Vektorgl.aplsdieser 1000 Werte, indem du den Code mitunlist()ausführst. - Zeichne ein Histogramm der durchschnittlichen Pfadlängen der 1000 Zufallsgraphen, indem du
hist()auf den Vektorgl.aplsanwendest. Füge dem Plot mitabline()eine rote, gestrichelte vertikale Linie hinzu, wobei der x-Achsenabschnitt der Wert der durchschnittlichen Pfadlänge des ursprünglichen Grapheng.aplist. - Berechne den Anteil der Fälle, in denen die Werte der durchschnittlichen Pfadlänge der Zufallsgraphen
gl.aplskleiner sind als der Wert des ursprünglichen Grapheng.apl. Das ist im Wesentlichen die Wahrscheinlichkeit, unsere beobachtete durchschnittliche Pfadlänge zufällig zu erhalten, gegeben die ursprüngliche Dichte und Knotenzahl des Graphen.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
library(igraph)
# Generate 1000 random graphs
gl <- vector('list', 1000)
for(i in 1:1000){
gl[[i]] <- erdos.renyi.game(n = gorder(g), p.or.m = gd, type = "gnp")
}
# Calculate average path length of 1000 random graphs
gl.apls <- unlist(lapply(gl, ___, directed = FALSE))
# Plot the distribution of average path lengths
___(gl.apls, xlim = range(c(1.5, 6)))
abline(v = ___, col = "red", lty = 3, lwd = 2)
# Calculate the proportion of graphs with an average path length lower than our observed
mean(___ < ___)