시작하기무료로 시작하기

네트워크 무작위화

이전 연습 문제에서 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(___ < ___)
코드 편집 및 실행