Randomizări de rețele
În exercițiul anterior ai observat, probabil, că lungimea medie a traseului din rețeaua Forrest Gump era mai mică decât cea a rețelei aleatorii. Dacă ai rulat codul de mai multe ori, ai fi constatat că valoarea este aproape întotdeauna mai mică în rețeaua Forrest Gump față de rețeaua aleatorie. Aceasta sugerează că rețeaua Forrest Gump este mai bine interconectată decât fiecare rețea aleatorie, chiar dacă rețelele aleatorii au același număr de vârfuri și densități de graf aproximativ identice. În loc să rulezi codul de mai multe ori, poți aborda această problemă mai riguros: generează 1.000 de grafuri aleatorii pe baza numărului de vârfuri și a densității grafului original Forrest Gump, apoi verifică de câte ori lungimea medie a traseului grafurilor aleatorii este mai mică decât cea a rețelei originale Forrest Gump. Aceasta se numește test de randomizare.
Graful g și lungimea sa medie a traseului (calculată în exercițiul anterior), g.apl, se află deja în spațiul tău de lucru.
Acest exercițiu face parte din cursul
Analiza rețelelor în R
Instrucțiuni pentru exercițiu
- Generează 1.000 de grafuri aleatorii pornind de la graful original
g, executând codul care creează obiectul de tip listăglși buclafor. - Calculează lungimea medie a traseului pentru cele 1.000 de grafuri aleatorii folosind
lapply(). Creează un vectorgl.aplscu cele 1.000 de valori, executând codul care utilizeazăunlist(). - Trasează o histogramă a lungimilor medii ale traseului pentru cele 1.000 de grafuri aleatorii, aplicând
hist()pe vectorulgl.apls. Adaugă o linie verticală roșie punctată în grafic folosindabline(), cu interceptul pe axa x egal cu valoarea lungimii medii a traseului din graful original,g.apl. - Calculează proporția cazurilor în care valorile lungimii medii a traseului grafurilor aleatorii
gl.aplssunt mai mici decât valoarea grafului originalg.apl. Aceasta reprezintă, în esență, probabilitatea de a obține lungimea medie a traseului observată doar prin întâmplare, date fiind densitatea și numărul de vârfuri ale grafului original.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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(___ < ___)