Hier eine verkürzte Version von Shasans Code, die das 95% -Konfidenzintervall des Mittelwerts des Arrays berechnet 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))
Aber die Verwendung von StatsModels tconfint_mean
ist wohl noch schöner:
import statsmodels.stats.api as sms
sms.DescrStatsW(a).tconfint_mean()
Die zugrunde liegenden Annahmen für beide sind, dass die Stichprobe (Array a
) unabhängig von einer Normalverteilung mit unbekannter Standardabweichung gezogen wurde (siehe MathWorld oder Wikipedia ).
Für eine große Stichprobengröße n ist der Stichprobenmittelwert normal verteilt, und man kann sein Konfidenzintervall mit berechnen st.norm.interval()
(wie in Jaimes Kommentar vorgeschlagen). Die obigen Lösungen sind jedoch auch für kleine n korrekt, bei denen st.norm.interval()
zu enge Konfidenzintervalle angegeben werden (dh "falsches Vertrauen"). Siehe meine Antwort auf eine ähnliche Frage für weitere Details (und einen von Russ 'Kommentaren hier).
Hier ein Beispiel, bei dem die richtigen Optionen (im Wesentlichen) identische Konfidenzintervalle ergeben:
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)
Und schließlich das falsche Ergebnis mit st.norm.interval()
:
In [13]: st.norm.interval(0.95, loc=np.mean(a), scale=st.sem(a))
Out[13]: (10.23484868811834, 12.76515131188166)