เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การสุ่มเครือข่าย

จากแบบฝึกหัดที่แล้ว อาจสังเกตได้ว่าค่าเฉลี่ยความยาวเส้นทาง (average path length) ของเครือข่าย Forrest Gump นั้นน้อยกว่าค่าเฉลี่ยความยาวเส้นทางของเครือข่ายสุ่ม และหากลองรันโค้ดหลายครั้ง จะพบว่าค่านี้ของ Forrest Gump มักจะต่ำกว่าเครือข่ายสุ่มเกือบทุกครั้ง ซึ่งบ่งชี้ว่าเครือข่าย Forrest Gump มีการเชื่อมต่อกันอย่างหนาแน่นกว่าเครือข่ายสุ่มแต่ละกราฟ ทั้งที่มีจำนวน vertex เท่ากันและความหนาแน่นของกราฟใกล้เคียงกัน แทนที่จะรันโค้ดซ้ำหลายครั้ง สามารถทดสอบได้อย่างเป็นระบบมากขึ้นโดยการสร้างกราฟสุ่ม 1,000 กราฟ โดยอิงจากจำนวน vertex และความหนาแน่นของกราฟ Forrest Gump ต้นฉบับ จากนั้นตรวจสอบว่ามีกี่ครั้งที่ค่าเฉลี่ยความยาวเส้นทางของกราฟสุ่มน้อยกว่าของเครือข่าย Forrest Gump ต้นฉบับ กระบวนการนี้เรียกว่า การทดสอบแบบสุ่ม (randomization test)

กราฟ g และค่าเฉลี่ยความยาวเส้นทาง g.apl ที่คำนวณไว้ในแบบฝึกหัดก่อนหน้านี้อยู่ใน workspace แล้ว

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การวิเคราะห์เครือข่ายใน R

ดูคอร์ส

คำแนะนำการฝึกหัด

  • สร้างกราฟสุ่ม 1,000 กราฟจากกราฟต้นฉบับ g โดยรันโค้ดที่สร้าง list object gl และ for loop
  • คำนวณค่าเฉลี่ยความยาวเส้นทางของกราฟสุ่มทั้ง 1,000 กราฟโดยใช้ lapply() จากนั้นสร้าง vector gl.apls จากค่าทั้ง 1,000 ค่าโดยรันโค้ดที่ใช้ unlist()
  • พล็อตฮิสโทแกรมของค่าเฉลี่ยความยาวเส้นทางของกราฟสุ่มทั้ง 1,000 กราฟโดยใช้ hist() กับ vector gl.apls จากนั้นเพิ่มเส้นแนวตั้งสีแดงแบบประโดยใช้ abline() โดยให้แกน x ตัดที่ค่าเฉลี่ยความยาวเส้นทางของกราฟต้นฉบับ g.apl
  • คำนวณสัดส่วนของจำนวนครั้งที่ค่าเฉลี่ยความยาวเส้นทางของกราฟสุ่ม gl.apls น้อยกว่าค่าของกราฟต้นฉบับ g.apl ซึ่งค่านี้คือความน่าจะเป็นที่จะพบค่าเฉลี่ยความยาวเส้นทางที่สังเกตได้โดยบังเอิญ เมื่อกำหนดความหนาแน่นและจำนวน vertex ของกราฟต้นฉบับ

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

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(___ < ___)
แก้ไขและรันโค้ด