การสุ่มเครือข่าย
จากแบบฝึกหัดที่แล้ว อาจสังเกตได้ว่าค่าเฉลี่ยความยาวเส้นทาง (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 objectglและ for loop - คำนวณค่าเฉลี่ยความยาวเส้นทางของกราฟสุ่มทั้ง 1,000 กราฟโดยใช้
lapply()จากนั้นสร้าง vectorgl.aplsจากค่าทั้ง 1,000 ค่าโดยรันโค้ดที่ใช้unlist() - พล็อตฮิสโทแกรมของค่าเฉลี่ยความยาวเส้นทางของกราฟสุ่มทั้ง 1,000 กราฟโดยใช้
hist()กับ vectorgl.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(___ < ___)