Berikut adalah versi singkat dari kode shasan, menghitung interval kepercayaan 95% dari mean array 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))
Tetapi menggunakan StatsModels ' tconfint_mean
bisa dibilang lebih bagus:
import statsmodels.stats.api as sms
sms.DescrStatsW(a).tconfint_mean()
Asumsi yang mendasari keduanya adalah bahwa sampel (larik a
) diambil secara independen dari distribusi normal dengan deviasi standar yang tidak diketahui (lihat MathWorld atau Wikipedia ).
Untuk ukuran sampel besar n, mean sampel terdistribusi normal, dan seseorang dapat menghitung interval kepercayaannya menggunakan st.norm.interval()
(seperti yang disarankan dalam komentar Jaime). Tetapi solusi di atas juga benar untuk n kecil, di mana st.norm.interval()
memberikan interval kepercayaan yang terlalu sempit (yaitu, "kepercayaan palsu"). Lihat jawaban saya untuk pertanyaan serupa untuk lebih jelasnya (dan salah satu komentar Russ di sini).
Berikut adalah contoh di mana opsi yang benar memberikan (pada dasarnya) interval kepercayaan yang identik:
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)
Dan akhirnya, hasil yang salah menggunakan st.norm.interval()
:
In [13]: st.norm.interval(0.95, loc=np.mean(a), scale=st.sem(a))
Out[13]: (10.23484868811834, 12.76515131188166)