Kom igångKom igång gratis

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

Visa kurs

Övningsinstruktioner

  • Generera 1 000 slumpmässiga grafer av den ursprungliga grafen g genom att köra koden som skapar listobjektet gl och for-loopen.
  • Beräkna den genomsnittliga väglängden för de 1 000 slumpmässiga graferna med lapply(). Skapa en vektor gl.apls av dessa 1 000 värden genom att köra koden som använder unlist().
  • Rita ett histogram över de genomsnittliga väglängderna för de 1 000 slumpmässiga graferna med hist() på vektorn gl.apls. Lägg till en röd streckad vertikal linje i diagrammet med abline(), 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 grafen g.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(___ < ___)
Redigera och kör kod