Ось скорочена версія коду шасана, що обчислює 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()
(як це запропоновано в коментарі Хайме). Але наведені вище рішення є правильними і для малих n, де st.norm.interval()
даються довірчі інтервали, які занадто вузькі (тобто "фальшива впевненість"). Дивіться мою відповідь на подібне запитання для більш детальної інформації (і один із коментарів Русса тут).
Ось приклад, коли правильні параметри дають (по суті) однакові інтервали довіри:
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)