Bootstrap Replicates ของค่าเฉลี่ยและ SEM
ในแบบฝึกหัดนี้ จะคำนวณค่าประมาณ bootstrap ของฟังก์ชันความหนาแน่นความน่าจะเป็น (PDF) ของค่าเฉลี่ยปริมาณฝนรายปีที่สถานีอุตุนิยมวิทยา Sheffield โดยเป็นการประมาณว่า หากสถานีนี้สามารถทำซ้ำการวัดทั้งหมดตั้งแต่ปี 1883 ถึง 2015 ได้ไม่จำกัดครั้ง ค่าเฉลี่ยปริมาณฝนรายปีจะเป็นเท่าใด นี่คือการประมาณค่าเฉลี่ยในเชิงความน่าจะเป็น โดยจะพล็อต PDF เป็น histogram และจะเห็นว่ามันมีการกระจายแบบ Normal
ในทางทฤษฎีสามารถพิสูจน์ได้ว่า ภายใต้เงื่อนไขที่ไม่เข้มงวดมากนัก ค่าเฉลี่ยจะกระจายแบบ Normal เสมอ (ซึ่งไม่ใช่กฎที่ใช้ได้กับทุกสถิติ แต่ใช้ได้กับค่าเฉลี่ยและสถิติบางตัวเท่านั้น) ค่าเบี่ยงเบนมาตรฐานของการกระจายนี้เรียกว่า standard error of the mean หรือ SEM ซึ่งคำนวณจากค่าเบี่ยงเบนมาตรฐานของข้อมูลหารด้วยรากที่สองของจำนวนจุดข้อมูล กล่าวคือ สำหรับชุดข้อมูลหนึ่ง sem = np.std(data) / np.sqrt(len(data)) ด้วยวิธี hacker statistics จะได้ผลลัพธ์เดียวกันโดยไม่ต้องอนุมานสูตร และจะได้ตรวจสอบผลนี้จาก bootstrap replicates ของคุณ
ชุดข้อมูลถูกโหลดไว้ให้แล้วในอาร์เรย์ชื่อ rainfall
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Statistical Thinking in Python (ตอนที่ 2)
คำแนะนำการฝึกหัด
- ดึง bootstrap replicates จำนวน
10000ตัวของค่าเฉลี่ยปริมาณฝนรายปี โดยใช้ฟังก์ชันdraw_bs_reps()และอาร์เรย์rainfallคำใบ้: ส่งnp.meanเป็นค่าของfuncเพื่อคำนวณค่าเฉลี่ย- เป็นข้อมูลเพิ่มเติม
draw_bs_reps()รับ 3 อาร์กิวเมนต์ ได้แก่data,func, และsize
- เป็นข้อมูลเพิ่มเติม
- คำนวณและพิมพ์ค่า standard error of the mean ของ
rainfall- สูตรที่ใช้คำนวณคือ
np.std(data) / np.sqrt(len(data))
- สูตรที่ใช้คำนวณคือ
- คำนวณและพิมพ์ค่าเบี่ยงเบนมาตรฐานของ bootstrap replicates ใน
bs_replicates - สร้าง histogram ของ replicates โดยใช้อาร์กิวเมนต์
density=Trueและ50bins - กด ส่งคำตอบ เพื่อดูกราฟ!
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Take 10,000 bootstrap replicates of the mean: bs_replicates
bs_replicates = ____
# Compute and print SEM
sem = ____ / np.sqrt(____)
print(sem)
# Compute and print standard deviation of bootstrap replicates
bs_std = ____
print(bs_std)
# Make a histogram of the results
_ = plt.hist(____, ____=50, ____=True)
_ = plt.xlabel('mean annual rainfall (mm)')
_ = plt.ylabel('PDF')
# Show the plot
plt.show()