Đây là phiên bản rút gọn của mã shasan, tính khoảng tin cậy 95% của giá trị trung bình của mảng 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))
Nhưng sử dụng StatsModels ' tconfint_mean
được cho là còn đẹp hơn:
import statsmodels.stats.api as sms
sms.DescrStatsW(a).tconfint_mean()
Các giả định cơ bản cho cả hai là mẫu (mảng a
) được vẽ độc lập với phân phối chuẩn với độ lệch chuẩn chưa biết (xem MathWorld hoặc Wikipedia ).
Đối với cỡ mẫu lớn n, giá trị trung bình của mẫu được phân phối chuẩn và người ta có thể tính khoảng tin cậy của nó bằng cách sử dụng st.norm.interval()
(như được đề xuất trong nhận xét của Jaime). Nhưng các giải pháp trên cũng đúng đối với n nhỏ, nơi st.norm.interval()
cung cấp khoảng tin cậy quá hẹp (tức là "độ tin cậy giả"). Xem câu trả lời của tôi cho một câu hỏi tương tự để biết thêm chi tiết (và một trong những nhận xét của Russ tại đây).
Dưới đây là một ví dụ trong đó các tùy chọn đúng cung cấp (về cơ bản) các khoảng tin cậy giống hệt nhau:
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)
Và cuối cùng, kết quả không chính xác khi sử dụng st.norm.interval()
:
In [13]: st.norm.interval(0.95, loc=np.mean(a), scale=st.sem(a))
Out[13]: (10.23484868811834, 12.76515131188166)