การลงคะแนนเสียงพระราชบัญญัติสิทธิพลเมือง ค.ศ. 1964
พระราชบัญญัติสิทธิพลเมือง ค.ศ. 1964 ถือเป็นหนึ่งในกฎหมายที่สำคัญที่สุดที่เคยผ่านสภาในสหรัฐอเมริกา หากไม่นับคะแนน "งดออกเสียง" และ "ไม่เข้าร่วม" สมาชิกสภาผู้แทนราษฎรจากพรรค Democrat 153 คน และพรรค Republican 136 คน โหวต yea (เห็นด้วย) ขณะที่ Democrat 91 คน และ Republican 35 คน โหวต nay (ไม่เห็นด้วย) แล้วสังกัดพรรคการเมืองส่งผลต่อการลงคะแนนเสียงหรือไม่?
เพื่อตอบคำถามนี้ จะประเมินสมมติฐานที่ว่าพรรคของสมาชิกสภาไม่มีผลต่อการโหวต โดยใช้สัดส่วนของ Democrat ที่โหวตเห็นด้วยเป็นสถิติทดสอบ และประเมินความน่าจะเป็นที่จะสังเกตเห็นสัดส่วน Democrat ที่โหวตเห็นด้วยน้อยกว่าหรือเท่ากับสัดส่วนที่สังเกตได้คือ 153/244 (ใช่แล้ว น้อยกว่าหรือเท่ากับ เพราะในปี 1964 พรรค Democrat กลับมีท่าทีที่ก้าวหน้าน้อยกว่าในเรื่องสิทธิพลเมือง) โดยจะสุ่มสลับป้ายกำกับพรรคของสมาชิกสภา แล้วแบ่งพวกเขาออกเป็น "Democrat" และ "Republican" โดยพลการ จากนั้นคำนวณสัดส่วนของ Democrat ที่โหวต yea
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Statistical Thinking in Python (ตอนที่ 2)
คำแนะนำการฝึกหัด
- สร้าง Boolean array ชื่อ
demsและrepsที่เก็บคะแนนโหวตของแต่ละพรรค เช่นdemsมีค่าTrue153 ตัว และFalse91 ตัว - เขียนฟังก์ชัน
frac_yea_dems(dems, reps)ที่คืนค่าสัดส่วนของ Democrat ที่โหวต yea อินพุตแรกเป็น Boolean array และต้องมีอินพุตสองตัวเพื่อให้ใช้กับฟังก์ชันdraw_perm_reps()ได้ แม้ว่าตัวที่สองจะไม่ได้ถูกนำไปใช้ก็ตาม - ใช้ฟังก์ชัน
draw_perm_reps()เพื่อสร้าง permutation replicates ของสัดส่วนคะแนนโหวต yea ของ Democrat จำนวน 10,000 ครั้ง - คำนวณและแสดงผล p-value
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Construct arrays of data: dems, reps
dems = np.array([True] * 153 + [False] * 91)
reps = ____
def frac_yea_dems(dems, reps):
"""Compute fraction of Democrat yea votes."""
frac = ____ / ____
return frac
# Acquire permutation samples: perm_replicates
perm_replicates = ____(____, ____, frac_yea_dems, ____)
# Compute and print p-value: p
p = np.sum(____ <= 153/244) / len(____)
print('p-value =', p)