Bắt đầu ngayBắt đầu miễn phí

Ngẫu nhiên hóa mạng lưới

Trong bài trước, bạn có thể đã nhận thấy độ dài đường đi trung bình của mạng Forrest Gump nhỏ hơn so với mạng ngẫu nhiên. Nếu bạn chạy mã vài lần, bạn sẽ thấy nó gần như luôn thấp hơn ở mạng Forrest Gump so với mạng ngẫu nhiên. Điều này gợi ý rằng mạng Forrest Gump liên kết chặt chẽ hơn từng mạng ngẫu nhiên, dù các mạng ngẫu nhiên có cùng số đỉnh và mật độ đồ thị gần như giống hệt. Thay vì chạy lại mã nhiều lần, bạn có thể tiếp cận chính quy hơn bằng cách tạo 1000 đồ thị ngẫu nhiên dựa trên số đỉnh và mật độ của đồ thị Forrest Gump gốc. Sau đó, bạn có thể xem có bao nhiêu lần độ dài đường đi trung bình của các đồ thị ngẫu nhiên nhỏ hơn mạng Forrest Gump gốc. Điều này được gọi là kiểm định ngẫu nhiên hóa (randomization test).

Đồ thị g và độ dài đường đi trung bình của nó (bạn đã tính ở bài trước), g.apl, đã có trong không gian làm việc của bạn.

Bài tập này là một phần của khóa học

Phân tích Mạng lưới trong R

Xem khóa học

Hướng dẫn bài tập

  • Tạo 1000 đồ thị ngẫu nhiên từ đồ thị gốc g bằng cách chạy đoạn mã tạo đối tượng danh sách gl và vòng lặp for.
  • Tính độ dài đường đi trung bình của 1000 đồ thị ngẫu nhiên bằng lapply(). Tạo vector gl.apls gồm 1000 giá trị này bằng cách chạy đoạn mã dùng unlist().
  • Vẽ histogram của độ dài đường đi trung bình của 1000 đồ thị ngẫu nhiên bằng hist() trên vector gl.apls. Thêm một đường thẳng đứng màu đỏ, nét đứt vào biểu đồ bằng abline() với hoành độ là giá trị độ dài đường đi trung bình của đồ thị gốc, g.apl.
  • Tính tỷ lệ số lần giá trị độ dài đường đi trung bình của các đồ thị ngẫu nhiên gl.apls nhỏ hơn giá trị của đồ thị gốc g.apl. Về bản chất, đây là xác suất để chúng ta kỳ vọng quan sát được độ dài đường đi trung bình như vậy một cách ngẫu nhiên, khi biết mật độ và số đỉnh của đồ thị gốc.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

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(___ < ___)
Chỉnh sửa và Chạy Mã