Randomizacje sieci
W poprzednim ćwiczeniu mogło się okazać, że średnia długość ścieżki w sieci Forresta Gumpa jest mniejsza niż w sieci losowej. Jeśli uruchamiałeś kod kilka razy, z pewnością zauważyłeś, że niemal zawsze jest ona niższa w sieci Forresta Gumpa. Sugeruje to, że sieć Forresta Gumpa jest bardziej wzajemnie powiązana niż poszczególne sieci losowe – nawet jeśli te ostatnie mają taką samą liczbę wierzchołków i niemal identyczną gęstość grafu. Zamiast wielokrotnie powtarzać ten kod, możesz przeprowadzić bardziej formalną analizę: wygeneruj 1000 losowych grafów opartych na liczbie wierzchołków i gęstości oryginalnego grafu Forresta Gumpa, a następnie sprawdź, ile razy średnia długość ścieżki w grafach losowych jest mniejsza niż w oryginalnej sieci. Taki test nazywa się testem randomizacyjnym.
Graf g oraz jego średnia długość ścieżki (obliczona w poprzednim ćwiczeniu) g.apl są dostępne w twoim środowisku roboczym.
To ćwiczenie jest częścią kursu
Analiza sieci w R
Instrukcje do ćwiczenia
- Wygeneruj 1000 losowych grafów na podstawie oryginalnego grafu
g, wykonując kod tworzący obiekt listygloraz pętlę for. - Oblicz średnią długość ścieżki dla 1000 losowych grafów za pomocą
lapply(). Utwórz wektorgl.aplsz tych 1000 wartości, wykonując kod korzystający zunlist(). - Narysuj histogram średnich długości ścieżek dla 1000 losowych grafów, wywołując
hist()na wektorzegl.apls. Dodaj do wykresu czerwoną przerywaną linię pionową za pomocąabline(), gdzie punkt przecięcia z osią x to wartość średniej długości ścieżki oryginalnego grafu,g.apl. - Oblicz proporcję przypadków, w których wartości średniej długości ścieżki losowych grafów
gl.aplssą niższe od wartości dla oryginalnego grafug.apl. Jest to w istocie prawdopodobieństwo, że zaobserwowana średnia długość ścieżki mogłaby pojawić się losowo, przy danej gęstości i liczbie wierzchołków oryginalnego grafu.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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(___ < ___)