ต่อไปนี้เป็นโค้ดของ shasan แบบย่อโดยคำนวณช่วงความเชื่อมั่น 95% ของค่าเฉลี่ยอาร์เรย์a
:
import numpy as np, scipy.stats as st
st.t.interval(0.95, len(a)-1, loc=np.mean(a), scale=st.sem(a))
แต่การใช้ StatsModels tconfint_mean
เป็นเนื้อหาที่ดีกว่า:
import statsmodels.stats.api as sms
sms.DescrStatsW(a).tconfint_mean()
สมมติฐานพื้นฐานสำหรับทั้งสองคือตัวอย่าง (อาร์เรย์a
) ถูกดึงออกมาโดยไม่ขึ้นกับการแจกแจงปกติโดยไม่ทราบค่าเบี่ยงเบนมาตรฐาน (ดูMathWorldหรือWikipedia )
สำหรับตัวอย่างขนาดใหญ่ n ค่าเฉลี่ยตัวอย่างจะกระจายตามปกติและสามารถคำนวณช่วงความเชื่อมั่นได้โดยใช้st.norm.interval()
(ตามที่แนะนำในความคิดเห็นของ Jaime) แต่วิธีแก้ปัญหาข้างต้นก็ถูกต้องเช่นกันสำหรับ n ขนาดเล็กซึ่งst.norm.interval()
ให้ช่วงความเชื่อมั่นที่แคบเกินไป (กล่าวคือ "ความมั่นใจปลอม") ดูคำตอบของฉันสำหรับคำถามที่คล้ายกันสำหรับรายละเอียดเพิ่มเติม (และหนึ่งในความคิดเห็นของ Russ ที่นี่)
ตัวอย่างที่ตัวเลือกที่ถูกต้องให้ (โดยพื้นฐาน) ช่วงความเชื่อมั่นที่เหมือนกัน:
In [9]: a = range(10,14)
In [10]: mean_confidence_interval(a)
Out[10]: (11.5, 9.4457397432391215, 13.554260256760879)
In [11]: st.t.interval(0.95, len(a)-1, loc=np.mean(a), scale=st.sem(a))
Out[11]: (9.4457397432391215, 13.554260256760879)
In [12]: sms.DescrStatsW(a).tconfint_mean()
Out[12]: (9.4457397432391197, 13.55426025676088)
และสุดท้ายผลลัพธ์ที่ไม่ถูกต้องโดยใช้st.norm.interval()
:
In [13]: st.norm.interval(0.95, loc=np.mean(a), scale=st.sem(a))
Out[13]: (10.23484868811834, 12.76515131188166)