การแสดงภาพ Permutation Sampling
เพื่อช่วยให้เห็นภาพว่า permutation sampling ทำงานอย่างไร ในแบบฝึกหัดนี้จะสร้างตัวอย่าง permutation และดูผลในรูปแบบกราฟิก
เราจะใช้ข้อมูลจาก Sheffield Weather Station อีกครั้ง โดยพิจารณาปริมาณน้ำฝนรายเดือนในเดือนมิถุนายน (เดือนแล้ง) และเดือนพฤศจิกายน (เดือนฝนชุก) เราคาดว่าการกระจายของข้อมูลทั้งสองอาจแตกต่างกัน จึงจะใช้ permutation sampling เพื่อดูว่า ECDF ของข้อมูลทั้งสอง จะมีลักษณะอย่างไรหาก มีการกระจายแบบเดียวกัน
ข้อมูลถูกเก็บไว้ใน NumPy array ชื่อ rain_june และ rain_november
เป็นการทบทวน: permutation_sample() มี function signature เป็น permutation_sample(data_1, data_2) และคืนค่า permuted_data[:len(data_1)], permuted_data[len(data_1):] โดยที่ permuted_data = np.random.permutation(np.concatenate((data_1, data_2)))
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Statistical Thinking in Python (ตอนที่ 2)
คำแนะนำการฝึกหัด
- เขียนลูป
forเพื่อสร้างตัวอย่าง permutation 50 ชุด คำนวณ ECDF และพล็อตกราฟ- สร้างคู่ตัวอย่าง permutation จาก
rain_juneและrain_novemberโดยใช้ฟังก์ชันpermutation_sample() - สร้างค่า
xและyสำหรับ ECDF ของตัวอย่าง permutation ทั้งสองชุดโดยใช้ฟังก์ชันecdf() - พล็อต ECDF ของตัวอย่าง permutation ชุดแรก (
x_1และy_1) เป็นจุด แล้วทำเช่นเดียวกันกับตัวอย่าง permutation ชุดที่สอง (x_2และy_2)
- สร้างคู่ตัวอย่าง permutation จาก
- สร้างค่า
xและyสำหรับ ECDF ของข้อมูลrain_juneและrain_novemberและพล็อต ECDF โดยใช้อาร์กิวเมนต์color='red'และcolor='blue'ตามลำดับ - ติดป้ายกำกับแกน ตั้งค่า margin 2% และแสดงกราฟ ส่วนนี้ได้เตรียมไว้ให้แล้ว กด ส่งคำตอบ เพื่อดูกราฟได้เลย!
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
for _ in ____:
# Generate permutation samples
perm_sample_1, perm_sample_2 = ____
# Compute ECDFs
x_1, y_1 = ____
x_2, y_2 = ____
# Plot ECDFs of permutation sample
_ = plt.plot(____, ____, marker='.', linestyle='none',
color='red', alpha=0.02)
_ = plt.plot(____, ____, marker='.', linestyle='none',
color='blue', alpha=0.02)
# Create and plot ECDFs from original data
x_1, y_1 = ____
x_2, y_2 = ____
_ = plt.plot(x_1, y_1, marker='.', linestyle='none', color='red')
_ = plt.plot(x_2, y_2, marker='.', linestyle='none', color='blue')
# Label axes, set margin, and show plot
plt.margins(0.02)
_ = plt.xlabel('monthly rainfall (mm)')
_ = plt.ylabel('ECDF')
plt.show()