Nätverksrandomiseringar
I föregående övning kanske du lade märke till att den genomsnittliga väglängden i Forrest Gump-nätverket var kortare än i det slumpmässiga nätverket. Om du körde koden flera gånger märkte du förmodligen att den nästan alltid är kortare i Forrest Gump-nätverket. Det tyder på att Forrest Gump-nätverket är mer sammankopplat än de slumpmässiga nätverken, trots att de har samma antal noder och ungefär samma grafäthet. I stället för att köra koden om och om igen kan du göra en mer formell analys genom att skapa 1 000 slumpmässiga grafer baserade på antalet noder och tätheten i det ursprungliga Forrest Gump-nätverket. Sedan kan du undersöka hur många gånger den genomsnittliga väglängden i de slumpmässiga graferna är kortare än i det ursprungliga nätverket. Det här kallas ett randomiseringstest.
Grafen g och dess genomsnittliga väglängd (som du beräknade i föregående övning), g.apl, finns i din arbetsyta.
Den här övningen är en del av kursen
Nätverksanalys i R
Övningsinstruktioner
- Generera 1 000 slumpmässiga grafer av den ursprungliga grafen
ggenom att köra koden som skapar listobjektetgloch for-loopen. - Beräkna den genomsnittliga väglängden för de 1 000 slumpmässiga graferna med
lapply(). Skapa en vektorgl.aplsav dessa 1 000 värden genom att köra koden som använderunlist(). - Rita ett histogram över de genomsnittliga väglängderna för de 1 000 slumpmässiga graferna med
hist()på vektorngl.apls. Lägg till en röd streckad vertikal linje i diagrammet medabline(), där x-interceptet är värdet på den ursprungliga grafens genomsnittliga väglängd,g.apl. - Beräkna andelen gånger som de genomsnittliga väglängderna i de slumpmässiga graferna
gl.aplsär lägre än värdet för den ursprungliga grafeng.apl. Det här är i praktiken sannolikheten för att vi skulle observera vår genomsnittliga väglängd av en slump, givet den ursprungliga grafens täthet och antal noder.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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(___ < ___)