네트워크 무작위화
이전 연습 문제에서 Forrest Gump 네트워크의 평균 경로 길이가 무작위 네트워크의 평균 경로 길이보다 더 짧다는 점을 보셨을 거예요. 코드를 몇 번 실행해 보면 Forrest Gump 네트워크가 무작위 네트워크보다 거의 항상 더 낮다는 것도 확인할 수 있습니다. 이는 무작위 네트워크와 정점 수가 같고 그래프 밀도도 거의 동일한데도, Forrest Gump 네트워크가 각 무작위 네트워크보다 더 촘촘히 연결되어 있음을 시사합니다. 코드를 여러 번 재실행하는 대신, 원래 Forrest Gump 그래프의 정점 수와 밀도를 바탕으로 무작위 그래프 1000개를 생성해 보다 체계적으로 확인할 수 있습니다. 그런 다음, 이 무작위 그래프들의 평균 경로 길이가 원래 Forrest Gump 네트워크보다 작은 경우가 몇 번인지 살펴보세요. 이를 무작위화 검정(randomization test)이라고 합니다.
그래프 g와, 이전 연습 문제에서 계산한 그 평균 경로 길이 g.apl이 작업 공간에 준비되어 있습니다.
이 연습은 강의의 일부입니다
R로 하는 네트워크 분석
연습 안내
- for 루프와 리스트 객체
gl을 생성하는 코드를 실행해, 원래 그래프g를 바탕으로 무작위 그래프 1000개를 생성하세요. lapply()를 사용해 1000개 무작위 그래프의 평균 경로 길이를 계산하세요.unlist()를 사용하는 코드를 실행해 이 1000개 값을 벡터gl.apls로 만드세요.- 벡터
gl.apls에 대해hist()를 사용해 1000개 무작위 그래프의 평균 경로 길이 히스토그램을 그리세요. 원래 그래프의 평균 경로 길이g.apl값을 x절편으로 하는 빨간색 점선의 수직선을abline()으로 추가하세요. - 무작위 그래프의 평균 경로 길이
gl.apls값이 원래 그래프g.apl값보다 작은 비율을 계산하세요. 이는 원래 그래프의 밀도와 정점 수가 주어졌을 때, 관측된 평균 경로 길이가 우연히 나타날 확률과 같습니다.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
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(___ < ___)