Willekeurige netwerkcreaties
In de vorige oefening heb je misschien gezien dat de gemiddelde padlengte van het Forrest Gump-netwerk kleiner was dan die van het willekeurige netwerk. Als je de code een paar keer uitvoerde, zag je vast dat deze in het Forrest Gump-netwerk bijna altijd lager is dan in het willekeurige netwerk. Dit suggereert dat het Forrest Gump-netwerk sterker onderling verbonden is dan elk willekeurig netwerk, ook al hebben de willekeurige netwerken hetzelfde aantal knopen en ongeveer dezelfde graafdichtheid. In plaats van de code heel vaak opnieuw uit te voeren, kun je dit formeler aanpakken door 1000 willekeurige grafen te maken op basis van het aantal knopen en de dichtheid van de oorspronkelijke Forrest Gump-graaf. Vervolgens kun je bekijken hoe vaak de gemiddelde padlengte van de willekeurige grafen kleiner is dan die van het oorspronkelijke Forrest Gump-netwerk. Dit heet een randomisatietest.
De graaf g, en de gemiddelde padlengte daarvan (die je in de vorige oefening hebt berekend), g.apl, staan in je werkruimte.
Deze oefening maakt deel uit van de cursus
Netwerkanalyse in R
Oefeninstructies
- Genereer 1000 willekeurige grafen van de oorspronkelijke graaf
gdoor de code uit te voeren die het lijstobjectglen de for-lus maakt. - Bereken de gemiddelde padlengte van de 1000 willekeurige grafen met
lapply(). Maak een vectorgl.aplsvan deze 1000 waarden door de code uit te voeren dieunlist()gebruikt. - Plot een histogram van de gemiddelde padlengtes van de 1000 willekeurige grafen met
hist()op de vectorgl.apls. Voeg een rode, gestreepte, verticale lijn toe aan de plot metabline(), waarbij het x-snijdpunt de waarde is van de gemiddelde padlengte van de oorspronkelijke graaf,g.apl. - Bereken de proportie keren dat de waarden van de gemiddelde padlengte van willekeurige grafen
gl.aplslager zijn dan de waarde van de oorspronkelijke graafg.apl. Dit is in feite de kans dat we onze geobserveerde gemiddelde padlengte toevallig zouden verwachten, gegeven de oorspronkelijke dichtheid en het aantal knopen van de graaf.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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(___ < ___)